• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機Keil軟件仿真與調試技巧

    單片機Keil軟件仿真與調試技巧

    作者: 時間:2012-08-21 來源:網絡 收藏

    5.程序

    源程序編譯通過,表明語法正確,卻并不能保證該程序能夠正確運行。還需要對其邏輯功能進行具有很強的功能。

    鼠標左擊主菜單Debug一>Sta№top DebugSession子菜單或/編輯模式切換按鈕。進入調試程序工作模式,窗口如圖5所示。重復點擊該按鈕可以實現在編輯模式和調試模式之間進行切換。

    圖5程序調試運行
    圖5程序調試運行。

    調試程序時的程序運行控制按鈕從左到右依次為復位、連續運行,暫停、單步、過程單步、執行完當前子程序、運行到光標當前行。復位按鈕模擬芯片的復位,它將使程序回到最開頭處執行。當程序處于停止狀態時復位才有效,程序處于運行狀態時停止按鈕才有效。

    ①為了方便觀察程序調試過程中各變量和RAM單元的中間結果。點擊主菜單View一>WatchCall Stack Window和View一>Memory Window打開觀察變量窗13和存儲器窗1:3進行顯示。由于本例還要觀察P1 13的輸出變化,可以點擊主菜單Peripherals一>I/O-Ports一>Port 1打開I/O 13 P1的觀察窗13.

    ②程序調試。

    程序可以單步執行或連續執行。連續執行是指一條指令執行完后接著連續立即執行下一條,中間不停止。這樣程序執行的速度很快。可以看到程序執行的總體效果。即最終結果是正確或錯誤。但如果程序有錯,則難以確認具體出錯地方。例如本例中點擊連續運行按鈕后。P1口輸出01H后便始終保持不變。這顯然與花樣彩燈程序的循環顯示要求不符。程序運行出錯,如圖6所示。

    圖6程序調試時的連續運行
    圖6程序調試時的連續運行。

    單步執行指每執行完一條指令后即停止。等待命令執行下一行程序,此時可以觀察該條指令執行后得到的實際結果。對比分析是否與預期結果一致。

    借此可以找到程序中的錯誤原因所在。這種方式的缺點是需要時間長,排查錯誤效率很低。尤其當程序很大時。

    因此,對于用戶確認沒有錯誤的程序段可以采用連續運行。對懷疑出錯或容易出錯的地方則單步執行。對比排查錯誤。這樣調試的效率將會高一些。

    本例通過單步執行。發現程序運行過程中循環變量R3的值總在250和249之間變化,而且R1、R2、R7均始終無變化,如圖7所示。對比程序分析,發現出現了死循環。原因在于第1條DJNZR3,DEL2的轉移目的地址為DEL2,應該改為DEL3.

    圖7程序調試時的連續運行
    圖7程序調試時的連續運行。

    回到編輯狀態,修改為DJNZ R3,DEL3,編譯后再次進入調試工作模式時,發現故障已經排除。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 高唐县| 七台河市| 绩溪县| 太白县| 台湾省| 清水县| 民县| 东宁县| 苗栗县| 九龙县| 青海省| 文化| 自贡市| 定西市| 清原| 射洪县| 麟游县| 钟山县| 鸡西市| 常州市| 安宁市| 卓资县| 夹江县| 天祝| 贡山| 句容市| 祁东县| 济宁市| 攀枝花市| 河间市| 汽车| 吉木乃县| 思茅市| 巴中市| 邹城市| 兰坪| 西乌| 江北区| 屏南县| 浪卡子县| 孟连|