高手,帮我写一段单片机程序吧!

计算在5秒里收到的中断数(外部中断0,低电平触发),换算成每分钟多少数,将这个数值送到四位数码管显示,段选P0,位选P2。
急用,感激不尽啊!

12M晶振
SEC BIT 00H ;1秒到的标记
VALUE EQU 21H
COUNT EQU 22H ;软件计数器
CC EQU 23H ;中断数
COUNTER EQU 20 ;软件计数器的计数值,该值乘以定时器的定时值(50ms),即得到1s的定时值
DISPBUF EQU 5EH ;5E,5FH是显示缓冲区
TMRVAR EQU 15536 ;(65536-50000)*12/12 定时器初值
HIDDEN EQU 16

ORG 0000H
JMP START
ORG 0*8+3 ;INT0中断入口
JMP INT_0
ORG 1*8+3 ;TIMER0中断入口
JMP INT_T0
ORG 2*8+3
RETI
ORG 3*8+3
RETI
ORG 4*8+3
RETI
START:
MOV SP,#5FH ;设置堆栈指针初值
MOV VALUE,#0 ;秒计数器
MOV DISPBUF,#0
MOV DISPBUF+1,#0
MOV DISPBUF+2,#0
MOV DISPBUF+3,#0
CALL DISP
CALL INIT_T0
CLR SEC
CLR IT0 ;低电平触发
SETB EA ;开总中断
SETB EX0 ;开启外部中断0

LOOP:
JBC SEC,NEXT ;一秒到,清除一秒到的标志
CALL DISP ;调用显示程序
JMP LOOP ;一秒未到,继续循环
NEXT:
MOV A,VALUE ;获得秒的数值
CJNE A,#5,CTU
ANL CC,#00000000B
CTU:
MOV A,CC
MOV B,#12
MUL AB
MOV R1,A
MOV R2,B
MOV A,B
MOV B,#10
DIV AB
MOV R4,B ;R4存b的个数
JZ BSZ
MOV R3,A ;R3存b的十位
JMP NEXTr3
BSZ:
MOV R3,#HIDDEN
MOV A,R2
JNZ NEXTr3
MOV R4,#HIDDEN
NEXTr3:
MOV A,R1
MOV B,#10
DIV AB
JZ NEXT1
JMP NEXT2
NEXT1:
MOV A,#HIDDEN
NEXT2:
MOV DISPBUF,R3
MOV DISPBUF+1,R4
MOV DISPBUF+2,A
MOV DISPBUF+3,B
CALL DISP
JMP LOOP
;主程序到此结束
DISP:
PUSH ACC ;ACC入栈
PUSH PSW ;PSW入栈
ORL P2,#11111111B ;将P2口全部置1,关所有显示单元
MOV A,Counter ;取计数器的值
MOV DPTR,#BitTab ;将位码表的首地址送到DPTR
MOVC A,@A+DPTR ;取位码
ANL P2,A
MOV A,#DISPBUF ;缓冲区首地址
ADD A,Counter
MOV R0,A ;送到R0中暂存
MOV A,@R0 ;根据计数器的值取相应显示缓冲区的值
MOV DPTR,#DISPTAB ;字形码表的首地址
MOVC A,@A+DPTR ;取字形码
MOV P0,A ;送到P0显示
INC Counter
MOV A,Counter
CJNE A,#4,DISPEXIT ;判断计数是否到了4
MOV Counter,#0
DISPEXIT:
CALL DELAY
POP PSW
POP ACC
RETI
;以下为延时程序
DELAY:
PUSH PSW
SETB RS0
MOV R7,#50
D1: MOV R6,#50
D2: DJNZ R6,D2
DJNZ R7,D1
POP PSW
RET
DISPTAB: DB 0C0H,7EH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,0C6H,0A1H,86H,8EH,0FFH ;共阳数码管
BitTab: DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH

INIT_T0: ;初始化T0为10ms的定时器
MOV TMOD,#01H
MOV TH0,#HIGH(TMRVAR)
MOV TL0,#LOW(TMRVAR)
SETB ET0 ;开T0中断
SETB TR0 ;定时器0开始运行
RET ;返回
;定时器中断0
INT_T0:
PUSH ACC
PUSH PSW
MOV TH0,#HIGH(TMRVAR)
MOV TL0,#LOW(TMRVAR)
INC COUNT ;软件计数器加1
MOV A,COUNT
CJNE A,#COUNTER,INT_RET
MOV COUNT,#0 ;计到20,到了1s,软件计数器清0
SETB SEC ;将秒标志置为1
INC VALUE ;秒的值加1
MOV A,VALUE
CJNE A,#5,INT_RET ;到了5s清0
MOV VALUE,#0
INT_RET:
POP PSW
POP ACC
RETI
;外部中断0
INT_0:
PUSH ACC
PUSH PSW
INC CC
POP PSW
POP ACC
RETI
END
温馨提示:答案为网友推荐,仅供参考