我是初学者,只是去年课上学了点单片机皮毛。看的是汇编语言的。想请教一下各位求教一下啊。。

恳求各位单片机汇编高手,给我指点一下亮灯循环右移的指令每一步的意思,尤其是子程序部分。有些网友说右移也可以像左移一样不需要调用子程序,不知道可不可以。在此谢谢了。。。亮灯... 恳求各位单片机汇编高手,给我指点一下亮灯循环右移的指令每一步的意思,尤其是子程序部分。 有些网友说右移也可以像左移一样不需要调用子程序,不知道可不可以。在此谢谢了。。。

亮灯循环左移:
START: MOV R0, #8 ;设左移8次
MOV A ,#11111110B;存入开始点亮灯位置
LOOP: MOV P1, A ;传送到P1并输出
RL A ;左移一位
DJNZ R0,LOOP;判断移动次数
JMP START ;重新设定显示值
END ;结束程序

亮灯循环右移:
START: MOV R0 , #8 ;设右移8次
MOV A , #01111111B ;存入开始点亮灯位置
LOOP: MOV P1 , A ;传送到P1并输出
ACALL DELAY ;调延时子程序
RR A ;右移一位
DJNZ R0 ,LOOP ; 判断移动次数
JMP START ;重新设定显示值
DELAY : MOV R5 , #50
DLY1 : MOV R6 , #100
DLY2: MOV R7 , #100
DJNZ R7, $
DJNZ R6 ,DLY2
DJNZ R5 ,DLY1
RET ; 子程序返回
END ;程序结束
展开
 我来答
tx_bird
2012-04-06 · TA获得超过1843个赞
知道小有建树答主
回答量:738
采纳率:75%
帮助的人:724万
展开全部
所谓循环,其实2个程序都在循环,问题在于是否需要肉眼去分辨?左循环的程序,由于没有调用延时子程序,其循环速度很快一次亮灭过程可能只有几个微秒,灯自身都反映不过来是亮还是灭,肉眼是根本无法分辨的。右循环的程序,调用了延时子程序,使得每次P1输出变化之后,都会“消磨”一点时间后,再进入下一次的循环,500000次的空跑可能会花上0.5S左右的时间(具体时间由晶振决定),这样肉眼才能分辨出来。
追问
我已经明白了延时子程序的作用了,你能告诉我一下子程序每步的含义吗?我看了好几个延时子程序都是一样的,是不是只要编延时子程序都是一样的?我是个初学者,请问要注意点什么?我还在上学,是不是该等到毕业买块实验板自己一边编程一边学习?
追答
楼主指的是延时子程序吗?
DELAY : MOV R5 , #50 ;将立即数50,赋值给R5
DLY1 : MOV R6 , #100 ;将立即数100,赋值给R6
DLY2: MOV R7 , #100 ;将立即数100,赋值给R7
DJNZ R7, $ ;R7=R7-1,然后R7如果>0,那么R7继续减1,直到R7=0
DJNZ R6 ,DLY2 ;R6=R6-1,如果R6>0,那么跳转到标号DLY2处,否则执行下一条
DJNZ R5 ,DLY1 ;R5=R5-1,如果R5>0,那么跳转到标号DLY1处,否则执行下一条
RET ; 子程序返回
这种类型的延时程序就是让单片机进入循环(这个程序有3重循环嵌套),由于循环的过程是要消耗单片机运行时间的,消耗多少时间,就相当于延时多少时间。
51单片机是8位机,其实是很简单的,不要想得太复杂。现在便宜的学习板可能才三五十块钱1个,再花三五十块钱,买2本51的书看看,很快就能上手的,至于有些编程技巧可能要慢慢积累经验的。
锦绣江山千万年
2012-04-05 · TA获得超过4163个赞
知道大有可为答主
回答量:1424
采纳率:40%
帮助的人:1578万
展开全部
其实每条指令后面都已经注释清楚是什么意思了。但由于每条指令执行的速度很快,是微秒级的,所以看不出灯循环的效果,因此左移右移都是需要调用延时子程序才行的。
还是不明白的话再问我吧。
追问
不好意思,这几天学校事情比较多没有来得及回复。你的意思是上述的左移循环是不完美的?我想问一下,怎样才能学好单片机啊?我自己看了书籍,越往后看越看不懂。去年是上课学过的,也做过实验,不过都是皮毛也没有认真学。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4a8545ef1
2012-04-06 · 超过31用户采纳过TA的回答
知道答主
回答量:298
采纳率:0%
帮助的人:71.3万
展开全部
DELAY : MOV R5 , #50
你的延时子程序时间设置太小了,单片机的频率你知道吧!去查一下你就能懂了!加油,看好你的
追问
谢谢,在学校里自学难度好大啊。我知道单片机指令执行速度都是微秒级别的,#50 的意思是1秒吗?
追答
不是,你要看单片机的工作频率的,一般是12MHZ,时间T是1/12M*12分频=1us,在晶振那块有这个知识点,加油,看好你的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liyuzhiliyu
2012-04-06 · TA获得超过353个赞
知道答主
回答量:638
采纳率:0%
帮助的人:355万
展开全部
你先知道各条指令的作用,不然你也不会编
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guanweiud
2012-04-07
知道答主
回答量:5
采纳率:0%
帮助的人:8.8万
展开全部
右移程序中“DELAY”子程序是一个延时程序,也就是说当一个灯点亮后会延时一段时间,然后再点亮下一个灯。延时的时间就是“DELAY”子程序设定的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冲动小弟
2012-04-06
知道答主
回答量:14
采纳率:0%
帮助的人:5万
展开全部
注释部分解释的很详细啊!不知楼主哪里不懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式