单片机80c51,新手,求讲解一个简单的程序

如图,实验现象是6个灯,其中1个灭,5个亮,一直循环。我说下我的理解,自学的,请指正。这个程序是别人给,就我说的实验现象,这个程序是不是有几条程序是没用的?(1)实验只用了P2口,mov p0,#0和setb p1.0这两个指令是不是没用的?(2)为什么p2口有两次置0,有什么用?我觉得一次置0后,因为低电平有效,6个灯就全亮了啊(3)main中的lcall delay是不是控制程序main运行到loop的间隔,而loop中的lcall delay是控制灯亮的间隔?(4)如果我要控制灯亮的间隔,是不是有两种方法,一是改变lcall delay指令的数目 二是改变delay 中的r7的初值?(5)如果改变r7的初值,那么main中的间隔时间也改变,我单纯的只想改变灯亮的间隔时间,最好的方法是不是改变loop的lcall delay指令数目?(6)tt这个程序是不是多余,没用的?因为我感觉没用到(7)做实验时,用示波器测了p2口的其中1个引脚,它是周期的图像,如果我只看程序,怎么算出一个灯的周期,主要是我不太通,delay延迟的时间?(8)p2口有8个引脚,而实验单片机电路板只有6个灯,左移到0100 0000或1000 0000的情况,是不是会出现6个灯全亮的情况,但我感觉实验的时候,没出现这种情况,是真的不会出现,还是我粗心没发现?问题有点多,但请讲解,谢谢了,自己学的有点苦难。
我感觉程序中的一些注释是错的?如每次只亮一个灯的那个注释就是错的,因为是低电平有效,应该是每次有一个灯灭?

第1个回答  2017-12-26
(1)实验只用了P2口,mov p0,#0和setb p1.0这两个指令是不是没用的?
因为51io默认是弱上拉高电平,可能是一上电就在叫,所以上来先关。
(2)为什么p2口有两次置0,有什么用?我觉得一次置0后,因为低电平有效,6个灯就全亮了啊
那个是没必要的,另外:注释说全灭呀,你程序和电路是不是不一样啊
(3)main中的lcall delay是不是控制程序main运行到loop的间隔,而loop中的lcall delay是控制灯亮的间隔?
lcalldelay是一段固定的时间(没开中断),在哪里掉用都是一样的时间,所以整了好几个。loop中是控制每次切换灯状态的时间。
(4)如果我要控制灯亮的间隔,是不是有两种方法,一是改变lcall delay指令的数目 二是改变delay 中的r7的初值?
djnz 是先减1再判,所以r7初值0已经最大了
(5)如果改变r7的初值,那么main中的间隔时间也改变,我单纯的只想改变灯亮的间隔时间,最好的方法是不是改变loop的lcall delay指令数目?
你可以设计几个不同的函数,但是以后学的深入了就少用这种死等的方法,没效率。
(6)tt这个程序是不是多余,没用的?因为我感觉没用到
tt不是程序,是个标号,对应后面有djnz ??tt
(7)做实验时,用示波器测了p2口的其中1个引脚,它是周期的图像,如果我只看程序,怎么算出一个灯的周期,主要是我不太通,delay延迟的时间?
这个得看你什么单片机,主频多少,核算出每个指令周期。特别的是不同的单片机指令周期差别很大,而且现在比较新的51都是流水线处理指令,一个指令多少时间不是特别好说。开了中断就更不好说了,所以以后净量少用。
(8)p2口有8个引脚,而实验单片机电路板只有6个灯,左移到0100 0000或1000 0000的情况,是不是会出现6个灯全亮的情况,但我感觉实验的时候,没出现这种情况,是真的不会出现,还是我粗心没发现?
是有的,这程序就没管那么多了。是亮还是灭你再核对一下。
问题有点多,但请讲解,谢谢了,自己学的有点苦难。
尽量用C吧这汇编学多了不划算,一换平台就全做废了。单片机五花八门多了去了。
第2个回答  2017-12-26
;可以修改为以下状态
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P2,#0
LOOP:
MOV R2,#6
MOV A,#01H
LOOP1:
MOV P2,A
LCALL DELAY
DJNZ R2,LOOP1
SJMP LOOP
DELAY:
MOV R7,#0
DLY:
MOV R6,#0
DJNZ R6,$
DJNZ R7,DLY
RET
END

(1)修改的程序就只用了P2口,其余未处理,原程序用其余口,应该有其他条件
(2)一次置0就可以了,从程序看是高有效。
(3)main中的lcall delay只是延时约130毫秒左右
(4)如果要控制灯亮的间隔,一是改变lcall delay指令的数目 二是改变delay 中的r7或R6的值
(5)改变间隔时间最好的方法是加传递参数,延时程序稍加修改就可以。
(6)tt这只是一个标号,含与延时函数中
(7)delay延迟的时间的计算按指令执行周期和循环次数就可以计算了
(8)p2口有8个引脚,而实验单片机电路板只有6个灯,所以上面程序稍稍做了修改。

本回答被提问者和网友采纳
第3个回答  2017-12-26
你还是把指令集大概的,把常用理解一下好点,常用的也就十来条指令。入门选择一些简单点的程序,代码不要超过10行的,好理解一点,从最开始的置位,清除,延时,位移,慢慢的,写多了就知道了。

80c51单片机120秒延时程序怎么编写
为了编写一个80C51单片机的120秒延时程序,需要遵循以下步骤。首先,我们需要创建一个名为“delay”的函数,用于实现延时功能。该函数接收一个参数“z”,即所需延时的周期数。在函数内部,我们使用两个嵌套的循环结构,分别用变量“x”和“y”作为循环计数器。外层循环的次数由参数“z”决定,即循环“z...

80c51单片机交通灯程序
MOV A,#01H ;赋初值 MOV R0,#08 ;循环变量,循环7次,控制7个灯 LOOP: MOV P1,A ;点亮第一个灯 LCALL DELAY2 ;延迟 RL A ;A的值加1,循环左移 DJNZ R0,LOOP ;RO的值减1不等于1则执行LOOP标号 SETB P3.2 ;P3.2灯亮 LCALL DELAY2 ;延迟 ...

80c51单片机音乐播放器设计
⑸ 每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。但如果1拍为0.4秒,1\/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1\/4节拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1\/4拍的DELAY时间,其余的节拍就是它的倍数,如下表...

80c51单片机硬件怎么控制小灯的?
要使用80C51单片机硬件控制小灯,我们需要理解代码逻辑并将其应用到实际硬件中。首先,`#include main( )` 这一行表示我们使用的是单片机的主函数。主函数是单片机程序的入口点,所有程序执行都将从此处开始。然后,`int i,j,LED;` 定义了三个变量,`i` 和 `j` 作为循环计数器,`LED` 用于存储控...

单片机·汇编初学者求教高手:80c51用定时器在p1.0管脚上产生一周期为2...
{ out=0; \/\/ P1.0输出为0 TMOD=0x01; \/\/工作方式1,16位计数 TH0=0x03; \/\/给定时器初值,周期为2ms,则半个周期为1ms TL0=0xe8; \/\/给定时器初值 EA=1; \/\/打开中断 ET0=1; \/\/允许中断 TR0=1; \/\/启动定时器 while(1); \/\/等待 } void Time0(void...

单片机秒表程序 80C51
求一个单片机程序用80C51单片机制作秒表的程序三个按键两个数码管有复位电路外接晶振求一个程序简单介绍一下程序万分感谢会加分... 求一个单片机程序 用80C51单片机制作秒表的程序 三个按键 两个数码管 有复位电路 外接晶振 求一个程序 简单介绍一下程序万分感谢 会加分 展开 ...

求大神解答下单片机80c51,下面程序中的一个能够让万年历调时间的代码...
1,我们可以通过这一位判断时钟在单片机系统掉电后是否还正常运行。剩下的7 位高 3 位是秒的十位,低 4 位是秒的个位,这里再提请注意一次,DS1302 内部是 BCD 码,而秒的十位最大是 5,所以 3 个二进制位就够了。second|0x80后面的这个数据使用 | 符号就是把最高位CH变成1.

单片机80C51的指令系统
MOV A,#00H \/\/把立即数0送给A ,A=#00H MOV @R0,A \/\/A送内部RAM单元,40H=0 MOV A,#3BH \/\/3BH送给A, A=#3BH MOV 41H,A \/\/ (41H)=#3BH MOV 42H,41H \/\/ (42H )=#3BH 程序全部执行完之后,A中内容为0,R0为40H,(40H)=(41H)=(...

80c51单片机让第三个灯常亮,其他灯不变的程序怎么写
那得看你是什么驱动电平:低电平:LED_Port &=~(1<<3);\/\/按单片机第0颗灯开始算;高电平:LED_Port |=1<<3;如果你想让第3颗灯的状态相反(亮↔灭),其他不变:LED_Port ^=1<<3;

用汇编语言编写80c51单片机程序,求内部RAM中50H~59H十个单元内容的平均...
;A=溢出部分的平均值,肯定小于0FF MOV 5AH,A ;第一部分的平均值p1给5AH MOV A,#6H MOV B,5BH MUL AB ;值给5BH,最大值是3CH,所以不用考虑溢出。ADD A,5CH ;MOV B,#10 DIV AB ;6B+s1的平均值p2 ADD A,5AH MOV 5AH,A ;p1+p2 MOV 5BH,B SJMP END ...

相似回答