80C51单片机问题,看不懂程序,求讲解,字有点多

刚学单片机,做实验,(实验现象是6个灯,其中1个是灭的,5个亮,一直的循环亮,将程序的mov a,#01h改成#0feh后,变成只有一个灯亮并循环。)老师直接给了个汇编语言的程序,看不懂,如图。求详细讲解,谢谢了。我先讲下我不懂的地方:1.做实验时用示波器,是连到单片机实验电路板中的p2口,程序中为什么有mov p0,#0;?而且一开始mov p2,#0后来又有一个mov p2,#00h,前面的0是十进制的吧 为什么后来有有一个十六进制的寻址。2.setb p1.0的意识是将p1.0为地址的位单元置1。 这个指令是干嘛的?p1.0为什么多了个.0,不能直接p1吗?3.lcall是指子程序调用,是调用到delay程序吧4.mov a,#01h中 a是累加器吧 #01h对实验中的灯亮有什么影响,为什么改成#0feh,就会产生我所说的实验现象?5.main:和loop:是不是单片机自有的独立程序,mian是主程序,loop是循环?而delay和tt是用户自己编制的,名字也是可以自定义的?6.delay后面的那部分看不懂,delay和tt的r7和r6是不是工作寄存器?6和7是随机的,只要在0到7中随机选两个7.djnz是减1后不为0则转移 r6和r7不是设置0了吗 减1变成负数,就转移了? 还有djnz r6后面那个类似s的又是什么东西?看不懂delay后面的这部分。8.loop中的rl是灯亮的循环方向吧,6个灯是不是有自己的地址,分别控制每个灯,什么时候置1亮,什么时候置0灭?9.main和loop中都有5个lcall delay,为什么做实验的时候,删除几个,(我忘记是删main里的,还是删loop里的,亦或两个里面的我也删了),示波器中出现方波的速度变快了?还有我觉得这5个指令是控制6个灯亮的间隔时间,为什么删除几个后,示波器上的方波还是一个周期的方波图像?10.main和loop中为什么都要有lcall delay指令?11.程序怎么改?可以更改灯亮的间隔时间?学校安排课时超少,老师上课快速过下课本,这个学期就学完了,他也没办法,只能叫我们自学。我学完跟没学一样。问题有点多,但能为我讲解下吗?谢谢了。

在word里答的,复制过来就变了,粘点图片吧,你很认真,加油!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-24
真是不好给你讲,P1·0跟P1分不清还怎么操作呀 P1有8个管脚 分别叫 p1·0 p1·1……
$表示本操作语句的地址
delay是延时,根据需要可长可短,所以去掉两个也可以
DJNZ r6如果r6是0,就要执行256次才能再次是0
假设高电平点亮,01h是最低位一个灯亮,那么左移后就变成了 第二个灯亮 然后第三个灯亮…
总之,老师没讲好,学生也没认真学
对A是累加器还有怀疑,51单片机里没有任何一个程序能离开累加器A
想自学也挺简单,网上应该很容易搜到51单片机汇编语言的视频教程
边看教程也实验,挺简单的追问

不是我和老师的问题,学校课时安排就那么坑,基本和没学一样,我自己单纯的看书,真的痛苦。你可以和我讲下这两个问题吗?我就采纳你了 1.实验现象是6个灯,其中1个是灭的,5个亮,一直的循环亮,将程序的mov a,#01h改成#0feh后,变成只有一个灯亮并循环。 2.程序怎么改?可以更改灯亮的间隔时间?

追答

0feh化成二进制是 1111 1110 如果只有一个灯亮,说明低电平是亮灯
那左移一次变成 1111 1100 两个灯亮 左移两次是 1111 1000 三个灯亮
但和你说的01h是亮一个灯有矛盾
改变灯亮时间,既可以增加或者delay的个数
也可以调整单次delay的延时时间 即r6的初值
main loop都是标号,是程序跳转用的,可以自己命名
没有标号就好象让你去一个地方,而没有地名,你怎么找

本回答被网友采纳
第2个回答  2017-12-24
你看看汇编指令就明白了,这么多,不好写
第3个回答  2017-12-24
我也看不懂
第4个回答  2017-12-24
我也不知道,你自己看吧

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网