功能:按键亮灯报警:按不同键会亮不同的灯,报不同的警。具体:不按键时会亮两盏灯。按下键SW17会亮四盏灯,蜂鸣器叫一声;按下键SW16会亮8盏灯,蜂鸣器一直响。
ORG 0000H ;程序地址0000H
AJMP ORG AJMP ORG AJMP ORG MAIN: MOV MOV MOV MAIN;跳转到MAIN程序
000BH ;T0中断入口地址
IT0P;跳转到IT0P程序,时钟T0溢出中断子程序
001BH;T1中断入口地址
IT1P;跳转到IT1P程序,时钟T1溢出中断子程序
0100H;主程序地址
MOV SP,#60H;设置堆栈指针
A,#0E7H;点亮中间两盏灯
P0,A
TMOD,#22H;开启TR0和TR1
MOV TL0,#00H;设置T0初值
MOV TH0,#00H
MOV TL1,#00H;设置T1初值
MOV TH1,#00H
SETB ET0;开启时钟T0溢出中断
SETB EA;允许中断
SETB TR0;开启T0定时
SETB ET1;开启T1溢出中断
HERE: SJMP HERE;原地循环,模拟一段主程序,等待中断
IT0P: MOV A,#0F0H;让P3.0到P3.3为低电平,P3.4和P3.7为高电平
MOV P3,A
JB P3.7,RETURN;P3.7由高电平变为低电平,才会往下走
MOV A,#0FH;让P3.0到P3.3为高电平,P3.4和P3.7为低电平
MOV P3,A
JB P3.0,RETURN;P3.0由高电平变为低电平,才会往下走。
MOV A,#0C3H;只有P3.7和P3.0 皆从高电平变为低电平,说明SW17键按下。
MOV P0,A;点亮中间四盏灯。
CLR P1.4;蜂鸣器响
D:MOV R7,#10 ;1μs ;延时1.31843s
D1:MOV R6,#0;μs
D2: MOV R5,#0;1μs
D3:DJNZ R5,D3;2μs*256=512μs
DJNZ R6,D2;256*(1+2*256+2)μs=131.84μs
DJNZ R7,D1;(1+13184+2)*10μs=1.31843s
CLR TR0;关掉T0
SETB P1.4;关掉蜂鸣器
SETB TR1;开启T1
RETI;中断返回
IT1P: MOV A,#0F0H;让P3.0到P3.3为低电平,P3.4和P3.7为高电平
MOV P3,A
JB P3.7,RETURN;P3.7由高电平变为低电平,才会往下走
MOV A,#0FH;让P3.0到P3.3为高电平,P3.4和P3.7为低电平
MOV P3,A
JB P3.1,RETURN;P3.1由高电平变为低电平,才会往下走。
CLR P1.4;蜂鸣器响
MOV A,#00H;只有P3.7和P3.0 皆从高电平变为低电平,说明SW17键按下
MOV P0,A;点亮8盏灯
CLR TR1;关掉T1
SETB TR0;开启T0
RETURN: RETI;中断返回
END;结束
P3.7 P3.6 P3.5 P3.4
P3.0 C P3.1 D P3.2 E P3.3 F 8 4 0
9 5 1
A 6 2
B 7 3