判断液晶是否处于忙状态,即判断BF的值。根据资料:
“当RS=0,R/W=1是执行读取的操作,这时候,LCM的忙碌标志BF将放置在数据总线上的D7位,而LCM的地址计数器内容也将放置在数据总线上的D6~D0位,分别为A6 A5 A4 A3 A2 A1 A0。整个执行过程需要40us。”
下面是我的代码:
CHECK_BF: PUSH ACC
BUSY: CLR RS
SETB RW
SETB EN
NOP ;注意延时
MOV A,LCD
CLR EN
JB ACC.7,BUSY
CALL DELAY
POP ACC RET ;============================================================
问题是:为什么资料上说需要40us才能完成此过程,而我仅仅一个NOP,NOP不是一个机器周期吗,我用的是51,12MHZ,那就是1us了。这样就可以正常显示了。
我把这个NOP去掉就不可以正常显示。
共6条
1/1 1 跳转至页
一个nop为1个指令周期,主要用于精确定时或者延时
nop指令的作用:
1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)
2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;-->具体应该说是占用了3个时钟脉冲!
3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复;
4)清除由上一个算术逻辑指令设置的flag位;
5)破解:)对于原程序中验证部分使用nop来填充,使验证失效;
nop指令的作用:
1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)
2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;-->具体应该说是占用了3个时钟脉冲!
3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复;
4)清除由上一个算术逻辑指令设置的flag位;
5)破解:)对于原程序中验证部分使用nop来填充,使验证失效;
4楼
当RS=0,R/W=1是执行读取的操作 , 你读取正常吗?
液晶显示是执行写操作,你读取正常与否和你的显示正常不正常没关系。
液晶显示是执行写操作,你读取正常与否和你的显示正常不正常没关系。
5楼
你的液晶显示正常说明你的液晶不忙,如果你频繁的给液晶刷屏,液晶就会处于忙状态,
而你又仅仅延时了1us,不能保证立刻判断出液晶忙,刷屏显示就可能失效
按资料说的改成40us,不要只看表面现象。暂时显示正常不代表什么条件都不出错
共6条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |