ORG 0000H;复位后程序如口地址 LJMP MAIN;跳至主程序 ORG 001BH;T1中断入口地址设置 LJMP INT1_T1;跳至T1中断服务子程序 MAIN: MOV SP,#60H MOV TMOD,#10H;确定T1为定时、八位定时器、外部引脚控制定时 MOV TH1,#00H;赋初值 MOV TL1,#4CH MOV P3,#0FFH MOV R1,#20 MOV P0,#0FFH MOV DPTR,#TAB;确定表首地址 MOV R0,#0 MOV R2,#00H MOV P1,#00H SETB ET1 ;中断初始化 SETB EA LOOP: LCALL ANJIAN LCALL XIANSHI SJMP LOOP ANJIAN: JB P3.3,L4;判断按键是否按下 LCALL DEL20MS;去抖动 JB P3.3,L4 MAIN1:CPL P1.0;蜂鸣器响 LCALL DEL20MS SETB P1.1 ;灯亮 INC R0 CJNE R0,#1,L1;为1启动 SETB TR1 SJMP L3 L1: CJNE R0,#2,L2;为2暂停 CLR TR1 CLR P1.1 ;灯灭 SJMP L3 L2: CLR TR1 MOV R0,#00H MOV R2,#00H L3: JNB P3.3,L3 L4: RET XIANSHI:LCALL SEP MOV A,30H MOVC A,@A+DPTR;查表 CLR P2.1 | MOV P0,A ;显示 LCALL DEL20MS SETB P2.1 MOV A,40H MOVC A,@A+DPTR; CLR P2.0 MOV P0,A ;显示 LCALL DEL20MS SETB P2.0 RET SEP: MOV A,R2 MOV B,#10 DIV AB MOV 30H,B;个位 MOV 40H,A;十位 RET INT1_T1: ;T1中断服务子程序 PUSH ACC;保护现场 PUSH PSW CLR TR1;关中断 MOV TH1,#00H;延时50ms常数重置 MOV TL1,#4CH SETB TR1;开中断 DJNZ R1,WAIT;判断是否到1S MOV R1,#20;延时1s的常数 INC R2 ;显示值递加 CJNE R2,#60,WAIT ;判断是否到60s MOV R2,#0;秒数清零 WAIT: POP PSW;恢复现场 POP ACC RETI ;中断返回
DEL20MS:MOV R3,#40 DE1:MOV R4,#250 DE2:DJNZ R4,DE2 DJNZ R3,DE1 ;延时20ms RET TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0-9 END |