文/蒲靈巧 徐華 李殿鋼
本文以MCS-51 單片機為載體,選用Keil uVision4 軟件作為編譯器。采用51 系列兼容單片機C 語言軟件開發系統,因其開發速度、數據處理、可移植性、等有明顯的優勢,因而易學易用。
仿真:是利用計算機和相關軟件對電子電路進行設計、分析、調試和測試等操作。在實際教學中,為了避免理論教學為主以及試驗箱上的電路已經固定學生只能驗證實驗而缺乏自主設計的靈活性等枯燥的教學形式,我們選擇Proteus 虛擬仿真軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件,受到單片機愛好者、從事單片機教學的教師、致力于單片機開發應用的科技工作者的青睞。
理實一體化教學法:理實一體化教學法即理論實踐一體化教學法。突破以往理論與實踐相脫節的現象,它強調充分發揮教師的主導作用,通過設定教學任務和教學目標,讓師生雙方邊教、邊學、邊做,全程構建素質和技能培養框架,豐富課堂教學和實踐教學環節,提高教學質量。同時便于學生結合專業知識在軌道交通領域進一步發展打下良好基礎。

圖1:數字鐘電路圖
在教學實施環節中,主要通過精心設計的33 個項目把知識點模塊化、重難點分散化,同時通過軟件設計、硬件設計、軟硬件聯調仿真等手段讓學生在學中做,在做中練,在練中消化知識以期能達到學習目的。現就教學中出現的易錯易混操作總結如下:
(1)目標未創建;
(2)添加C 程序至源組報錯;
(3)編譯程序報錯;
(4)可執行文件Hex 文件未生成;
(5)保存文件時C 程序覆蓋項目文件。
(1)元件型號不匹配或參數設置不合理;
(2)終端模式與子電路模式混淆;
(3)未能成功加載hex 文件。
(1)程序設計與硬件設計不匹配,尤其是單片機端口的選擇不一致;
(2)仿真現象失真或錯誤;
(3)移動文件夾后再次仿真時HEX 文件路徑報錯。
3.1.1 目標未創建
(1)不會或忘記創建newproject;針對這類錯誤只要注意KeiluVision4 的操作步驟即可。
(2)新建uVision 項目數與需完成的項目數量不匹配;這類錯誤主要發生在在規定時間內完成多個項目時,更改錯誤時只需做到一個項目匹配一個uuVision 項目即可。
(3)程序編譯時有錯誤;這類錯誤只要針對提示錯誤信息以KeilC 編程規則逐一調試、更改即可。
3.1.2 添加C 程序至源組報錯
(1)忘記添加C 程序;在操作時多加留意補添加C 程序即可。
(2)找不到C 程序;這類錯誤主要是因為txt 文件類型未更改而所致,在新建完項目文件后,進入到程序編輯窗格,“文件”菜單中的“新建”命令,默認文件類型是txt,須更改文件類型為“*.c”,這樣才可能在“添加文件到組‘源組’‘”對話框中找到C 程序。
(3)多次添加C 程序出錯;在“添加文件到組‘源組1’”對話框中一個工程項目只能添加一次C 程序,再次添加會提示“*.c 已經在‘源組1’中存在,文件無法添加到目標”,處理此類報錯時只需關閉對話框即可。
3.1.3 編譯程序報錯
如果對C 語言掌握熟練程度不夠,常常會出現一些低級錯誤。
(1)頭文件出錯,MCS-51 系列單片機的頭文件只有兩個“reg51.h”和“at89x51.h”;
(2)端口P 不大寫,在軟件設計時,務必記得將單片機的端口P 大寫;
(3)函數名前后書寫不一致,在編程時函數名在符合語法的前提下,盡量簡單貼切需要實現的功能;
(4)變量的使用前后不一致;
(5)標點符號不當,很多時候忘記加“;”,同時對“=”和“==”作用分不清。
需要特別強調的是:keil c 特有的語法一定要強制性記憶牢固,注意與C 語言程序設計的區別,例如:keil c 不能識別中文字符,即使錄入中文字符,程序員是不能看見的,但在編譯時常常報“unprintable character”,這種情況只需添加注釋符號才能看見。
3.1.4 可執行文件Hex 文件未生成,但hex 文件是鏈接軟硬件的橋梁
(1)未勾選“產生HEX 文件(X)”復選框;解決此類問題的操作步驟如下:“為目標‘目標1’設置選項“對話框中——”輸出“標簽文——創建可執行文件——產生HEX 文件(X)復選框;
(2)只編譯而沒生成可執行文件hex。當程序編寫完成時,容易忘記點擊“編譯文件并生成可執行文件”按鈕,導致軟件的準備工序并未完成。
(3)程序有錯不能生成hex 文件。當我們編譯C 程序時,必須將程序調試編譯無誤時才可產生可執行文件。
3.1.5 保存文件時C 程序覆蓋項目文件
這種錯誤是因沒有理解“項目文件”和“C源程序”的意義而導致的。
3.2.1 參數設置不合理或元件型號不匹配
(1)電阻參數設置不合理;電阻阻值默認10kΩ,但一般用220Ω、330Ω 較多,在使用時需根據項目設計的要求設置合適的參數;
(2)元件型號不匹配;例如:在采用數碼管作顯示設備時,應注意數碼管的兩種連接方式:共陰極和共陽極。軟件設計采用共陰極時,硬件設計時應選用“7SEG——MPX1(““1”代表數碼管的位數)——CC“,而電源應對應選擇”“GROUND”;若在軟件設計采用共陽極時,硬件設計時應選用“7SEG——MPX1(““1”代表數碼管的位數)——CA“,而電源應對應選擇”“POWER“;
3.2.2 終端模式選擇失誤
(1)電源選擇失誤;學生常把“終端模式”誤用成“子電路模式”,可能因為兩個靠的近,同時均有power 和ground,但符號不同。
(2)元件選擇模式定向思維;在所做的項目中,我們常常用到“選擇模式”、“元件模式”、“終端模式”等,但在電機調速控制章節學習時,大家繼續慣性模式到元件庫中去選取“OSCILLOSCOPE”、“countertimer”,可正確的是應選取新模式“虛擬儀器模式”。
3.2.3 未能成功加載hex 文件
(1)找不到hex 文件;第一種可能,未勾選“產生可執行文件hex”復選框;第二種可能,編譯完成時未點擊“創建hex 可執行文件”按鈕;

圖2:數字鐘錯誤程序

圖3:數字鐘仿真效果圖
(2)hex 文件位置亂放;需注意的是hex文件與項目文件的位置是一致的;
(3)不能多次加載hex 文件;在仿真時發現現象不對或不夠完美時,需要再次編譯程序生成hex 文件,可是再次加載時卻告知“不能再次加載”檢查電路設計是否合理,排查設備型號、設備參數等因素。
最后,在Proteus 仿真軟件ISIS 操作中,還可能出現此類錯誤:
(1)電路設計時只把元件靠近其他設備但是不連線,導致最后看不見仿真現象;
(2)指法不對,導致關鍵詞在拼寫時總是出錯。
3.3.1 軟件設計與硬件設計不匹配
(1)數碼管的軟硬件不匹配;
(2)P0 端口傳輸數據時,上拉電阻未添加;P0 端口在做數據傳輸端口時,它輸入信號的強弱與其他端口差別不大,但作為輸出端口時,信號非常微弱,必須添加上拉電阻使輸出端為高電平。
(3)軟硬件設計端口不匹配;
3.3.2 仿真現象失真或錯誤
(1)C 程序未添加至源組;在其他操作一切正常的情況下,未添加程序,不能實現對硬件的控制,也不能看到預期仿真效果,只要添加完成后,重新生成hex 文件,并加載至硬件即可。
(2)多顯、漏顯信息;這類錯誤是因為程序的顯示函數出問題,需反復修改并編譯。
(3)完全無現象,端口不讀數據;此類錯誤一般是因為元件連接不合理或是斷路,有時難免因參數設置不合理導致。
(4)main()函數報錯;這種情況因為變量或中斷初始化出現錯誤,有時是函數拼寫錯誤,有時是同一個項目有多個main()。
(5)彩燈閃爍過快或過慢,肉眼觀察不出現象或等待時間過長;
這類錯誤主要是延遲函數的定義及調用出問題,可以通過修改實參的值來達到目的;同時,也有可能是延遲函數第一層for 循環后面跟了“;”導致錯誤。
3.3.3 移動文件夾路徑報錯
(1)移動文件后,仿真時報路徑出錯;加載hex 文件時如果使用的是絕對路徑,那么移動文件后再次仿真時仍按原路徑訪問hex 文件所以報錯,因為移動文件后路徑已經發生了變化,此時需要注意的是在加載hex 文件時使用相對路徑最好,方便項目的遷移。
(2)項目及文件命名;在軟硬件設計時,一定按命名規則進行。
現以數字鐘的實現為例簡要驗證解決方案的可行性。數字鐘電路圖如圖1所示,數字鐘錯誤程序如圖2所示,數字鐘仿真效果圖如圖3所示。
針對數字鐘的顯示項目在仿真電路連接時易錯易混操作可能有:
(1)排阻RP1 的電源引腳連接出錯;
(2)P0 端口不加上拉電阻或排阻;
(3)數碼管錯選為“7SEG---MPX8---CC”,而本程序設置的是共陽極(CA)數碼管。
本研究在校內開設有《單片機控制及應用》課程的班級中得到推廣,目前已取得比較顯著的成績。以前未使用該方案的班級成績(調研人數157 人)及格率48.9%,平均分54.82 分,最高86 分,最低分8 分;而使用該方案的班級成績(調研人數353 人)及格率88.69%,平均分71.24 分,最高分98 分,最低分15 分。從對比結果看來,對教學效果的提升已經起到了非常重要的作用。
本次研究對校內多個系部、班級以及不同層次的學生做了調研,花費了大量的人力;也有很多同行給予我們鼓勵與支持,本項目組成員對此表示衷心的感謝,并將研究成果形成此文與大家分享,若有不足之處,望批評指正!