📄 a4_5_1.asm
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;主程序将led端口的8个LED作左移右移,中断时使8个LED闪烁5次
;程序难易等级--------稍难
;///////////////////////////////////////////
led_port equ p0 ;便于移植到不同的硬件上
org 0000h ;起始地址
jmp main ;跳到主程序main
org 0003h ;int0中断子程序起始地址
jmp ext0 ;中断子程序
org 0030h
main:
mov ie,#81h ;int0中断使能
mov ip,#01h ;int0中断优先
mov tcon,#00h ;int0为电平触发
mov sp,#70h ;设定堆栈指针
loop:
mov a,#0ffh ;左移初值
clr c
mov r2,#08h ;设定左移八次
loop1:
rlc a ;含C左移一位
mov led_port,a ;输出至led端口
call delay ;延时0.2秒
djnz r2,loop1 ;左移八次?
mov r2,#07h ;设定右移七次
loop2:
rrc a ;含C右移一位
mov led_port,a ;输出至led端口
call delay ;延时0.2秒
djnz r2,loop2 ;右移七次?
jmp loop ;重复
ext0:
push acc ;将累加器的值压入堆栈保存
push psw ;将PSW的值压入堆栈保存
setb rs0 ;设定工作寄存器组1
clr rs1 ;
mov a,#00h ;为使LED端口全亮
mov r2,#10 ;闪烁五次(亮灭十次)
loop3:
mov led_port,a ;将A输出 call delay ;延时0.2秒
cpl a ;将A的值反相
djnz r2,loop3 ;闪烁五次(亮灭十次)?
pop psw ;从堆栈取回PSW的值
pop acc ;从堆栈取回ACC的值
reti ;返回主程序
delay:
mov r5,#20 ;0.2秒
d1:
mov r6,#20 ;10毫秒
d2:
mov r7,#248 ;0.5毫秒
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -