求大神帮忙看一下这段程序的正确与否!我是菜鸟 实在看不懂
主程序
SP-CONTR:
MOV DPTR,#addr16 ;T0初始值地址指针
MOV R3,1BH ;频率阶梯计数器赋值
MOV R2,1AH ;阶梯总步数计数器赋值
CLR C
ORL C,73H ;判断加速时的转向标志
JC ROTE ;若转向标志为1,则跳转到反转地址
MOV R0,#20H ;正转模型首地址
AJMP PH
ROTE:
MOV R0,#27H ;反转模型首地址
PH:
MOV TMOD,01H ;定时器T0方式1定时
MOV TL0,#00H ;T0赋计时初值
MOV TH0,#00H
SETB TR0
SETB ET0
SETB EA
LOOP:
MOV A,R3
JNZ LOOP ;等待中断
CLR EA ;CPU关中断
SJMP HEAR ;结束
中断服务程序清单
ORG 0000H
INT-T0:
PUSH A ;保护现场
MOV A,@R0 ;模型控制字送累加器A
MOV P1,A ;输出控制模型
INC R0 ;模型控制字存储地址加1
MOV A,#00H
ORL A,@R0
JZ TPL ;若是结束标志,则跳转
RR:
DEC R2 ;步进计数器减1
MOV A,#00H
ORL A,R2
JZ THL ;若阶梯步长计数器为0,则跳转
ORL C,71H
JNC ROTEL ;若是减速,则跳转
MOV A,#00H ;加速
MOVC A,@A+DPTR
MOV TL0,A ;赋定时器T0初值的低8位
MOV A,#01H
MOVC A,@A+DPTR
MOV TH0,A ;赋定时器T0初值的高8位
AJMP QQ
ROTEL:
MOV A,#80H ;减速
MOVC A,@A+DPTR
MOV TL0,A ;赋定时器T0初值的低8位
MOV A,#81H
MOVC A,@A+DPTR
MOV TH0,A ;赋定时器T0初值的高8位
QQ:
POP A ;恢复现场
RETI
THL:
DJNZ R3,AT ;频率阶梯减1,若不为0跳转
AJMP QQ
AT: MOV R2,1AH ;阶梯步长赋值
INC DPTR
INC DPTR ;初始值指针更新
TRL: CLR C
MOV A,R0
SUBB A,06H
MOV R0,A ;恢复模型首地址
AJMP RR
看不懂,帮忙顶了