| ORG 0000H  AJMP START  ORG 000BH ;定时器0的中断向量地址  AJMP TIME0 ;跳转到真正的定时器程序处  ORG 30H  START:  MOV P1,#0FFH ;关所 灯  MOV 30H,#00H ;软件计数器预清0  MOV TMOD,#00000001B ;定时/计数器0工作于方式1  MOV TH0,#3CH  MOV TL0,#0B0H ;即数15536  SETB EA ;开总中断允许  SETB ET0 ;开定时/计数器0允许  SETB TR0 ;定时/计数器0开始运行  LOOP: AJMP LOOP ;真正工作时,这里可写任意程序  TIME0: ;定时器0的中断处理程序  PUSH ACC  PUSH PSW ;将PSW和ACC推入堆栈保护  INC 30H  INC 31H ;两个计数器都加1  MOV A,30H  CJNE A,#20,T_NEXT ;30H单元中的值到了20了吗?  T_L1: CPL P1.0 ;到了,取反P10  MOV 30H,#0 ;清软件计数器  T_NEXT:  MOV A,31H  CJNE A,#40,T_RET ;31h单元中的值到40了吗?  T_L2:  CPL P1.1  MOV 31H,#0 ;到了,取反P11,清计数器,返回  T_RET:  MOV TH0,#15H  MOV TL0,#9FH ;重置定时常数  POP PSW  POP ACC  RETI  END  |