;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;51单片机入门程序15
;工程名称:用外部中断0做一个报警电路
;(功能要求:报警信号为P1端口的灯亮灭起来共10秒钟)
;编写日期:2009.7.4
;编写者:蓝柳柳
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ORG 0000H
AJMP QQ ;跳转到主程序QQ去运行
ORG 0003H ;外部中断0入口地址
LJMP QQQ ;转到中断服务程序QQQ处去运行
ORG 30H
QQ:
MOV P1,#1111111B ; 熄灭掉PI端口的灯,等下运行中断服务程序时P1.0就亮
MOV P3,#1111111B ;让P3.2这引脚置为高电平,等下按下其所接的开关将有下降沿触发
SETB IT0 ;外部中断0条件
SETB EX0 ;外部中断0条件
SETB EA ;外部中断0条件
LOOP:MOV P2,#00000000B ;单片机一直让路灯亮着,假如路灯接在了P2端口
QQQ:MOV P1,#00000000B
ACALL YS ;延时,亮1秒钟
MOV P1,#1111111B
ACALL YS ;延时,灭1秒钟
MOV P1,#00000000B
ACALL YS ;延时,亮1秒钟
MOV P1,#1111111B
ACALL YS ;延时,灭1秒钟
MOV P1,#00000000B
ACALL YS ;延时,亮1秒钟
MOV P1,#1111111B
ACALL YS ;延时,灭1秒钟
MOV P1,#00000000B
ACALL YS ;延时,亮1秒钟
MOV P1,#1111111B
ACALL YS ;延时,灭1秒钟
MOV P1,#00000000B
ACALL YS ;延时,亮1秒钟
MOV P1,#1111111B
ACALL YS
RETI ;中断服务程序返回,返回到LOOP处等待下次中断
YS: ;延时子程序,如果是用12MHZ作为时钟电路的话,那么延时时间为1秒
MOV R1,#10
D: MOV R2,#200
T: MOV R3,#248
DJNZ R3,$
DJNZ R2,T
DJNZ R1,D
RET ;子程序返回指令,子程序的设计一般都是因为主程序要调用它,
;调用完是要返回到主程序继续运行下一个语句的
END
|