MCU的程序的編寫與PC下的程序的編寫存在很大的差異,雖然現在根據C的MCU開發工具越來越流行,但關于一個高效的程序代碼和喜歡運用匯編的規劃者來講,匯編言語仍然是最簡練、最有用的編程言語。
關于MCU的程序編寫,其底子的結構能夠說是大體一致的,一般分為初始化部分(這是超低功耗MCU程序規劃與PC最大的不同),主程序循環體和間斷處理程序三大部分,其分別闡明如下:
1、初始化:關于全部的MCU程序的規劃來講,初始化是最底子也是最重要的一步,一般包含如下內容:
屏蔽全部間斷并初始化堆棧指針:初始化部分一般不希望有任何間斷產生。
鏟除系統的RAM區域和閃現Memory:雖然有時或許沒有完全的必要,但從可靠性及一致性的角度動身,特別是關于防止意外的差錯,仍是主張養成良好的編程習氣。
IO口的初始化:根據項目的運用的要求,設定相關IO口的輸入輸出方法,關于輸進口,需求設定其上拉或下拉電阻;關于輸出口,則有必要設定其初始的電平輸出,以防呈現不必要的差錯。
間斷的設置:關于全部項目需求用到的間斷源,應該給予開啟并設定間斷的觸發條件,而關于不運用的多余的間斷,則有必要給予關閉。
其他功能模塊的初始化:關于全部需求用到的MCU的外圍功能模塊,有必要按項目的運用的要求進行相應的設置,如UART的通訊,需求設定Baud Rate,數據長度,校驗方法和Stop Bit的長度等,而關于Programmer Timer,則有必要設置其時鐘源,分頻數及Reload Data等。
參數的初始化:完成了低功耗MCU的硬件和資源的初始化后,接下來就是對程序中運用到的一些變量和數據的初始化設置,這一部分的初始化需求根據詳細的項目及程序的整體安排來規劃。關于一些用EEPROM來保存項目預制數的運用來講,主張在初始化時將相關的數據拷貝到MCU的RAM,以進步程序對數據的拜訪速度,一同降低系統的功耗(原則上,拜訪外部EEPROM都會增加電源的功耗)。
2、主程序循環體:大多數MCU是歸于長時刻不間斷工作的,因此其主程序體底子上都是以循環的方法來規劃,關于存在多種作業模式的運用來講,則或許存在多個循環體,相互之間通過狀況標志來進行轉化。關于主程序體,一般狀況下首要安排如下的模塊:
核算程序:核算程序一般比較耗時,因此堅決對立放在任何間斷中處理,特別是乘除法運算。
實時性要求不高或沒有實時性要求的處理程序;
閃現傳輸程序:首要針對存在外部LED、LCD Driver的運用。
3、間斷處理程序:間斷程序首要用于處理實時性要求較高的任務和事情,如,外部突發性信號的檢測,按鍵的檢測和處理,守時計數,LED閃現掃描等。
一般狀況下,間斷程序應盡或許保證代碼的簡練和短小,低功耗芯片關于不需求實時去處理的功能,能夠在間斷中設置觸發的標志,然后由主程序來實行詳細的事務――這一點非常重要,特別是關于低功耗、低速的MCU來講,有必要保證全部間斷的及時呼應。
4、關于不同任務體的安排,不同的MCU其處理的方法也有所不同:
例如,關于低速、低功耗的MCU(Fosc=32768Hz)運用,考慮到此類項目均為手持式設備和選用一般的LCD閃現,對按鍵的反響和閃現的反響要求實時性較高,因此一般選用守時刻斷的方法來處理按鍵的動作和數據的閃現;而關于高速的MCU,如Fosc》1MHz的運用,因為此時MCU有滿足的時刻來實行主程序循環體,因此能夠只在相應的間斷中設置各種觸發標志,并將全部的任務放在主程序體中來實行。
5、在MCU的程序規劃中,還需求特別注意的一點就是:
要防止在間斷和主程序體中一同拜訪或設置同一個變量或數據的狀況。有用的預防方法是,將此類數據的處理安排在一個模塊中,通過判別觸發標志來決定是否實行該數據的相關操作;而在其他的程序體中(首要是間斷),對需求進行該數據的處理的當地只設置觸發的標志。――這能夠保證數據的實行是可預知和僅有的。