??集成開發環境概述 ????80年代單片機進入我國,當時較有影響的是INTEL的NCS-48系列和Zilog公司的Z80系列,20多年來單片機獲得了飛速的發展,現在單片機已經滲入到工農業生產,國防軍事,教育科研等諸多領域,已經形成了計算機領域的一個重要分支。 ????單片機的應用首先要考慮的是它的開發平臺,也即我們常說的開發環境。由于INTEL公司的MCS-51系列較早進入我國,事實上已形成了工業標準,MCS-51的單片機應用場合隨處可見,它的軟件資源相當豐富,硬件的支持也很完善,價廉物美的開發器材隨處可取。現階段,國內的大部分單片機開發工程技術人員還是普遍使用匯編語言編寫程序。匯編語言有其缺陷性,但它編寫的代碼最小,最直接,效率也最高,所以還深得用戶接受。但是,它有著固有的缺陷,必須十分了解所用單片機的硬件結構,程序編寫困難,代碼難以理解,不易于識讀,難于移植,排錯困難,編寫程序花的時間相當多,調試不便等等。隨著國內單片機開發環境的完善,開發技術水平不斷提高,現在已有相當的開發器材支持高級語言的使用和調試,為單片機的開發應用提供了更好的物質條件。高級語言(如C語言)具有開發周期短,易于識讀,容易移植,也便于初學著掌握。誠然,高級語言也有它不足之處,就是高級語言產生的代碼過長(也即研制人員常稱的“廢話太多”),對于早期單片機不大的ROM來說,可是非常突出的矛盾,另外它的運行速度太慢,對于本來主頻不高的單片機是致命的弱點。但現在這方面的研制工作也取得了較大的進展,高級語言的弱點也已被較大的克服,象MCS-51上的C語言的代碼長度,如果未加上人工優化條件,也可做到最優匯編程序水平的120%—150%,這也相當可觀了。可以說相當于中等匯編程序員的水平。 ????C語言是可以在高級計算機、個人電腦(PC)和單片機使用的唯一一種高級語言,現在很多類型的單片機已經具備了C語言編譯軟件和實時多任務操作系統。C語言功能十分強大,可以塑造一種良好的開發環境,在一種單片上編制的程序比較容易移植到另一種單片機上。 ????目前的C語言編譯器有很多,常見的有MICRO-C51、American automation、Franklin、Archimedes、BSO/TASKING、Micro computer controls等等。C51 C語言編譯器早在80年代就已經出現,但并非所有的C語言編譯器都產生相應單片機的有效源代碼,它們各有所長,下面我們略作簡介。 ????American automation 編譯器通過#asm和endasm預處理選擇支持匯編語言,匯編速度慢,要求匯編的中間環節。 ????Franklin它的前身是Keil,它以代碼緊湊領先,可產生最少的代碼。它支持浮點和長整數,重入和遞歸。它不提供庫的源代碼,不能生成能匯編的匯編代碼,僅產生混合代碼,只能修改后匯編。若使用匯編語言,必須分開匯編程序,然后手工連接。keil/Franklin專業級開發工具PK51,支持DOS話Windows環境。 ????Archimedes 它的鼻祖是瑞典的IAR,是支持分組開關(Bank)的編譯器,集成環境類似于Borland和Turbo,C編譯器可產生一個匯編語言文件,然后再用匯編器。 ????BSO/TASKING 它是一家專業開發和銷售嵌入式系統軟件工具的公司。它生產基于Windows的集成開發環境、調試器和交叉模擬器,支持鼠標,介面友好。軟件格式符合IntelOMF-51和Intel Hex標準,它的匯編器和Intel匯編器兼容。 ????Micro computer controls 它不支持浮點數,長整數,結構和多維數組,定義不允許有參數,生成的源文件需由Intel或MCC的8051匯編器匯編。 ?????單片機應用系統的開發 ????單片機的應用系統隨著其用途不同,其硬件和軟件均不相同,也即單片機的最初的選型都很重要,原則上是選擇高性價比的單片機,硬件軟件化是提供系統性價比的有效方法,盡量減少硬件成本,多用軟件來實現相同的功能,這樣也可大大提高系統的可靠性。 ????雖然單片機的硬件選型不盡相同,軟件編寫也千差萬別,但系統的研制步驟和方法是基本一致的,一般都分為總體設計、硬件電路的構思設計、軟件的編制和仿真調試幾個階段,下面我們作簡要介紹。 ????[1].總體設計 ????·確立功能特性指標 ????不管是工程控制系統還是智能儀器儀表,都必須先分析和了解項目的總體要求,輸入信號的類型和數量,輸出控制的對象及數量,輔助外設(如傳感器)的種類及要求,使用的環境及工作的電源要求,產品的成本,可靠性要求和可維護性及經濟效益等等因素,必要時可參考同類產品的技術資料,制定出可行的性能指標。 ????·單片機的選型 ????現在的單片機數量品種繁多,各種專用功能的單片機基本上都有,這給用戶者帶來的好處很多,至少可節約很多外接擴展器件。單片機的選型很重要,選擇時需考慮其能全部滿足規定的要求,例如控制速度、精度、控制端口的數量、驅動外設的能力、存儲器的大小,軟件編寫的難易程度、開發工具的支持程度等等。再如要驅動LED顯示器,可選用多端口的單片機直接驅動,還可利用少端口加擴展電路構成,這就具體的分析選用何種器件有利于降低成本、電路易于制作、軟件便于編寫等等因素。再有,如果要求驅動LCD顯示器,也可選用具有直接驅動LCD的單片機,也可加外接驅動芯片的辦法。這些要求在應用時具體問題具體分析。 ????此外,選擇某種單片機還需考慮貨源是否充足,是否便于批量生產,在考慮性價比的時候同樣需研究易實現產品技術指標的因素。 ????·軟件的編寫和支持工具 ????單片機的應用軟件的設計與硬件的設計一樣重要,沒有控制軟件的單片機是毫無用處的,它們緊密聯系,相輔相成。并且硬件和軟件具有一定的互換性,在應用系統中,有些功能既可用硬件來實現,也可以軟件來完成,多利用硬件,可以提高研制速度,減少編制軟件的工作量,爭取時間,爭取商機。誠然這樣會增加產品的單位成本,對于以價格為競爭手段的產品就不宜采用。相反,以軟件代替硬件來完成一些功能,最直觀的是降低成本,提高可靠性,增加技術難度而給仿制者增加仿制難度,這是好的一面,不利的一面是同時也增加了系統軟件的復雜性,軟件的編制工作量大,研制周期可能會加長,同時系統運行的速度可能也會降低等。因此在總體考慮時,必須綜合分析以上因素,合理地制定某些功能硬件和軟件的比例。 ????不同的單片機甚至同一公司的單片機它們的開發工具不一定相同或不完全相同,這就要求在選擇單片機時,需考慮開發工具的因素,原則上是以最少的開發投資滿足某一項目的研制過程,最好是使用現有的開發工具或增加少量的輔助器材就可達到目的的。當然,開發工具是一次性投資,而形成產品卻是長遠的效益,這就需平衡產品和開發工具的經濟性和效益性。 |
????[2].硬件電路設計 ????總體設計中確立的功能特性要求,確定單片機的型號,所需外圍擴展芯片、存儲器、I/O電路、驅動電路、可能還有A/D和D/A轉換電路以及其它模擬電路,設計出應用系統的電路原理圖。 ????·程序存儲器 ????隨著微電子技術的發展,現在可用作程序存儲器的類型相當多,各大半導體公司都推出了一系列程序存儲器,象EPROM、EEPROM、FLASH存儲器以及OTP存儲器等等。這些存儲器各有特點,互有所長。EEPROM和FLASH適合于多次擦寫的場合,最適于開發調試階段,當然它們的價格也稍比其他的高些。對于批量生產已成熟的應用系統最好選用EPROM和OTP的存儲器,最主要的原因是它們的價格稍低,對降低產品的成本是相對有利的。 ????值得一提的是,現在的單片機普遍都帶有程序存儲器,容量也分有不同的等級,從幾百字節到幾百kB都有,這為它們的應用提供了更為廣闊的前景。而且這些單片機價格也貴不了多少,同時,這些內置ROM的單片機基本上均可實現軟硬件的程序加密,為保護自己的知識產權提供了強有力的措施,所以這些單片機深得用戶喜愛,可以說這類單片機逐漸成為市場的主流產品。 ????·數據存儲器 ????現在的單片機基本上都帶內部數據存儲器(RAM)的,從幾十字節到幾KB字節都有,對于數據存儲器容量的要求,各個系統之間差別很大,要求也不盡相同,象8051/52系列的單片機片內置有128和256字節的RAM,這對于一般中小型應用系統(如實時控制系統和智能儀器儀表)已能滿足要求。對于RAM的容量要求稍大一點,可采用外擴芯片8155這樣的芯片,8155可同時擴充數量更多的I/O口線。如果是數據采集對RAM容量要求較大的系統則需要采用更大容量的數據存儲器,當然,外擴的RAM也以盡可能少的芯片為原則。 ????·單片機的系統總線 ????8051總共有32個I/O口,如果使用內置程序存儲器的芯片,可用于作I/O口線的就較多,一般均可滿足要求。但如需外接ROM和RAM,P0口為標準的雙向數據/地址總線口,P2為高8位地址總線口,即使高8位的地址總線口沒有完全使用,余下的I/O口也不能當作它用,否則編程將相當麻煩。這樣8051能作I/O的端口只有16個。此外,P3口它的中斷功能更為重要,一般在使用中都用作中斷處理,剩下的也只有P1口,這8個I/O口就顯得相當寶貴。 ????P0和P2口作數據和地址總線,一般可驅動數個外接芯片(視外接芯片要求的驅動電流而異),也即P0和P2口的驅動能力還是有限的,P0口為LSTTL電路,P2口為4個LSTTL電路,如果外接的芯片過多,負載過重,系統將可能不能正常工作,此時必須加接緩沖驅動器予以解決。圖2為使用74LS244和74LS245三態緩沖驅動器的應用電路。供使用時參考。 ????·I/O接口 ????現在的單片機系列中普遍都有多I/O口的型號,對I/O口的使用應從其功能和驅動能力上加以考慮,對于僅需增加少量的I/O口,最好是選用價格低廉的TTL或CMOS電路擴展即可,這樣也可提高單片機口線的利用率。對于需擴展更多的I/O口,則可選用標準的I/O口擴展芯片8155、8255和8279等芯片,這些芯片接口電路簡單,編程方便,使用靈活,價格適中。 ????·A/D和D/A轉換器 ????現在可使用的A/D轉換器數量繁多,品種齊全,各種分辨率、精度及速度的芯片應有盡有。最著名的是美國的模擬數字器件公司(Analog)的一系列轉換器,此外還有MOTOROLA和MAXIM公司等,這給使用提供了很多便利的條件。還有一種趨勢大家都已看到,即現在的各大單片機生產廠商都推出了內帶A/D轉換器的單片機,這樣的芯片性價比一般都較高。由于A/D或D/A轉換器與單片機沒有外部連線,工作也更可靠,體積更小。對轉換器的控制均可使用軟件的方法實現,使用十分方便,如果能滿足要求,建議首選這樣的機型,而不要外掛轉換器件。當然內置轉換器的單片機,轉換器一般都在12位以下,對那些有更高要求的應用系統,也只能外接轉換器芯片。 |
[3].軟件設計 ?????系統資源 ????在單片機應用系統的開發中,軟件的設計是最復雜和困難的,大部分情況下工作量都較大,特別是對那些控制系統比較復雜的情況。如果是機電一體化的設計人員,往往需要同時考慮單片機的軟硬件資源分配。軟件設計一般可按如下步驟進行,設計流程圖可口參見圖2。 ????在考慮一個應用工程項目時就需先分析該系統完成的任務,明確軟硬件個承擔哪些工作,有時,實際上這種情況很多,就是一些任務可用軟件完成,也可以用硬件構成,還需考慮采用軟件或硬件它們優勢,一般均以最優的方案為首選。象虛定義各輸入/輸出(I/O)的功能、數據的傳輸交換形式、與外部設備接口及它們的地址分配、程序存儲器和數據存儲器的使用區域、主程序子程序使用的空間、顯示(如有的話)等數據暫存區的選擇、堆棧區的開辟等等因素。 |
?????程序結構 ????一個優秀的單片機程序設計人員,設計的軟件程序結構是合理、緊湊和高效的。同一種任務,有時用主程序完成是合理的,但有時需子程序執行效率最高,占用CPU資源最少。一些要求不高的中斷任務或單片機的速度足夠高,可以使用程序掃描查詢也可以用中斷申請執行,這也要具體的問題具體分析。對于多中斷系統,但它們存在矛盾時,需區分輕重緩急,主要和次要的區別對待。并適當地授權予不同的中斷優先級別。 ????在單片機的軟件設計中,任務可能也很多,程序量很大,是否意味著程序也按部就班從頭到尾編寫下去呢?答案是否定的,在這種情況下一般都需把程序分成若干個功能獨立的模塊,這也是軟件設計中常用的方法,這也即俗稱的“化整為零”的方法。理論和實踐都證明,這種方法是行之有效的。這樣可以分階段地對單個模塊進行設計和調試,一般情況下單個模塊利用仿真工具即可將它們調試好,最后再將它們有機的聯系起來,構成一個完整的控制程序,并對它們進行聯合調試即可。 ????對于復雜的多任務實時控制系統,要處理的數據就非常龐大,同時又要求對多個控制對象進行實時控制,要求對各控制對象的實時數據進行快速的處理和響應,這對系統的實時性、“并行性”提出了更高的要求。這種情況下一般要求采用實在時地任務操作系統,并要求這個系統具備優良的實時控制能力。 ?????數學模型 ????一個控制系統的研制,明確了它們需完成的任務,那么擺在設計人員面前的就是一堆需要協調解決的問題了,這是設計人員必須進一步分析各輸入輸出變量的數學關系,也即建立數學模型,這個步驟對一般較復雜的控制系統是必不可少的,而且不同的控制系統,它們的數學模型也不盡相同。 ????在很多控制系統中都需要對外部的數據進行采集取樣、處理加工、補償校正和控制輸出。外部數據可能是數字量也可能是模擬量,對于模擬量的輸入,則通過傳感器件進行采樣,由單片機進行分析處理后輸出,輸出的方式很多,可以顯示、打印或終端控制,從模擬量的采樣到輸出的諸多環節,這些信號都可能會“失真”——即產生非線性誤差,這些都需要單片機進行補償、校正和預加重,才能保證輸出量達到我們所要求的誤差范圍。 ????現階段8位單片機仍是主流,對于復雜參數的計算,例如非線性數據、對數、指數、三角函數、微積分運算,如使用PC機(32位)的軟件編程相對簡單,并且具有大量的應用軟件可利用。但單片機要用匯編語言完成這樣的運算,程序結構是很復雜的,程序編寫也較困難,甚至難以建立數學模型,解決這個問題,常用的方法多半采用查表法實現之。查表法即事先將測試和計算的數據按一定規律編制成表格,并存于存儲器中,CPU根據被測參數值和近似值查出最終所需的結果。查表法是一種行之有效的方法,它可對輸入參數進行補償校正,計算和轉換。程序編制簡單,將復雜的數值運算簡化為簡單的數據輸出的好辦法,常被設計人員采用。 ????值得一提的是,現行的單片機,大多數的單片機都具有查表指令,這給軟件設計提供了技術條件。 ?????程序流程 ????較復雜的控制系統一般都需要繪制一份程序流程圖,可以這樣說它是程序編制的綱領性文件,可以有效地知道程序的編寫。當然,程序設計伊始,流程圖不可能盡善盡美,在編制過程中仍需進行修改和完善,認真地繪制程序流程圖,可以起到事倍功半的效果。 |
????流程圖就是根據系統功能的要求及操作過程,列出主要的各功能模塊,復雜程序程序流向多變,需要在初始化時設置各種標志,程序根據重些標志控制程序的流向。當系統中各功能模塊的狀態改變時,只須修改相應的標志即可,無須具體地管理狀態變化對其他模塊的影響,這些需要在繪制流程圖時,清晰地標識出程序流程中各標志的功能。 ?????編制程序 ????上述的工作做好了,就可以開始編制程序了,程序編寫時,首先需對用到的參數進行定義,和標號的定義一樣,使用的字符必須易于理解,可以使用英文單詞和漢語拼音的縮寫形式,這對今后自己的辨讀和排錯都是有好處的。然后初始化各特殊功能寄存器的狀態,中斷口的地址區定義,數據存儲區的安排,根據系統的具體情況,估算中斷、子程序的使用情況,預留出堆棧區,和需要的數據緩存區,接下來就開始編寫程序了。 ????現在的單片機程序還是以匯編語言為主,因為它以簡潔、直觀、緊湊仍被設計人員樂于接受。高級語言(如C語言)也在單片機設計中發揮越來越重要的角色,性能也越來越好,但不管是使用何種語言,最終還是需要匯編成機器語言,調試正常后,通過燒錄器固化到單片機或ROM中。至此,程序編寫即告完成。 ?????CodeCruiser for EasyPack51集成開發環境 |
評論
查看更多