📄 a4_5_2.asm
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;两个外中断同时存在
;平时8个LED闪烁
;int0中断使8个LED做一个灯的左移右移三次
;int1中断使8个LED做两个灯的左移右移三次
;程序难易等级--------稍难
;思考如何验证INT1和INT0的中断优先级?
;如何使INT0中断变为三个灯的左移右移三次?
;2004-7-11 10:55
;///////////////////////////////////////////
led_port equ p0 ;便于移植到不同的硬件上
org 0000h ;主程序起始地址
ajmp start
org 03h
ajmp ext0
org 13h
ajmp ext1
start: mov ie,#10000101b ;INT1\INT0中断使能
mov ip,#00000100b ;INT1中断优先
mov tcon,#00000000b ;INT0\INT1设置电平到触发
mov sp,#70h ;设置堆栈
mov a,#00h
mov led_port,a
mov a,#00h ;使led_port口闪烁
loop:mov led_port,a
call delay ;延时0.2S
cpl a ;使led全亮
jmp loop ;重复循环
ext0:push acc ;将A压入堆栈暂时保存
push psw ;将PSW压入堆栈暂时保存
setb rs0 ; 设置工作寄存器1
clr rs1
mov r3,#03 ;左右移3次
loop1:mov a,#0ffh ;左移初值
clr c ;C=1
mov r2,#08 ;设定左移8次
loop2:rlc a ;含C左移8次
mov led_port,a ;输出至led_port口
call delay ;调用0.2S延时
djnz r2,loop2 ;左移8次?
mov r2,#07 ;设定右移7次
loop3:rrc a ;含C起右移
mov led_port,a ;输出至led_port口
call delay ; 0.2S延时
djnz r2,loop3 ;左移7次?
djnz r3,loop1 ;左右移3次
pop psw ;
pop acc
reti
ext1:push acc
push psw
setb rs1
clr rs0
mov r3,#03
loop4:mov a,#0fch ;左移初值 mov r2,#06 ;设定左移6次
loop5:rl a ; 左移一位
mov led_port,a ;输出至led_port口
call delay ;0.2S延时
djnz r2,loop5 ;左移6次
mov r2,#06 ;设定左移6次
loop6:rr a ;右移一位
mov led_port,a ;输出至P口
call delay ;延时0.2S
djnz r2,loop6 ;左移6次
djnz r3,loop4 ;左右移3次
pop psw
pop acc
reti
delay:mov r5,#20 ;0.2s延时程序
d1: mov r6,#20
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -