跪求大神帮忙解释一下这一段单片机汇编程序的每一句详细解释!!!万分感谢!!!在线等~

ORG 0000H
LJMP MAIN
ORG 0003H
LJMP SUM
ORG 1000H
GW EQU 20H
SW EQU 21H
BW EQU 22H
MAIN:CLR P1.0
MOV BW,#00H
MOV GW,#FFH
MOV SW,#00H
MOV DPTR,#8002H
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#8004H
MOV A,#3FH
MOVX @DPTR,A
SETB IT0
SETB EX0
SETB EA
DIR:
MOV R0,#20H
MOV R1,#01H
MOV A,R1
LDO:
MOV DPTR,#8002H
MOVX @DPTR,A
MOV A,@RO
MOV DPTR,#TABLE
DIRO:MOVC A,@A+DPTR
MOV DPTR,#8004H
MOVX @DPTR,A
ACALL DL
INC R0
MOV A,R1
JB ACC.2,DIR
RL A
MOV R1,A
AJMP LD0
SUM:JB P1.1,JIAN
INC GW
MOV A,GW
CJNE A,#10,QUIT
MOV GW,#00H
INC SW
MOV A,#10,QUIT
MOV SW,#00H
INC BW
MOV A,BW
CJNE A,#2,QUIT
SETB P1.0
AJMP QUIT
JIAN: DEC GW
MOV A,GW
CJNE A,#0FFH,QUIT
MOV GW,#09
DEC SW
MOV A,BW
CJNE A,#1,QUIT
CLR P1.0
QUIT:RET1
DL:MOV R6,#10
DL0:MOV R7,#100
DL1:DJNE R7,#DL1
DJNE R6,DL0
RET
TABLE:
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END

ORG 0000H 主函数地址
LJMP MAIN 进入主函数
ORG 0003H 外部中断0入口地址
LJMP SUM 进入中断
ORG 1000H
GW EQU 20H 用GW 表示20H
SW EQU 21H 如上
BW EQU 22H 如上
MAIN:CLR P1.0 进入主函数。将P1.0位清0
MOV GW,#FFH 给GW 即20H赋初值,,这是立即寻址,你可以百度一下寻址方式
MOV SW,#00H
MOV DPTR,#8002H
MOV A,#0FFH
MOVX @DPTR,A 将A的值送往DPTR所指向的地址, DPTR是指针
MOV DPTR,#8004H
MOV A,#3FH
MOVX @DPTR,A
SETB IT0 下面三句是开中断
SETB EX0
SETB EA
LDO:
MOV DPTR,#8002H
MOVX @DPTR,A
MOV A,@RO 将R0所指向的地址的内容送给A
MOV DPTR,#TABLE 这是查表, 你也可以去翻翻资料,具体说不清
DIRO:MOVC A,@A+DPTR 查表指令。。。就是把下面TABLE里面的值送给A
MOV DPTR,#8004H
MOVX @DPTR,A 把A的值送往外部RAM,即DPTR指针所指向的地址
ACALL DL 调用指令 ,调用DL
INC R0 指针加一
MOV A,R1 将R1的值送往累加器A
JB ACC.2,DIR 判断累加器A的第2位为1吗?为1则转移到DIR函数,不为1执行下面的语句
RL A 左移A
MOV R1,A
AJMP LD0 跳转到LD0,与调用指令有区别
SUM:JB P1.1,JIAN 中断函数。 同上
INC GW
MOV A,GW
CJNE A,#10,QUIT 比较A里面的值与10相等吗?不相等则跳转到QUIT
MOV GW,#00H
INC SW
MOV A,#10,QUIT
MOV SW,#00H
INC BW
MOV A,BW
CJNE A,#2,QUIT
SETB P1.0 将P1.0置1
AJMP QUIT
JIAN: DEC GW GW减一
MOV A,GW
CJNE A,#0FFH,QUIT
MOV GW,#09
DEC SW
MOV A,BW
CJNE A,#1,QUIT
CLR P1.0
QUIT:RET1 reti 是中断返回的结束语。。调用的函数是用RET返回
DL:MOV R6,#10
DL0:MOV R7,#100
DL1:DJNE R7,#DL1
DJNE R6,DL0 这里是个延时函数
RET
TABLE: 表哥数据,用于查表
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
温馨提示:答案为网友推荐,仅供参考
相似回答