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 ;汇编程序结束
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
;汇编程序结束
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
端口的寄存器,赋予一个初值。每位对应一路灯。然后做移位命令。左移右移都可以,不就可以流水了。 写好花样,查表 ;亮灯控制程序; ;**; ORG ,
单片机不分是不是c51,只要是51单片机都支持汇编需要和c语言两种方式设计程序,实现流水灯功能。