这是一个用汇编语言编写的秒表程序,求大神给注解一下每条语句的作用。和程序的设计思路。

STRT EQU P3.0
STP EQU P3.1
CLRR EQU P3.2
ORG 00H
SJMP MAIN
ORG 0BH
AJMP T0INT0
ORG 30H
MAIN: MOV SP,#60H
MOV R4,#2
MOV TMOD,#01H
MOV TH0,#3CH;12M晶振时定时初值取#3CB7H
MOV TL0,#0B0H
SETB ET0
SETB EA
k1: LCALL DISP
JB STRT,K2
LCALL DISP
JNB STRT,$-3
AJMP START
k2: LCALL DISP
JB STP,K3
LCALL DISP
JNB STP,STOP
K3: LCALL DISP
JB CLRR,K1
LCALL DISP
JNB CLRR,CLEAR
AJMP K1
START: SETB TR0
AJMP K1
STOP: CLR TR0
AJMP K2
CLEAR: CLR TR0
MOV A,#0
MOV 20H,A
MOV 21H,A
MOV 22H,A
MOV 23H,A
MOV 24H,A
MOV 25H,A
MOV 26H,A
AJMP K1
DISP: MOV A,24H
MOV B,#10
DIV AB
MOV 20H,B ;余数(零点秒位数)
MOV 21H,A ;商(秒个位数)
MOV A,25H
MOV B,#10
DIV AB
MOV 30H,B
MOV 22H,B ;余数(秒十位数)
MOV A,20H ;零点秒位
ACALL SEG7
MOV P0,A
SETB P2.7
ACALL DLY
CLR P2.7
MOV A,21H ;秒个位
ACALL SEG7
MOV P0,A
CLR P0.7
SETB P2.6
ACALL DLY
CLR P2.6
MOV A,22H ;秒十位
ACALL SEG7
MOV P0,A
SETB P2.5
ACALL DLY
CLR P2.5
MOV A,23H ;分个位
ACALL SEG7
MOV P0,A
CLR P0.7
SETB P2.4
ACALL DLY
CLR P2.4
RET
T0INT0: MOV TH0,#3CH ;定时中断子程序。重装定时常数
MOV TL0,#0B0H
DJNZ R4,T0INTR ;50msX20=1S,未满20次,跳出中断子程序
MOV R4,#2
INC 24H
MOV A,24H
CJNE A,#100,T0INTR
MOV 24H,#0
INC 25H
MOV A,25H
CJNE A,#6,T0INTR
MOV 25H,#0
INC 23H
T0INTR: RETI
DLY: MOV R7,#10
D1: MOV R6,#50
DJNZ R6,$
DJNZ R7,D1
RET
SEG7: INC A
MOVC A,@A+PC
RET
DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END

从程序中看出:

    共4位数码管,显示分/秒;

    用50MS中断方式计次;

    每20次修改秒和分单元中的数据(秒+1,有进位则分+1)

    根据秒和分的数值,用查表法送对应的数码管显示秒和分的内容.

最后,主程序中的第2条应该为: MOV  R4,#20

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-11
程序是整个连贯起来看的,每条注释没意义。
哪里看不懂,说一下。如果全看不懂,那只好去看书了。