单片机汇编高手请进,帮我看看这个程序有什么问题!
程序目的是输出阶梯波,我在原程序上加了控制台阶数的按钮,目的是方便控制台阶数,但是编译始终有问题,来个大神帮我改改吧(芯片是89c51,0832为功放,最后要用于仿真)O...
程序目的是输出阶梯波,我在原程序上加了控制台阶数的按钮,目的是方便控制台阶数,但是编译始终有问题,来个大神帮我改改吧(芯片是89c51,0832为功放,最后要用于仿真)
ORG 0000H ;在0000H单元存放转移指令
LJMP START ;转移到主程序START
ORG 0100H ;主程序从0100H开始
START: MOV A, #00H ;累加器A清0
MOV DPTR, #7FFFH ;0832 的地址送DPTR,假定P2.7接
MOV R1,TJS
TJS:mov A,P2 ;读取端口
JNB ACC.0,K_UP ;按下K_UP键,转K_UP
K_UP:MOV A,SETCNT
INC A,TJS ;台阶数加1
CJNE A,#10,LP ;未到10,返回
MOV TJS,01H ;到10,变为1台阶数
SJMP LP
LP: MOVX @DPTR, A ;送数据至 0832
LCALL DELAY10ms ;10ms延时
DJNZ R1, NEXT ;不到 10 台阶转移
SJMP START ;产生下一个周期
NEXT: ADD A, #10 ;台阶增幅
SJMP LP ;产生下一台阶
DELAY10ms: MOV R6,#20 ;10ms延时程序
DEL2: MOV R7,#248
DJNZ R7,$
DJNZ R6,DEL2
RET
END ;汇编结束 展开
ORG 0000H ;在0000H单元存放转移指令
LJMP START ;转移到主程序START
ORG 0100H ;主程序从0100H开始
START: MOV A, #00H ;累加器A清0
MOV DPTR, #7FFFH ;0832 的地址送DPTR,假定P2.7接
MOV R1,TJS
TJS:mov A,P2 ;读取端口
JNB ACC.0,K_UP ;按下K_UP键,转K_UP
K_UP:MOV A,SETCNT
INC A,TJS ;台阶数加1
CJNE A,#10,LP ;未到10,返回
MOV TJS,01H ;到10,变为1台阶数
SJMP LP
LP: MOVX @DPTR, A ;送数据至 0832
LCALL DELAY10ms ;10ms延时
DJNZ R1, NEXT ;不到 10 台阶转移
SJMP START ;产生下一个周期
NEXT: ADD A, #10 ;台阶增幅
SJMP LP ;产生下一台阶
DELAY10ms: MOV R6,#20 ;10ms延时程序
DEL2: MOV R7,#248
DJNZ R7,$
DJNZ R6,DEL2
RET
END ;汇编结束 展开
2个回答
展开全部
MOV R1,TJS
INC A,TJS
MOV TJS,01H
你看一下TJS,你定义的是个跳转标号,跳转标号本质,是ROM中的程序地址。
51单片机的汇编语言里,除了跳转指令外,其他任何指令都不允许操作跳转标号,也就是说,除了跳转指令,其他任何指令不允许操作ROM里的地址,只能是RAM里的地址。
所以,你以上三条指令根本就是错误的。
MOV A,SETCNT
你的SETCNT是什么?根本没有定义。
INC A,TJS
MOV TJS,01H
你看一下TJS,你定义的是个跳转标号,跳转标号本质,是ROM中的程序地址。
51单片机的汇编语言里,除了跳转指令外,其他任何指令都不允许操作跳转标号,也就是说,除了跳转指令,其他任何指令不允许操作ROM里的地址,只能是RAM里的地址。
所以,你以上三条指令根本就是错误的。
MOV A,SETCNT
你的SETCNT是什么?根本没有定义。
追问
那我该怎么改啊,我也是刚刚学这个,有很多地方不懂,时间还有点急,能不能详细说说啊,谢谢了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询