📄 int01.asm
字号:
;P1口的8个灯循环亮,按P32后全部闪烁5次后继续循环亮, 中断程序的典型应用。
;***************************************************************************
;* sxj1974@163.com (51c51 test web) www.8951.com *
;* Create by :石学军 www.51c51.com 更多例程请登陆网站 *
;***************************************************************************
org 00h ;开始
jmp start
org 03h ;int0中断入口(p32)
jmp ext0 ;到中断子程序
start: mov ie,#10000001b ;中断使能
mov ip,#00000001b ;中断优先
mov tcon,#0000000b ;中断为电平触发
mov sp,#70h ;堆栈指针
loop:mov a,#0ffh ;左移动初值
clr c ; C=0
mov r2,#08 ;左移动8次
loop1:rlc a ;含c左移动一位
mov p1,a ;输出到P1口
call delay ;延时
djnz r2,loop1 ;左移动8次了吗?
mov r2,#07 ;设定右移7次
loop2:rrc a
mov p1,a
call delay
djnz r2,loop2 ;右移动7次了吗?
jmp loop
ext0: push acc ;把a压入堆栈
push psw ;保存现场
setb rs0 ;设定工作寄存器1
clr rs1
mov a,#00 ;使P1全亮一次
mov r2,#10 ;闪烁5次(亮灭共10次,小心了)
loop3:mov p1,a ;输出到P1
call delay
cpl a
djnz r2,loop3 ;10次到了么?没有继续否则完成
pop psw ;恢复现场
pop acc
reti
delay: mov r5,#20 ;延时200MS
d1:mov r6,#20
d2: mov r7,#250
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -