標(biāo)題: 單片機程序調(diào)試之道 [打印本頁]

作者: xiaoniu    時間: 2014-12-28 00:44
標(biāo)題: 單片機程序調(diào)試之道
    單片機程序調(diào)試和PC程序調(diào)試有很多不同,主要是1.單片機程序和硬件有直接的聯(lián)系,而PC機程序一般只是純軟件的調(diào)試。2.單片機調(diào)試手段很多,可以軟件仿真、硬件仿真、硬件指示電路、測量儀器等等,大部分都跟外部設(shè)備有關(guān),需要一定的硬件設(shè)備投入,而PC機基本上是軟件界面的調(diào)試幾算法的調(diào)試,硬件投入基本沒有。3.單片機調(diào)試需要經(jīng)歷編程、編譯、燒片、調(diào)試這些階段,而PC調(diào)試只要編譯運行就可以。下面以這次的GPS顯示終端的調(diào)試為例介紹本人的一些經(jīng)驗:

    1、仿真器仿真:GPS接收終端硬件很簡單,只是51最小系統(tǒng),GPS模塊因為支持TTL電平,因而省去了rs232轉(zhuǎn)換電路,程序分兩塊,一塊是主程序,循環(huán)讀取顯示單元內(nèi)容并送液晶顯示,另一塊是串口中斷,中斷程序負(fù)責(zé)讀取串口數(shù)據(jù),處理后送相應(yīng)的顯示單元。程序編制完成后就是調(diào)試,初期調(diào)試發(fā)現(xiàn)液晶顯示器顯示不穩(wěn)定,部分顯示內(nèi)容與實際內(nèi)容不符,因為主程序流程不是很復(fù)雜,因此問題可能出在串口中斷程序中,經(jīng)過不斷的修改程序流程、程序參數(shù),情況沒有很大的改觀,這時仿真器到了,經(jīng)仿真器的單步調(diào)試發(fā)現(xiàn)了一個變量有問題,本應(yīng)該在讀取一個GPS字段后該清零的卻沒有清零,以至于后面的程序?qū)懭氲娘@示單元地址出現(xiàn)錯位,顯示器顯示出的也就成了亂碼。

    2、采用模擬手段:在顯示單元錯位這個問題解決后,經(jīng)過連續(xù)運行發(fā)現(xiàn)程序工作10幾分鐘后顯示器顯示就不正常,其中有個細節(jié),就是上電復(fù)位后能持續(xù)工作達1個小時,而在顯示不正常后用按鈕復(fù)位后只能正常工作10來分鐘,初步判斷可能是顯示器硬件有問題,但是顯示器顯示驅(qū)動采用的是比較成熟的程序,出問題的可能性不是很大,那么還有就是串口中斷程序還有BUG,該如何判斷呢?首先去掉GPS信號源,采用PC串口調(diào)試軟件模擬GPS模塊的輸出數(shù)據(jù),因為模擬方法可以調(diào)節(jié)發(fā)送數(shù)據(jù)的頻率,可以排除51單片機運行速度過慢造成的問題,不幸的是采用這個方法后還是不正常,然后再次修改了程序,簡化了部分程序,加快了運行處理速度,可問題還是存在。

    3、硬件指示電路:接著在P3.7端口接了個指示燈,中斷程序中加入一個計數(shù)變量,當(dāng)程序連續(xù)接收10次GPS協(xié)議頭部時指示燈就閃一次,大約是2.5秒的周期,在顯示器顯示出錯后,觀察指示燈的反應(yīng)很正常,因此顯示器出問題的可能性更大了。

    4、輔助顯示:再接著在硬件上接入一個8段字符顯示器,顯示的是GPS接收到的時間單元,1小時后原來的1602顯示器顯示出錯后,8段字符顯示器顯示仍然正常,現(xiàn)在終于可以確認(rèn)是1602顯示器的問題了,至于是顯示器硬件本身的問題還是程序驅(qū)動的問題,可以修改驅(qū)動程序時序、更換顯示器來確認(rèn)了。





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1