单片机学习之十二:按键控制跑马灯(中断)
时间:11-18
来源:互联网
点击:
del3: mov r1,#0ffh
del4: djnz r1,del4
djnz r2,del3
ret
end
大家把这个程序下载到学习板上看看,会发现每次按下按键的时候,程序进入中断后,在返回的时候,会回到那个位置继续开始左右循环。这就是由于我们在进入中断的时候保护了现场的缘故。
五、几点说明
主程序是左右跑马灯,其中用到了r7,r6寄存器,还调用了100ms延时,所以也用到了r2,r1寄存器。所以我们要特别注意,在中断服务程序中,要避免使用这几个寄存器。否则,就会导致在中断程序中,修改了r寄存器的内容,导致返回主程序的时候出现问题。
在中断服务程序中,用到了10ms延时程序,这个延时程序使用的寄存器是r4,r3。另外,还调用了light2子程序,其中用到了r5寄存器。所以。主程序和中断服务程序用到的寄存器r就没有冲突。
那么如果由于条件的限制,使得主程序和中断程序的寄存器的数量较多,一组8个寄存器不够,该怎么办呢?
我们也可以象保护a寄存器一样,在进入中断之后,首先把某一个在中断服务程序中也要用到的r寄存器的内容压入堆栈,在退出中断之前再弹出来。
或者我们就重新选择寄存器区吧,由于我们缺省使用的是0区的寄存器组,所以我们就改变psw程序状态字中的rs1和rs0,就可以换另外的一组寄存器区了。例如,我们在进入中断服务程序之后,写这样的两条指令:
clr rs1
setb rs0
这样,我们就用了1区的8个寄存器,这样就没有问题啦。
单片机按键控制跑马灯中 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)