51单片机往复流水灯汇编程序r
实验目的:实现8个LED灯左右移动。r
实验原理:本实验采用的芯片为STC12C5A60S2。LED灯接在P0口,共阳极,送低电平时灯就会亮。用标志位40H记录要左移还是右移,到了一端改变标志位,即可实现左右往复移动。注意用LED灯时,必须把跳线接上。r
程序清单:r
MAINttMOVA0FEHttP00那盏先亮r
MOVP0Att点亮第一盏灯r
LCALLDELAYtt延时r
CLR40Httt往复标志位r
STARTttCJNEA07FHFIRSTt是否最后一盏灯r
CPL40Httt到了,标志位取反r
FIRSTttCJNEA0FEHROTt是否第一盏灯r
CPL40Httt到了,标志位取反r
ROTttJNB40HROTRtt标志位为0则转右移r
RLAttt为1则左移r
SJMPLIGHTtt点灯r
ROTRttRRAttt右移r
LIGHTttMOVP0AttA中新值送P0r
LCALLDELAYtt灯亮一段时间r
SJMPSTARTtt循环r
DELAYttMOVR730tt延时程序r
DELAY1ttMOVR6200ttr
DELAY2ttMOVR5123ttr
DELAY3ttDJNZR5DELAY3ttr
NOPtttr
DJNZR6DELAY2ttr
DJNZR7DELAY1ttr
RETtttr
ENDr
实验效果:8个LED灯依次亮,到了一端又回头走到另一端,实验成功。r
思考题:能否用定时器中断实现?r
答:能。可将START到LIGHT一段程序作为定时器中断服务程序,计数溢出马上进行测试A值及移位操作,不需延时程序,也不用反复测试,大大节省了系统资源。r