51单片机编程求指导。。。
来自: 更新日期:早些时候
单片机51编程~
其实算法很简单,只要熟悉一下单片机的加法指令和循环移位指令,自己就可以编写出来。
1 算法:
就是使用指针 连续对20H开始的连续4个单字节二进制数相加,结果存入31H单元,要考虑进位,(进位部分存入31H单元)
求平均值 就是对和除4,可以使用循环右移指令 每移一次 相当于除2 总共2次就行了。
2 楼上的错误: 使用指令 ADD A,31H 求的和在累加器A里,并没有存入31H
使用指令 MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
同样没有将结果回送给31H单元(保存)
呵呵 满意就选满意回答 (想要正确程序 可以发消息给我)
SQUD:
MOV R0,#20H ;间接寻址首地址送R0
MOV 30H,#0 ;累加结果高位清零
MOV 31H,#0 ;累加结果低位清零
MOV R7,#4 ;循环4次累加4个数
SQUD1:
MOV A,@R0 ;取数送A
ADD A,31H ;与结果低位相加
JNC SQUD2 ;没有进位转
INC 30H ;有进位高位加1
SQUD2:
INC R0 ;地址加1
DJNZ R7,SQUD1 ;判断5个数是否加完
MOV R7,#2
SQUD3:
MOV A,30H ;高低位送A
RRC A ;带进位循环右移
MOV 30H,A ;回送30H
MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
DJNZ R7,SQUD3 ;共移两次相当于除4
MOV 32H,A ;结果存32H
RET
51单片机编程求指导。。。视频
相关评论:13041706218:我用keil编译的程序出错,不懂,求指导?数据地址空间溢出是怎么回事...
安蒋清你内存用的太多了,超出了这款芯片的实际RAM容量,所以报错。好好把程序中的变量整理整理,不要定义太多的全局变量和静态变量,有些地方RAM能复用就复用,数组用多少就开多大,不要大手大脚。单片机使用内存都要精打细算的,咱们和写PC软件的兄弟可不能比啊。
13041706218:我的51单片机程序忽然烧不进去了,求大虾指导,拜谢了
安蒋清出现这种情况有很多种,有可能是烧录程序的软件出了问题(我之前也遇到过,当时我用的是STC-ISPV4.88,当时怎么弄就是烧不进,后来重装成STC-ISPV4.80就可以了);也有可能是芯片烧坏了,你可以换一个芯片试试,希望能够帮到你。
13041706218:51单片机内部eeprom怎么使用,求大神指导,查过一些资料,但是看不明白...
安蒋清P4 EQU 0C0H IAP_DATA EQU 0C2H IAP_ADDRH EQU 0C3H IAP_ADDRL EQU 0C4H IAP_CMD EQU 0C5H IAP_TRIG EQU 0C6H IAP_CONTR EQU 0C7H ;定义ISP\/IAP命令 ISP_IAP_BYTE_READ EQU 1H ;字节读 ISP_IAP_BYTE_PROGRAM EQU 2H ;字节编程,可以将1写成0,要将...
13041706218:51单片机问题,这是个在LED上显示从0到100,程序中display()显示函数...
安蒋清你放在if里面,那就只有当if条件成立时,才能执行这个函数,而从你的程序来看,进入定时器T0中断20次才能满足这个if的条件,这就导致运行display函数的频率降低,数码管扫描频率降低。
13041706218:C51单片机学习求助!
安蒋清单片机我玩得很顺手,然后去学ARM,才发现那东西不像单片机那么容易上手,好在我还学过DSP,这才算是有点入门帮忙。所以ARM的学习是不能急的。单片机的学习,我想你就不必要去学习51了,直接学习AVR,你就算学了51,但对你学习AVR没有什么帮忙,因为这两个单片机相差太多了,我想51也要快过时了。学...
13041706218:求解51单片机C语言程序
安蒋清EX0=1;开启的是外部中断, 而你使用的是外部中断0,void int1() interrupt 0 是0而不是1,IE0(TCON.1),外部中断0中断请求标志位。你也没打开。你改下吧,不懂再问吧。
13041706218:AVR延时程序一段代码不懂 求高手指导
安蒋清那个只是个大概,意思是微秒级的意思。C语言的程序很难做到精确到1us的延时。
13041706218:求高手指导用51单片机控制多个三极管开关的外围电路图
安蒋清这个电路挺简单的,图传给你。不过,这些电阻并非完全的并联串联,因为三极管在饱和导通时,Vce是有0.1~0.3V的压降。图中用两只电阻为例说明,多个你自己应该知道怎么做。
13041706218:单片机原理与应用实践教学指导书 内容提要
安蒋清这是一本专注于单片机原理与应用实践的教学指导书,主要分为两个部分。第一部分首先会详细地讲解AEDK5196ET系统,以及LCA51ET软件的基础概念和操作方法,旨在为读者提供系统性的理论基础。在第二部分,书中精心设计了十七个实验项目,涵盖了广泛的实践内容。这些实验涵盖了单片机软硬件的开发和调试技巧,...
13041706218:怎么学号汇编语言啊,本人比较笨 求指导啊
安蒋清先买本51单片机的汇编看看。先熟悉存储器、定时器\/计时器、输入输出等硬件结构。不用深入 再熟悉51的汇编按着章节顺序看就行看一两遍能懂差不多就行,看不懂就多看两遍。每小节的例子记得好好看看。然后再看扩展和接口。再后面就看应用实例。看不懂了就往前翻书。例子都看懂了就差不多了。然后再...
稍做改动,可以实现流水灯了,试试看:
void main()
{
while(1) {
a = 3;
while(a--) {
P1 = 0x55; delay(22000);
P1 = 0xAA; delay(22000);
}
temp=0xfe;
b = 24;
delay(10000);
while(b--) {
temp = _crol_(temp, 1);
P1 = temp; delay(10000);
} } }
假设在P1口:
loop:
mov a,p1
anl a,#0fh
mov b,a
xrl a,#03h
jz mot1 ;如果cd闭合
mov a,b
xrl a,#0ch ;如果ab闭合
jz mot2
mov a,b
xrl a,#00h ;如果abcd闭合
jz mot3
jnz err ;如果不属于上述情况
mot1:
setb p1.7
clr p1.5
ljmp next
mot2:
clr p1.7
setb p1.5
ljmp next
mot3:
setb p1.7
setb p1.5
ljmp next
err:
clr p1.7
clr p1.5
next:
limp loop
其实算法很简单,只要熟悉一下单片机的加法指令和循环移位指令,自己就可以编写出来。
1 算法:
就是使用指针 连续对20H开始的连续4个单字节二进制数相加,结果存入31H单元,要考虑进位,(进位部分存入31H单元)
求平均值 就是对和除4,可以使用循环右移指令 每移一次 相当于除2 总共2次就行了。
2 楼上的错误: 使用指令 ADD A,31H 求的和在累加器A里,并没有存入31H
使用指令 MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
同样没有将结果回送给31H单元(保存)
呵呵 满意就选满意回答 (想要正确程序 可以发消息给我)
SQUD:
MOV R0,#20H ;间接寻址首地址送R0
MOV 30H,#0 ;累加结果高位清零
MOV 31H,#0 ;累加结果低位清零
MOV R7,#4 ;循环4次累加4个数
SQUD1:
MOV A,@R0 ;取数送A
ADD A,31H ;与结果低位相加
JNC SQUD2 ;没有进位转
INC 30H ;有进位高位加1
SQUD2:
INC R0 ;地址加1
DJNZ R7,SQUD1 ;判断5个数是否加完
MOV R7,#2
SQUD3:
MOV A,30H ;高低位送A
RRC A ;带进位循环右移
MOV 30H,A ;回送30H
MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
DJNZ R7,SQUD3 ;共移两次相当于除4
MOV 32H,A ;结果存32H
RET
51单片机编程求指导。。。视频
相关评论:
安蒋清你内存用的太多了,超出了这款芯片的实际RAM容量,所以报错。好好把程序中的变量整理整理,不要定义太多的全局变量和静态变量,有些地方RAM能复用就复用,数组用多少就开多大,不要大手大脚。单片机使用内存都要精打细算的,咱们和写PC软件的兄弟可不能比啊。
安蒋清出现这种情况有很多种,有可能是烧录程序的软件出了问题(我之前也遇到过,当时我用的是STC-ISPV4.88,当时怎么弄就是烧不进,后来重装成STC-ISPV4.80就可以了);也有可能是芯片烧坏了,你可以换一个芯片试试,希望能够帮到你。
安蒋清P4 EQU 0C0H IAP_DATA EQU 0C2H IAP_ADDRH EQU 0C3H IAP_ADDRL EQU 0C4H IAP_CMD EQU 0C5H IAP_TRIG EQU 0C6H IAP_CONTR EQU 0C7H ;定义ISP\/IAP命令 ISP_IAP_BYTE_READ EQU 1H ;字节读 ISP_IAP_BYTE_PROGRAM EQU 2H ;字节编程,可以将1写成0,要将...
安蒋清你放在if里面,那就只有当if条件成立时,才能执行这个函数,而从你的程序来看,进入定时器T0中断20次才能满足这个if的条件,这就导致运行display函数的频率降低,数码管扫描频率降低。
安蒋清单片机我玩得很顺手,然后去学ARM,才发现那东西不像单片机那么容易上手,好在我还学过DSP,这才算是有点入门帮忙。所以ARM的学习是不能急的。单片机的学习,我想你就不必要去学习51了,直接学习AVR,你就算学了51,但对你学习AVR没有什么帮忙,因为这两个单片机相差太多了,我想51也要快过时了。学...
安蒋清EX0=1;开启的是外部中断, 而你使用的是外部中断0,void int1() interrupt 0 是0而不是1,IE0(TCON.1),外部中断0中断请求标志位。你也没打开。你改下吧,不懂再问吧。
安蒋清那个只是个大概,意思是微秒级的意思。C语言的程序很难做到精确到1us的延时。
安蒋清这个电路挺简单的,图传给你。不过,这些电阻并非完全的并联串联,因为三极管在饱和导通时,Vce是有0.1~0.3V的压降。图中用两只电阻为例说明,多个你自己应该知道怎么做。
安蒋清这是一本专注于单片机原理与应用实践的教学指导书,主要分为两个部分。第一部分首先会详细地讲解AEDK5196ET系统,以及LCA51ET软件的基础概念和操作方法,旨在为读者提供系统性的理论基础。在第二部分,书中精心设计了十七个实验项目,涵盖了广泛的实践内容。这些实验涵盖了单片机软硬件的开发和调试技巧,...
安蒋清先买本51单片机的汇编看看。先熟悉存储器、定时器\/计时器、输入输出等硬件结构。不用深入 再熟悉51的汇编按着章节顺序看就行看一两遍能懂差不多就行,看不懂就多看两遍。每小节的例子记得好好看看。然后再看扩展和接口。再后面就看应用实例。看不懂了就往前翻书。例子都看懂了就差不多了。然后再...