<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 硬件仿真與燒寫(xiě)程序結果不一樣原因總結

硬件仿真與燒寫(xiě)程序結果不一樣原因總結

作者: 時(shí)間:2016-09-16 來(lái)源:網(wǎng)絡(luò ) 收藏

  一,配置問(wèn)題:實(shí)際燒片時(shí)單片機的配置字與仿真的時(shí)候是不是一樣?燒寫(xiě)時(shí)是否配置正確?

本文引用地址:http://dyxdggzs.com/article/201609/297021.htm

  二,資源問(wèn)題:?jiǎn)纹瑱C的ROM、RAM大小與仿真器的ROM、RAM大小是不一樣的!

  三,驅動(dòng)能力問(wèn)題:通常仿真器的驅動(dòng)能力比單片機要強;可以分兩步檢查,一是分別用仿真器與單片機時(shí)對應IO口波形進(jìn)行對比,二是當仿真器與外設連接與不連接時(shí)波形的對比;

  要進(jìn)行基本要素分析:?jiǎn)纹瑱C供電正常?起振沒(méi)有?復位電路正常?芯片損壞?

  【單片機上電不運行情況的分析】

  1.單片機是沒(méi)有運行,還是運行不正確?

  2.如果是沒(méi)有運行,檢測單片機的基本參數是否已經(jīng)滿(mǎn)足<工作電壓要在芯片的引腳處測量><復位引腳的復位曲線(xiàn)如何><晶振是否已經(jīng)起振><芯片損壞,或者部分功能損壞>。

  3.如果是運行不正確,檢測<用了看門(mén)狗,沒(méi)有處理好,芯片上電后處于不停的復位狀態(tài),看起來(lái)就象沒(méi)有沒(méi)有工作起來(lái)><是否進(jìn)入了ISP狀態(tài)><對單片機寫(xiě)入對所有的IO口以1秒取反一次的程序進(jìn)行測試>

  【單片機調試辦法】

  用LED進(jìn)行狀態(tài)指示,用串口進(jìn)行數據指示,比用其它外設指示更可靠;

  加入斷點(diǎn),燒寫(xiě)時(shí)是在不同的語(yǔ)句后面加入WHILE(1);

  分模塊調試,把每個(gè)小功能先調試通過(guò),再進(jìn)行組合。

   C本身就是編譯與仿真一體的,當不要外部數據時(shí)很方便,當要外部輸入時(shí)(比如用定時(shí)器作計數器用)它提供幾個(gè)調試輸入用的窗口可用它們來(lái)摸擬輸入,同時(shí) C本身提供一種調試函數用來(lái)配置摸擬外部輸入的功能,這我在學(xué)習時(shí)看的一本書(shū)上講過(guò)如用定時(shí)器作外部事件計數,調試函數由自己根據需要按特定的格式來(lái)編輯再按KEIL C的要求調入即可。學(xué)習時(shí)可用這種方法,做產(chǎn)品時(shí)最好是用仿真器調試。下面我給出我以前試過(guò)的用定時(shí)器作外部事件計數時(shí)摸擬外部輸入的調試函數,并寫(xiě)出 C調用的步驟如下:

  1、編寫(xiě)如下信號函數:

  single void t0_singal(void)

  {

  while(1)

  {

  PORT3|=0x10;//pull INT0(P3.4) high again

  PORT3&=~0x10;//pull INT0(P3.4) low and generate interrupt

  PORT3|=0x10;//pull INT0(P3.4) high again

  twatch(CLOCK);//wait for 1 second

  }

  }

  2、在DEBUG狀態(tài)下單擊DEBUG菜單在下拉菜單中單擊“Function Editor(Open Ini File)... "選項, 彈出新屏幕后,將“打開(kāi)”窗口關(guān)閉,這時(shí)屏上有Function Edito窗;

  3、在Function Editor窗中輸入上面的函數;

  4、保存(注意:擴展名為.ini),編譯該程序,成功后關(guān)閉Function Editor窗口;

  5、執行用戶(hù)程序(必須連續執行);

  6、在屏幕左下腳的命令窗口中,鍵入t0_singl()后(必須回車(chē))媽可向P3.4源源不斷地提供脈沖信號。

  我們使用Keil C調試某系統時(shí)積累的一些經(jīng)驗

  1、由于Keil C對中文支持不太好,因而會(huì )出現顯示的光標與光標實(shí)際所在不一致的現象,這會(huì )對修改中文注釋造成影響。在Windows2000下面,我們可以把字體設置為Courier,這樣就可以顯示正常。

  2、當使用有片外內存的MCU(如W77E58,它有1K片外內存)的時(shí)候,肯定要設置標志位,并且編譯方式要選擇大模式,否則會(huì )出錯。

  3、當使用Keil C跟蹤程序運行狀態(tài)的時(shí)候,要把引起Warning的語(yǔ)句屏蔽,否則有可能跟蹤語(yǔ)句的時(shí)候會(huì )出錯。

  4、在調用數組的時(shí)候,Keil C是首先把數組Load進(jìn)內存。如果要在C中使用長(cháng)數組的時(shí)候,我們可以使用code關(guān)鍵字,這樣就實(shí)現了匯編的DB的功能,Keil C是不會(huì )把標志code的數組Load入內存的,它會(huì )直接讀取Rom。

  5、當編程涉及到有關(guān)通信,時(shí)序是很重要的。拉高管腳的執行速度遠遠比檢查管腳電平的要快。

  6、在等待管腳電平變化的時(shí)候,我們需要設置好超時(shí)處理,否則程序就會(huì )因為一個(gè)沒(méi)有預計的錯誤而死鎖。

  7、能用C語(yǔ)言實(shí)現的地方,盡量不要用匯編,尤其在算法的實(shí)現,用匯編是晦澀難懂。

  8、程序的幾個(gè)參數數組所占篇幅很大,其中液晶背景數組最長(cháng),有四千個(gè)Byte,因而把那些初始化數組都放在另外一個(gè)C文件,在主文件使用使用關(guān)鍵字extern定義,這樣就不會(huì )對主文件的編寫(xiě)造成干擾。

  9、所有函數之間的相關(guān)性越低越有利于以后功能的擴展。

  10、6.20版在編譯帶code關(guān)鍵字的數組時(shí),編譯通過(guò)但是單片機運行結果是錯誤的,改用6.14版后正常。



關(guān)鍵詞: 硬件仿真 Keil

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>