: ORG 0000H ;程序入口 LJMP MAIN ;轉主程序 ORG 000BH ;T0中斷入口 LJMP ITOP ;轉T0中斷處理程序ITOP ORG 0013H ;外部中斷1入口 LJMP IT1p ;轉外部中斷1處理程序IT1P ORG 0100H ;主程序入口 MAIN:MOV DPTR,#TABLE MOV P0,#09H MOV A,#00H MOV TL0,#0B0H ;T0初始化程序,裝入計數初值的低8位 MOV TMOD,#61H ;設置T0為方式1定時 MOV TL0,#0FFH ;T0初始化程序,裝入計數初值的低8位 MOV TH0,#0FFH ;裝入計數初值的高8位 SETB ET0 ;允許T0中斷 SETB EA ;總中斷允許 SETB TR0 ;啟動T0計數 SETB PX1 ;外部中斷1設置為高優先級 SETB PT1 ;定時器/計數器TI為高優先級 SETB EX1 ;允許外部中斷1中斷 SETB ET1 ;允許定時器/計數器T1中斷 SETB TR1 ;啟動T1計數 HERE:SJMP HERE ;原地循環,等待中斷,模擬一段主程序 S1:MOV A,#00H MOVC A,@A+DPTR CJNE A,#01H,S2 LJMP MAIN S2:CPL A MOV P1,A LCALL DELAY INC DPTR LJMP S1 DELAY:MOV R5,#5 D1:MOV R6,#100 D2:MOV R7,#00 D3:DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RETI IT1P:MOV ACC,P0 PUSH ACC MOV P0,#09H ACALL DLY10S POP ACC MOV P0,ACC RETI ITOP:MOV TL0,#0B0H MOV TH0,#3CH INC A CJNE A,#5,L1 MOV P0,#11H RETI L1: CJNE A,#60,L2 MOV P0,#21H RETI L2: CJNE A,#70,L3 MOV P0,#01H RETI L3: CJNE A,#80,L4 MOV P0,#21H RETI L4: CJNE A,#90,L5 MOV P0,#0AH RETI L5: CJNE A,#140,L6 MOV P0,#0CH RETI L6: CJNE A,#150,L7 MOV P0,#08H RETI L7: CJNE A,#160,L8 MOV P0,#0CH RETI L8: CJNE A,#170,BUTTON CLR A RETI BUTTON:RETI DLY10S:MOV R5,#200 DLY10S1:MOV R6,#125 DLY10S2:MOV R7,#100 DLY10S3:DJNZ R7,DLY10S3 DJNZ R6,DLY10S2 DJNZ R5,DLY10S1 RET TABLE:DB 90H,80H,0F8H,82H,92H,99H,0B0H,0A4H,0F9H,0C0H DB 01H END
|