求汇编高手帮程序注释
答案:1 悬赏:60 手机版
解决时间 2021-02-27 08:08
- 提问者网友:最爱你的唇
- 2021-02-26 23:40
求汇编高手帮程序注释
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-02-27 00:37
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME ;定时器T0中断方式
ORG 0100H
MAIN:
MOV SP,#60H ;初始化堆栈指针
MOV TMOD,#01H ;设置定时器工作方式
MOV TL0,#0B0H
MOV TH0,#3CH ;设置定时时间
SETB TR0 ;开始定时器
SETB ET0 ;开启T0中断允许
MOV R2,#2
MOV DPTR,#TAD ;指针赋值
MOV 20H,DPH ;
MOV 21H,DPL ;保存TAD地址
MOV DPTR,#TAB ;
MOV SCON,#00H ;串口工作方式
MOV R1,DPH
MOV R5,DPL ;保存TAB地址
SETB EA ;开启总中断允许位
SCA: ;初始化
MOV R3,#00H
MOV R4,#00H
MOV R0,#4
SETB F0
SSA: ;给指针赋值
MOV DPH,R1
MOV DPL,R5
SAT: CLR P1.7 ;P1.7为低电平
MOV A,R4
MOVC A,@A+DPTR ;查表
CALL SEND ;调用发送子程序
CLR C
MOV A,DPL
ADD A,#32 ;指针低8位加32
MOV DPL,A
MOV A,DPH
ADDC A,#0 ;指针高8位加进位
MOV DPH,A
DJNZ R0,SAT ;执行4次
MOV R0,#4
CPL F0
JB F0,SHOW ;判断F0是否为1,为1跳转到show子程序
INC R4 ;R4加1
LJMP SSA ;跳转回SSA
SHOW: CLR P1.6 ;P1.6为低电平
SETB P1.7 ;P1.7为高电平
MOV P2,R3 ;R3送出给P2口
CALL DEL ;调用DEL子程序
SETB P1.6 ;设置P1.6为高电平
INC R3
INC R4 ;加1
CJNE R3,#10H,SSA ;判断R3是否等于16,不等则跳转到SSA
LJMP SCA
SEND: ;串口发送数据
MOV SBUF,A
JNB TI,$
CLR TI
RET
DEL: ;延时
MOV R6,#5
DEL1:
MOV R7,#80
DJNZ R7,$
DJNZ R6,DEL1
RET
TIME: CLR EA ;关闭中断
MOV 30H,A ;A送到30h
PUSH 30H ;30h压入堆栈
MOV TL0,#0B0H ;见下
MOV TH0,#3CH ;设置定时器时间
DJNZ R2,LOOP ;循环次数R2
MOV R2,#2
CLR C
MOV A,R5
ADD A,#2
MOV R5,A ;R5加2
MOV DPL,R5 ;给数据指针低8位
MOV A,R1
ADDC A,#0
MOV R1,A ;R1加进位
MOV DPH,R1 ;给数据指针高8位
CJNE A,20H,LOOP ;判断R1是否等于20H的数值,不等跳转到LOOP
MOV A,R5
CJNE A,21H,LOOP ;判断R5是否等于21H的数值,不等跳转到LOOP
MOV DPTR,#TAB
MOV R1,DPH
MOV R5,DPL
LOOP: POP 30H ;堆栈弹出30H
MOV A,30H ;30H数值送到A
SETB EA ;开启中断
RETI
TAB: ;DB表
TAD: ;DB表
LJMP MAIN
ORG 000BH
LJMP TIME ;定时器T0中断方式
ORG 0100H
MAIN:
MOV SP,#60H ;初始化堆栈指针
MOV TMOD,#01H ;设置定时器工作方式
MOV TL0,#0B0H
MOV TH0,#3CH ;设置定时时间
SETB TR0 ;开始定时器
SETB ET0 ;开启T0中断允许
MOV R2,#2
MOV DPTR,#TAD ;指针赋值
MOV 20H,DPH ;
MOV 21H,DPL ;保存TAD地址
MOV DPTR,#TAB ;
MOV SCON,#00H ;串口工作方式
MOV R1,DPH
MOV R5,DPL ;保存TAB地址
SETB EA ;开启总中断允许位
SCA: ;初始化
MOV R3,#00H
MOV R4,#00H
MOV R0,#4
SETB F0
SSA: ;给指针赋值
MOV DPH,R1
MOV DPL,R5
SAT: CLR P1.7 ;P1.7为低电平
MOV A,R4
MOVC A,@A+DPTR ;查表
CALL SEND ;调用发送子程序
CLR C
MOV A,DPL
ADD A,#32 ;指针低8位加32
MOV DPL,A
MOV A,DPH
ADDC A,#0 ;指针高8位加进位
MOV DPH,A
DJNZ R0,SAT ;执行4次
MOV R0,#4
CPL F0
JB F0,SHOW ;判断F0是否为1,为1跳转到show子程序
INC R4 ;R4加1
LJMP SSA ;跳转回SSA
SHOW: CLR P1.6 ;P1.6为低电平
SETB P1.7 ;P1.7为高电平
MOV P2,R3 ;R3送出给P2口
CALL DEL ;调用DEL子程序
SETB P1.6 ;设置P1.6为高电平
INC R3
INC R4 ;加1
CJNE R3,#10H,SSA ;判断R3是否等于16,不等则跳转到SSA
LJMP SCA
SEND: ;串口发送数据
MOV SBUF,A
JNB TI,$
CLR TI
RET
DEL: ;延时
MOV R6,#5
DEL1:
MOV R7,#80
DJNZ R7,$
DJNZ R6,DEL1
RET
TIME: CLR EA ;关闭中断
MOV 30H,A ;A送到30h
PUSH 30H ;30h压入堆栈
MOV TL0,#0B0H ;见下
MOV TH0,#3CH ;设置定时器时间
DJNZ R2,LOOP ;循环次数R2
MOV R2,#2
CLR C
MOV A,R5
ADD A,#2
MOV R5,A ;R5加2
MOV DPL,R5 ;给数据指针低8位
MOV A,R1
ADDC A,#0
MOV R1,A ;R1加进位
MOV DPH,R1 ;给数据指针高8位
CJNE A,20H,LOOP ;判断R1是否等于20H的数值,不等跳转到LOOP
MOV A,R5
CJNE A,21H,LOOP ;判断R5是否等于21H的数值,不等跳转到LOOP
MOV DPTR,#TAB
MOV R1,DPH
MOV R5,DPL
LOOP: POP 30H ;堆栈弹出30H
MOV A,30H ;30H数值送到A
SETB EA ;开启中断
RETI
TAB: ;DB表
TAD: ;DB表
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯