          ORG 0000H
          LJMP MAIN
          ORG 000BH                   ;定时器0中断入口地址
          LJMP T0_INTER
          ORG 0030H
MAIN:     MOV TMOD,#01H               ;定时器0工作在方式1
          MOV TH0,#3CH                ;定时器0赋初值
          MOV TL0,#0B0H
          MOV DPTR,#TAB               ;字型码表首地址送DPTR
          MOV R0,#00H                 ;R0放置60秒计数的值，R0是存储的时间值，每定时1S后，R0的值加1，并送往显示端口，当R0计数满60后要清零
          MOV R1,#00H                 ;R1放置定时器0溢出的次数,定时器T0工作方式1，一次定时0.05S后产生中断，秒表一次延时是1S，需要定时20次，R1用来计算是否产生1S延时
          SETB EA                     ;打开总开关
          SETB ET0                    ;打开分开关
          SETB TR0                    ;启动定时器0
DISPLAY:  MOV A,R0                    ;计数初值送累加器A
          MOV B,#10
          DIV AB                      ; A中放秒计数器的十位，B中放秒计数器的个位
          MOVC A,@A+DPTR              ;十位字型码送累加器A
          MOV P2,A
          SETB P3.0                   ;让十位数码管亮
          LCALL DELAY                 ;调用延时子程序
          CLR P3.0
          MOV A,B
          MOVC A,@A+DPTR              ;个位字型码送累加器A
          MOV P2,A
          SETB P3.1
          LCALL DELAY
          CLR P3.1
          LJMP DISPLAY
T0_INTER: MOV TH0,#3CH                 ;定时器重新赋初值A
          MOV TL0,#0B0H
          INC R1           ;定时器溢出一次，R1自加1一次
          CJNE R1,#20,LP   ;定时器溢出20次，定时时间一秒
          INC R0          ;定时1次，秒计数值自加1
          MOV R1,#0      ;定时器溢出20次，定时器溢出次数清零
          CJNE R0,#60,LP  ;定时器计数值有没有到60
          MOV R0,#0      ;定时器计数值达到60，R0清零
LP:       RETI
TAB:      DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H  ;字型码表
DELAY:    MOV R6,#20      ;延时子程序
LOOP1:    MOV R7,#200
          DJNZ R7,$
          DJNZ R6,LOOP1
          RET
          END
