: 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
|