找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4461|回復(fù): 11
收起左側(cè)

關(guān)于proteus仿真失敗——很簡(jiǎn)單,你肯定會(huì)

[復(fù)制鏈接]
ID:988502 發(fā)表于 2021-12-6 12:39 | 顯示全部樓層 |閱讀模式
學(xué)校里設(shè)計(jì)做了一個(gè)單詞記憶測(cè)試器
我是現(xiàn)在單片機(jī)上實(shí)現(xiàn)的,然后再做仿真
然后神奇的事來(lái)了,同一個(gè)hex單片機(jī)上可以實(shí)現(xiàn)的仿真里實(shí)現(xiàn)不了。
W@OZ1X`YW)O8U6QO7LCK3SI.png
@1DI$G@395$KR~P@KFAME]Q.png


更離譜的是我有一個(gè)室友用匯編寫(xiě)的編譯了hex可以仿真,弄了幾天真的很心累。
H)(RFV2XM]ZTTS%Z~BIS}}9.png
]2KWFPDCLSZF(Q1)1XV%YBG.png
各位說(shuō)說(shuō)可能的原因,我自己也嘗試了很多了,再看看大伙兒的想法。


回復(fù)

使用道具 舉報(bào)

ID:342822 發(fā)表于 2021-12-6 15:17 | 顯示全部樓層
看了兩個(gè)圖區(qū)別是不同的文件夾
回復(fù)

使用道具 舉報(bào)

ID:102963 發(fā)表于 2021-12-6 16:48 | 顯示全部樓層
可能都原因:你的1602驅(qū)動(dòng)程序有問(wèn)題
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2021-12-6 17:58 | 顯示全部樓層
你不貼代我只能亂猜
請(qǐng)把Readdata和WriteData函數(shù)中的CheckBusy注釋掉
回復(fù)

使用道具 舉報(bào)

ID:96682 發(fā)表于 2021-12-7 06:34 來(lái)自觸屏版 | 顯示全部樓層
應(yīng)該是放錯(cuò)程序了吧
回復(fù)

使用道具 舉報(bào)

ID:420836 發(fā)表于 2021-12-7 09:08 | 顯示全部樓層
有沒(méi)有可能是芯片配置不正確? 還是單片機(jī)的機(jī)器頻率設(shè)置不正確?
回復(fù)

使用道具 舉報(bào)

ID:988502 發(fā)表于 2021-12-7 12:46 | 顯示全部樓層
songxia8013 發(fā)表于 2021-12-6 16:48
可能都原因:你的1602驅(qū)動(dòng)程序有問(wèn)題

是的,我對(duì)著網(wǎng)上一個(gè)驅(qū)動(dòng)改了就行,正在詳細(xì)看
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-12-7 13:25 | 顯示全部樓層
逛這個(gè)論壇三年,我一直很慶幸,我到現(xiàn)在還不會(huì)用proteus仿真
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-12-7 13:44 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-12-7 13:25
逛這個(gè)論壇三年,我一直很慶幸,我到現(xiàn)在還不會(huì)用proteus仿真

我也不會(huì),同喜同喜。
回復(fù)

使用道具 舉報(bào)

ID:988502 發(fā)表于 2021-12-7 17:07 | 顯示全部樓層
有一下幾種驅(qū)動(dòng);
忙檢測(cè)的:

第一種:r  單片機(jī)可以仿真不行;
#include <reg52.h>
...
void Busy()
{
                P0= 0xFF;//必要的否則會(huì)干擾讀寫(xiě)信號(hào)
                RW=1;
                RS=0;
                EN=1;
                while(P0 & 0x80);
                EN=0;       
}
第二種:源代碼中的:?jiǎn)纹瑱C(jī)可以仿真不行。
#include <AT89X52.h>
...
void LCD1602_busy(void)
{
     P0_7=1;              //將P0.7置1,為讀狀態(tài)做準(zhǔn)備
     RS=0;                //RS=0、RW=1、E=1時(shí),忙信號(hào)輸出到DB7,由P0.7讀入
     RW=1;                //RS=0、RW=1、E=1時(shí),忙信號(hào)輸出到DB7,由P0.7讀入
     E=1;                 //RS=0、RW=1、E=1時(shí),忙信號(hào)輸出到DB7,由P0.7讀入
     while(P0_7==1);      //由P0.7讀入1,表示1602液晶忙,需要等待
     E=0;                 //讀完以后,恢復(fù)E的電平
}


第三種:也是唯一成功的,讀入忙信號(hào)后不將while循環(huán)放在忙檢測(cè)函數(shù)中,這似乎也是影響到仿真的因素,while循環(huán)是否在忙檢測(cè)函數(shù)內(nèi)部。
//BUSY   CHECK
bit test()
{
        bit busy;
        RS=0;
        RW=1;
        EN=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        busy=BF;
        EN=0;
        return busy;
}
我要頂不住了兄弟們
回復(fù)

使用道具 舉報(bào)

ID:989630 發(fā)表于 2021-12-8 15:35 | 顯示全部樓層
你把排阻連接到lcd1602上看看
回復(fù)

使用道具 舉報(bào)

ID:988502 發(fā)表于 2021-12-10 12:14 | 顯示全部樓層
ccyyer 發(fā)表于 2021-12-7 17:07
有一下幾種驅(qū)動(dòng);
忙檢測(cè)的:

第一種: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)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表