|
仔细看了你的程序,其实你的程序是在反复循环写A,就没有写BCDE,也就是缺少了一个循环,我给你加的那个LOOP标号就是让其循环把ABCDE都写出来.还有这个 JZ SRET AJMP START SRET: RET
执行这句话"SRET: RET",是往哪里返回了,漫无目的.
还有一个问题,就是在检测写完5个数据的时候,有一个判断就可以了,不用多判断那一次,多余了.我已经去了这一部分,
; INC R1 ; MOV A,R1 ; XRL A,#85H ; JZ SRET
下面是我修改后的程序,你参考一下.
ORG 0000H RS BIT P2.5 RW BIT P2.6 E BIT P2.7 MOV P0,#00000001B ;清屏并光标归位 LCALL WI ;写指令 MOV P0,#00111000B ;功能设置 LCALL WI MOV P0,#00000110B ;输入模式设置:文字不动,光标自动右移 LCALL WI MOV P0,#00001100B ;显示开关控制 LCALL WI
START:
MOV R1,#80H MOV P0,R1 LCALL WI ;写指令 ;MOV P0,'A' ;??('A')?=(#41H) MOV R2,#41H LOOP: MOV P0,R2 SETB RS CLR RW CLR E LCALL BF SETB E ; INC R1 ; MOV A,R1 ; XRL A,#85H ; JZ SRET INC R2 MOV A,R2 XRL A,#46H JZ SRET jmp LOOP SRET: AJMP START ;SRET: RET
WI: ;写指令 CLR RS CLR RW CLR E LCALL BF SETB E RET
BF: ;检测是否忙 MOV P0,#0FFH CLR RS SETB RW CLR E ;??删去行吗 NOP SETB E JB P0.7,BF RET
END
另外,我还在PROTEUS里做了个仿真,上传上来让你看一下效果吧
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|