史上最強單片機科普 應廣單片機( 三 )


單片機編程
單片機編程和PC機編程有很大的區別 。雖然現在基于C語言的單片機開發工具越來越流行,但是對于一個高效的程序代碼和喜歡使用匯編語言的設計人員來說,匯編語言仍然是最簡潔有效的編程語言 。
對于MCU編程來說,其基本框架可以說是大體一致的,一般分為三個部分:初始化部分(這是MCU編程與PC最大的區別)、主程序循環體和中斷處理程序,分別描述如下:
初始化:對于所有MCU程序的設計來說,外化是最基本也是最重要的一步,一般包括以下內容:
屏蔽所有中斷并初始化堆棧指針:初始化部分通常不希望發生任何中斷 。
清除系統的RAM區域并顯示Memory:雖然有時可能不是完全必要的,但從可靠性和一致性的角度來看,建議養成良好的編程習慣,尤其是為了防止意外錯誤 。
IO口初始化:根據項目的應用需求,設置相關IO口的輸入輸出方式,對向輸入口設置上拉或下拉電阻;對于輸出端口,有必要設置其輸出電平,以防止不必要的錯誤 。
中斷設置:對于項目需要的所有中斷源,都要開啟并設置中斷的觸發條件,而不使用的不必要的中斷必須關閉 。
其他功能模塊初始化:對于需要使用的MCU的所有外圍功能模塊,必須根據項目的應用需求進行相應的設置 。例如,對于UART通信,需要設置波特率、數據長度、檢查模式和停止位長度,而對于編程器定時器,必須設置其時鐘源、分頻數和重新加載數據 。
參數外化:MCU的硬件和資源外化后,下一步就是初始化程序中使用的一些變量和數據 。這部分的初始化需要根據具體項目和方案的整體安排進行設計 。對于一些使用EEPROM保存預設項目數的應用,建議在初始化時將相關數據復制到MCU的RAM中,提高程序對數據的訪問速度,降低系統功耗(原則上訪問外部EEPROM會增加功耗) 。
主程序循環體:大多數單片機長時間連續運行,所以其主程序體基本上是循環設計的 。對于具有多種工作模式的應用程序,可能有多個循環體,可以通過狀態標志進行轉換 。對于主程序體,一般安排以下模塊:
計算程序:計算程序一般比較耗時,所以堅決反對將其置于任何中斷狀態,尤其是乘除法 。
顯示程序:主要用于帶外置LED和液晶驅動器的應用 。
中斷處理程序:中斷處理程序主要用于處理實時性要求較高的任務和事件,如外部突發信號檢測、按鍵檢測處理、計時計數、LED顯示掃描等 。
一般來說,中斷程序應該保持代碼盡可能簡潔和簡短 。對于不需要實時處理的功能,可以在中斷中設置觸發標志,然后主程序可以執行特定的事務——這一點非常重要,尤其是對于低功耗、低速度的MCU,需要保證所有中斷的及時響應 。
對于不同任務體的安排,不同的單片機有不同的處理方法 。
例如,對于低速低功耗的MCU(Fosc=32768Hz)應用,考慮到此類項目均為手持設備,使用普通LCD顯示,對按鍵和顯示的響應要求實時性較高,因此,按鍵的動作和數據的顯示應采用定時中斷的方式處理 。對于高速MCU,比如FOSC的1mhz應用,由于此時MCU有足夠的時間執行主程序循環體,所以可以只在相應的中斷中設置各種觸發標志,將所有任務放在主程序體中執行 。
在單片機的編程中,需要特別注意的一點是,防止中斷和主程序體中同一變量或數據同時被訪問或設置 。有效的防范方法是將這類數據的處理安排在一個模塊中,通過判斷觸發標志來決定是否執行該數據的相關操作;但是,在其他程序體(主要是中斷)中,只對需要處理數據的地方設置觸發標志 。―這樣可以保證數據執行的可預測性和唯一性 。
全球主流MCU廠商
歐美地區
1.飛思卡爾+恩智浦(Freescale+恩智浦):荷蘭,主要提供16位和32位MCU 。應用領域:汽車電子、LED及通用照明、醫療保健、多媒體融合、家電及電動工具、樓宇自動化技術電機控制、電源及電源轉換器、能源及智能電網、自動化、計算機及通信基礎設施 。
2.微芯片+Atmel(微芯片技術+Termel):美國主要提供16位和32位MCU 。應用:汽車電子、工業應用、電機控制、汽車、樓宇自動化、家用電器、家庭娛樂、工業自動化、照明、物聯網、智能能源、移動電子設備、計算機外設 。
【史上最強單片機科普 應廣單片機】3.Cypress+Spansion:美國,主要提供8位、16位、32位MCU 。應用:汽車電子、家用電器、醫療保健、消費電子、通信和電信、工業和無線 。
4.ADI(阿德里亞諾半導體):美國主要提供8位、16位、32位MCU 。適用范圍:航空空航空航天與國防、汽車應用、建筑技術、通信、消費電子、能源、醫療保健、儀器儀表與測量、電機、工業自動化與安全 。

推薦閱讀