|
第一種:r 單片機(jī)可以,仿真不行;
#include <reg52.h>
...
void Busy()
{
···
}
第二種:源代碼中的:?jiǎn)纹瑱C(jī)可以仿真不行。
#include <AT89X52.h>
...
void LCD1602_busy(void)
{
···
}
以上兩種不能仿真是因?yàn)樵隍?qū)動(dòng)忙檢測(cè)里在對(duì)P0口賦值后馬上忙檢測(cè),此時(shí)檢測(cè)的還是對(duì)P0賦值的1,所以一直為忙,只有在while忙檢測(cè)之前加一段延時(shí)就行。
例如這樣。
void Busy()
{
P0= 0xFF;//必要的否則會(huì)干擾讀寫(xiě)信號(hào)
delay_nms(5);
RW=1;
RS=0;
EN=1;
while(P0 & 0x80);
EN=0;
}
為了驗(yàn)證這一猜想,我將P0賦值為0F,果然此時(shí)仿真有顯示了。然而實(shí)際單片機(jī)則顯示錯(cuò)誤。
這說(shuō)明硬件與軟件在數(shù)據(jù)讀取速度上的不同,影響了實(shí)現(xiàn)。 |
|