基于Proteus軟件仿真與Keil的單片機系統(tǒng)設計
1 概述 隨著半導體技術的飛速發(fā)展,以及移動通信、網(wǎng)絡技術、多媒體技術在嵌入式系統(tǒng)設計中的應用,單片機從4位、8位、16位到32位,其發(fā)展歷程一直受到廣大電子愛好者的極大關注。單片機功能越來越強大,價格卻不斷下降的優(yōu)勢無疑成為嵌入式系統(tǒng)方案設計的首選,同時單片機應用領域的擴大也使得更多人加入到基于單片機系統(tǒng)的開發(fā)行列中,推動著單片機技術的創(chuàng)新進步?! ∪欢鴤鹘y(tǒng)的單片機系統(tǒng)開發(fā)除了需要購置諸如仿真器、編程器、示波器等價格不菲的電子設備外,開發(fā)過程也較繁瑣。如圖1所示,用戶程序需要在硬件完成的情況下才能進行聯(lián)調,如果在調試過程中發(fā)現(xiàn)需修改硬件,則要重新制板。因此無論從硬件成本還是開發(fā)周期來看,其高風險、低效率的特性顯露無遺。來自英國labcenter electronics公司的proteus軟件很好地詮釋了利用現(xiàn)代eda工具方便快捷開發(fā)單片機系統(tǒng)的優(yōu)勢。它包括proteus vsm(virtual system modelling)、proteus pcb design兩大組成部分,在pc機上就能實現(xiàn)原理圖電路設計、電路分析與仿真、單片機代碼級調試與仿真、系統(tǒng)測試與功能驗證以及形成pcb文件的完整嵌入式系統(tǒng)設計與研發(fā)過程。本文講述proteus vsm單片機系統(tǒng)的proteus設計與仿真功能,圖2為基于proteus仿真軟件的單片機系統(tǒng)設計流程,它極大地簡化了設計工作,得到眾多設計師的青睞?! ? 基于proteus的單片機系統(tǒng)設計與仿真 proteus支持51、pic、avr、arm7等多個系列的單片機芯片,集編輯、編譯、仿真調試于一體。它的界面簡潔友好,可利用該軟件提供的數(shù)千種數(shù)字/模擬仿真元器件以及豐富的仿真設備,使得在程序調試、系統(tǒng)仿真時不僅能觀察到程序執(zhí)行過程中單片機寄存器和存儲器等內容變化,還可從工程的角度直觀地看到外圍電路工作情況,非常接近工程應用。另外proteus還能與第三方集成開發(fā)環(huán)境(如keil的μvision)進行聯(lián)合仿真調試,給予開發(fā)人員莫大便利。本設計以51單片機構成的99秒馬表為例描述基于proteus的硬件設計、基于keil c的軟件設計以及它們的聯(lián)合仿真調試過程。 2.1 硬件設計 2個七段數(shù)碼管顯示馬表時間,用51單片機的p1口驅動;按鍵sp掛在外部中斷0的i/o口上,第1次按下表示開始運行,第2次按下為計時停止,第3次按下重新歸零;擴展程序存儲器27256、數(shù)據(jù)存儲器62256主要是緣于嵌入式操作系統(tǒng)μc/osii下的應用程序設計,片內存儲空間有限,同時也方便擴展。
圖1 傳統(tǒng)的單片機系統(tǒng)設計流程 圖2 基于proteus的單片機系統(tǒng)設計流程
圖3 基于proteus的馬表系統(tǒng)原理圖 根據(jù)以上分析,選取的元器件有:at89c51、4位7段譯碼顯示器、74ls373、27256、62256、按鍵及電阻電容等。proteus繪制原理圖和protel軟件相似,先從元件庫中取出所需的元件并在繪圖區(qū)布局好,設置元器件屬性,接著進行連線,添加必要的網(wǎng)絡標示等,最后完成電氣檢測。圖3為馬表電路原理圖。
圖4 程序流程圖 2.2 軟件設計 隨著嵌入式系統(tǒng)應用不斷擴大,功能不斷增強,為了對整個系統(tǒng)及其所操作的部件、裝置等資源進行統(tǒng)一協(xié)調、指揮和有效控制,使開發(fā)人員只專注于應用程序設計,在嵌入式系統(tǒng)中引入操作系統(tǒng)是非常必要的。μc/osii是源碼公開的實時多任務操作系統(tǒng),具備足夠的穩(wěn)定性和安全性,特別適合用于中小型嵌入式系統(tǒng)中。μc/osii的具體介紹和移植過程請見參考文獻[1]?! eil公司的keil μvision3,是目前使用最為廣泛的開發(fā)環(huán)境之一。這里介紹在keil μvision3環(huán)境下基于μc/osii嵌入式操作系統(tǒng)的用戶程序設計。根據(jù)馬表系統(tǒng)功能,設計兩個任務: 任務1為數(shù)碼管顯示,調用系統(tǒng)延時函數(shù)實現(xiàn)馬表的運行;任務2為按鍵判斷,屬于中斷級任務,通過按鍵啟動/停止/重置馬表。數(shù)碼管顯示和按鍵判斷任務之間用信號量實現(xiàn)通信;其中按鍵任務發(fā)出信號量,數(shù)碼管顯示任務負責接收信號量。程序流程如圖4所示。部分程序清單如下: 主程序 main() { …… 8051init();/*cpu初始化*/ osinit();/*操作系統(tǒng)初始化*/ ostaskcreate();/*創(chuàng)建任務*/ ossemcreate();/*創(chuàng)建信號量*/ osstart();/*多任務啟動*/ …… } 任務1 task1() { … for(;;) { …… display(0);/*顯示0*/ ossempend();/*