请教汇编高手帮我翻译一下这个程序的意思

BPOT DATA 20H
ML DATA 21H
MH DATA 22H
FL DATA 23H
FH DATA 24H
HL DATA 25H
HH DATA 26H
MODE DATA 27H
DM DATA 28H
;-----------------------------
ORG 0H
SJMP MAIN
ORG 23H
LJMP T0SVR
;-----------------------------
MAIN: NOP
MOV SP,#50H
MOV TH0,#0D9H
MOV TL0,#01AH
MOV TMOD,#01H
MOV IE,#82H
SETB TR0
CLR A
MOV R0,#8
MAIN1: MOV R1,#BPOT
MOV @R1,A
INC R1
DJNZ R0,MAIN1
SJMP $
;-----------------------------
T0SVR: CLR TR0
PUSH ACC
MOV TH0,#0D9H
MOV A,#034H
CLR C
SUBB A,TL0
MOV TL0,A
SETB TR0
INC DM
MOV A,DM
CJNE A,#100,T0SVR2
CLR A
MOV DM,A
INC ML
MOV A,ML
CJNE A,#10,T0SVR2
CLR A
MOV ML,A
INC MH
MOV A,MH
CJNE A,#6,T0SVR2
CLR A
MOV MH,A
INC FL
MOV A,FL
CJNE A,#10,T0SVR2
CLR A
MOV FL,A
INC FH
CJNE A,#6,T0SVR2
CLR A
MOV FH,A
T0SVR2: MOV P3,#0C3H
MOV A,#ML
ADD A,BPOT
MOV R0,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
CPL A
MOV P1,A
MOV A,BPOT
CJNE A,#2,T0SVR3
MOV A,DM
SETB C
SUBB A,#50
CPL C
MOV P1.7,C
MOV A,BPOT
T0SVR3: MOV DPTR,#BITC
MOVC A,@A+DPTR
MOV P3,A
INC BPOT
MOV A,BPOT
CJNE A,#4,T0SVR1
CLR A
MOV BPOT,A
T0SVR1: POP ACC
RETI
;-----------------------------
BITC: DB 0E3H,0D3H,0CBH,0C7H
TABLE: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH
END

BPOT DATA 20H
ML DATA 21H
MH DATA 22H
FL DATA 23H
FH DATA 24H
HL DATA 25H
HH DATA 26H
MODE DATA 27H
DM DATA 28H ;设定了九个工作单元
;-----------------------------
ORG 0H ;指定程序入口
SJMP MAIN ;转主程序
ORG 23H ;中断入口
LJMP T0SVR ;转中断处理程序
;-----------------------------
MAIN: NOP ;空操作
MOV SP,#50H ;设堆栈底为50H单元
MOV TH0,#0D9H
MOV TL0,#01AH ;T0计数初值为D91AH
MOV TMOD,#01H ;T0工作方式1(16位计数)
MOV IE,#82H;开中断,允许T0溢出中断
SETB TR0 ;启动T0计数
CLR A
MOV R0,#8
MAIN1: MOV R1,#BPOT
MOV @R1,A
INC R1
DJNZ R0,MAIN1 ;将设定的九个工作单元清零
SJMP $ ;等待中断
;-----------------------------
T0SVR: CLR TR0 ;关闭T0计数
PUSH ACC ;保存ACC
MOV TH0,#0D9H ;重装T0计数初值高八位为D9H
MOV A,#034H
CLR C
SUBB A,TL0
MOV TL0,A ;重装T0计数初值低八位为34H带进位减原值之差
SETB TR0 ;启动T0 计数
INC DM ;DM 计数
MOV A,DM
CJNE A,#100,T0SVR2 ; DM 计数不够100次转T0SVR2
CLR A
MOV DM,A ; DM 计数清零
INC ML ;ML 计数
MOV A,ML
CJNE A,#10,T0SVR2 ;ML 计数不够10次转T0SVR2
CLR A
MOV ML,A ; ML 计数清零
INC MH ; MH 计数
MOV A,MH
CJNE A,#6,T0SVR2 ;MH 计数不够6次转T0SVR2
CLR A
MOV MH,A ; MH 计数清零
INC FL ; FL 计数
MOV A,FL
CJNE A,#10,T0SVR2 ;FL 计数不够6次转T0SVR2
CLR A
MOV FL,A ; FL 计数清零
INC FH ; FH 计数
CJNE A,#6,T0SVR2 ;FH 计数不够6次转T0SVR2
CLR A
MOV FH,A ; FH 计数清零
T0SVR2: MOV P3,#0C3H
MOV A,#ML
ADD A,BPOT
MOV R0,A
MOV A,@R0 ;形成读数表的偏移量
MOV DPTR,#TABLE ;数表头地址TABLE
MOVC A,@A+DPTR ;读数表TABLE中的数
CPL A
MOV P1,A ;读出的数取反后经P1输出
MOV A,BPOT
CJNE A,#2,T0SVR3 ;BPOT计数不够2次转T0SVR3
MOV A,DM
SETB C ;置1进位位C
SUBB A,#50 ;DM当前计数值带进位减50H入A
CPL C
MOV P1.7,C ;向P1.7输出0
MOV A,BPOT ;BPOT当前计数值做读数表的偏移量
T0SVR3: MOV DPTR,#BITC ;数表BITC表头地址
MOVC A,@A+DPTR ;读数表BITC中的数
MOV P3,A ;向P3输出该数
INC BPOT ;BPOT计数
MOV A,BPOT
CJNE A,#4,T0SVR1 ;BPOT计数不够4次转TOSVR1
CLR A
MOV BPOT,A ;清零BPOT计数
T0SVR1: POP ACC ;恢复A
RETI ;中断返回
;-----------------------------
BITC: DB 0E3H,0D3H,0CBH,0C7H
TABLE: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH
END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-23
这是个单片机中的数码管显示程序吧
第2个回答  2009-03-23
我看有6进制和10进制,有中断,有显示,是一个利用定时中断做的计时程序。
不过还发现有点小错误,开机20H-28H清零时,返回点不正确。
第3个回答  2009-03-23
这个是单片机程序。
第4个回答  2009-03-23
单片机程序,自己慢慢看书吧,一条指令一条指令的理解。
相似回答