第1个回答 2020-03-06
51单片机用汇编语言编写流水灯程序,就是控制多个led
,使其在特定时间间隔内,只有一个led
发光,其他熄灭,用这种方式顺序移动点亮led的位置,就形成了流水灯的效果。以下是程序:
;假设晶振12mhz,p1控制8个led低电平亮
;启动入口========================
org
0000h
;复位启动
ajmp
start
;
org
001bh
;t1中断
ajmp
t1int
;
;定义变量========================
ysjs
equ
30h;延时计数器
led
equ
31h;led控制缓冲器
;主程序==========================
start:
mov
led,#0feh
;初始化数据
mov
ysjs,#0
;
;
mov
tmod,#10h
;定时器1工作于方式1,16位定时器
mov
tl1,#0b0h
;设置定时初值
mov
th1,#3ch
;定时时间=50ms
setb
et1
;使能定时器1中断
setb
tr1
;启动定时器1
setb
ea
;开总中断
mov
p1,led
;初始化流水灯
;
loop:
jmp
loop
;循环等待中断
;
;
t1int:
push
psw
;定时器1中断程序
push
acc
;保护现场
;
mov
th1,#3ch
;定时时间=50ms
mov
tl1,#0b0h
;
inc
ysjs
;
push
acc
;保护acc
mov
a,ysji
;
cjne
a,#2,qt1
;50ms*2=100ms
mov
p1,led
;
mov
a,led
;
rl
a
;累加器a的值循环左移1位
mov
led,a
;
mov
ysjs,#0
;
;
qt1:
pop
acc
;恢复现场
pop
psw
;
reti
;返回主程序
end
;汇编程序结束
第2个回答 2012-04-10
Loop:
mov a, #01h
mov r2, #8
Output:
mov P1, a
rl a
call Delay
djnz r2, Output
ljmp Loop
Delay:
mov r6, #0
mov r7, #0
DelayLoop:
djnz r6, DelayLoop
djnz r7, DelayLoop
ret
end本回答被网友采纳