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 |