MCU是Microcontroller Unit 的簡稱,,中文叫微控制器,,俗稱單片機,,是把CPU的頻率與規(guī)格做適當(dāng)縮減,并將內(nèi)存,、計數(shù)器,、USB、A/D轉(zhuǎn)換,、UART,、PLC、DMA等周邊接口,,甚至LCD驅(qū)動電路都整合在單一芯片上,,形成芯片級的計算機,為不同的應(yīng)用場合做不同組合控制,,諸如手機,、PC外圍、遙控器,,至汽車電子,、工業(yè)上的步進馬達、機器手臂的控制等,,都可見到MCU的身影,。
0 1
單片機發(fā)展簡史
單片機出現(xiàn)的歷史并不長,但發(fā)展十分迅猛,。它的產(chǎn)生與發(fā)展和微處理器(CPU)的產(chǎn)生與發(fā)展大體同步,,自1971年美國英特爾公司首先推出4位微處理器以來,它的發(fā)展到目前為止大致可分為5個階段。下面以英特爾公司的單片機發(fā)展為代表加以介紹,。
1971年~1976年
單片機發(fā)展的初級階段,。1971年11月英特爾公司首先設(shè)計出集成度為2000只晶體管/片的4位微處理器英特爾4004,并配有RAM,、 ROM和移位寄存器,, 構(gòu)成了第一臺MCS—4微處理器, 而后又推出了8位微處理器英特爾8008,, 以及其它各公司相繼推出的8位微處理器,。
1976年~1980年
低性能單片機階段。以1976年英特爾公司推出的MCS—48系列為代表,, 采用將8位CPU,、 8位并行I/O接口、8位定時/計數(shù)器,、RAM和ROM等集成于一塊半導(dǎo)體芯片上的單片結(jié)構(gòu),, 雖然其尋址范圍有限(不大于4 KB), 也沒有串行I/O,, RAM、 ROM容量小,, 中斷系統(tǒng)也較簡單,, 但功能可滿足一般工業(yè)控制和智能化儀器、儀表等的需要,。
1980年~1983年
高性能單片機階段,。這一階段推出的高性能8位單片機普遍帶有串行口,有多級中斷處理系統(tǒng),, 多個16位定時器/計數(shù)器,。片內(nèi)RAM、 ROM的容量加大,,且尋址范圍可達64 KB,,個別片內(nèi)還帶有A/D轉(zhuǎn)換接口。
1983年~80年代末
16位單片機階段,。1983年英特爾公司又推出了高性能的16位單片機MCS-96系列,,由于其采用了最新的制造工藝, 使芯片集成度高達12萬只晶體管/片,。
1990年代
單片機在集成度,、功能、速度,、可靠性,、應(yīng)用領(lǐng)域等全方位向更高水平發(fā)展。
0 2
單片機的分類及應(yīng)用
MCU按其存儲器類型可分為無片內(nèi)ROM型和帶片內(nèi)ROM型兩種,。對于無片內(nèi)ROM型的芯片,,必須外接EPROM才能應(yīng)用(典型為8031),;帶片內(nèi)ROM型的芯片又分為片內(nèi)EPROM型(典型芯片為87C51)、MASK片內(nèi)掩模ROM型(典型芯片為8051),、片內(nèi)Flash型(典型芯片為89C51)等類型,。
按用途可分為通用型和專用型;根據(jù)數(shù)據(jù)總線的寬度和一次可處理的數(shù)據(jù)字節(jié)長度可分為8,、16,、32位MCU。
目前,,國內(nèi)MCU應(yīng)用市場最廣泛的是消費電子領(lǐng)域,,其次是工業(yè)領(lǐng)域、和汽車電子市場,。消費電子包括家用電器,、電視、游戲機和音視頻系統(tǒng)等,。工業(yè)領(lǐng)域包括智能家居,、自動化、醫(yī)療應(yīng)用及新能源生成與分配等,。汽車領(lǐng)域包括汽車動力總成和安全控制系統(tǒng)等,。
0 3
單片機的基本功能
對于絕大多數(shù)MCU,下列功能是最普遍也是最基本的,,針對不同的MCU,,其描述的方式可能會有區(qū)別,但本質(zhì)上是基本相同的:
1,、TImer(定時器):TImer的種類雖然比較多,,但可歸納為兩大類:一類是固定時間間隔的TImer,即其定時的時間是由系統(tǒng)設(shè)定的,,用戶程序不可控制,,系統(tǒng)只提供幾種固定的時間間隔給用戶程序進行選擇,如32Hz,,16Hz,,8Hz等,此類TImer在4位MCU中比較常見,,因此可以用來實現(xiàn)時鐘,、計時等相關(guān)的功能。
另一類則是Programmable Timer(可編程定時器),,顧名思義,,該類Timer的定時時間是可以由用戶的程序來控制的,控制的方式包括:時鐘源的選擇、分頻數(shù)(Prescale)選擇及預(yù)制數(shù)的設(shè)定等,,有的MCU三者都同時具備,,而有的則可能是其中的一種或兩種。此類Timer應(yīng)用非常靈活,,實際的使用也千變?nèi)f化,,其中最常見的一種應(yīng)用就是用其實現(xiàn)PWM輸出。
由于時鐘源可以自由選擇,,因此,,此類Timer一般均與Event Counter(事件計數(shù)器)合在一起。
2,、IO口:任何MCU都具有一定數(shù)量的IO口,,沒有IO口,MCU就失去了與外部溝通的渠道,。根據(jù)IO口的可配置情況,,可以分為如下幾種類型:
純輸入或純輸出口:此類IO口由MCU硬件設(shè)計決定,只能是輸入或輸出,,不可用軟件來進行實時的設(shè)定,。
直接讀寫IO口:如MCS-51的IO口就屬于此類IO口。當(dāng)執(zhí)行讀IO口指令時,,就是輸入口,;當(dāng)執(zhí)行寫IO口指令則自動為輸出口。
程序編程設(shè)定輸入輸出方向的:此類IO口的輸入或輸出由程序根據(jù)實際的需要來進行設(shè)定,,應(yīng)用比較靈活,可以實現(xiàn)一些總線級的應(yīng)用,,如I2C總線,,各種LCD、LED Driver的控制總線等,。
對于IO口的使用,,重要的一點必須牢記的是:對于輸入口,必須有明確的電平信號,,確保不能浮空(可以通過增加上拉或下拉電阻來實現(xiàn)),;而對于輸出口,其輸出的狀態(tài)電平必須考慮其外部的連接情況,,應(yīng)保證在Standby或靜態(tài)狀態(tài)下不存在拉電流或灌電流,。
3、外部中斷:外部中斷也是絕大多數(shù)MCU所具有的基本功能,,一般用于信號的實時觸發(fā),,數(shù)據(jù)采樣和狀態(tài)的檢測,中斷的方式由上升沿、下降沿觸發(fā)和電平觸發(fā)幾種,。外部中斷一般通過輸入口來實現(xiàn),,若為IO口,則只有設(shè)為輸入時其中斷功能才會開啟,;若為輸出口,,則外部中斷功能將自動關(guān)閉(ATMEL的ATiny系列存在一些例外,輸出口時也能觸發(fā)中斷功能),。外部中斷的應(yīng)用如下:
外部觸發(fā)信號的檢測:一種是基于實時性的要求,,比如可控硅的控制,突發(fā)性信號的檢測等,,而另一種情況則是省電的需要,。
信號頻率的測量:為了保證信號不被遺漏,外部中斷是最理想的選擇,。
數(shù)據(jù)的解碼:在遙控應(yīng)用領(lǐng)域,,為了降低設(shè)計的成本,經(jīng)常需要采用軟件的方式來對各種編碼數(shù)據(jù)進行解碼,,如Manchester和PWM編碼的解碼,。
按鍵的檢測和系統(tǒng)的喚醒:對于進入Sleep狀態(tài)的MCU,一般需要通過外部中斷來進行喚醒,,最基本的形式則是按鍵,,通過按鍵的動作來產(chǎn)生電平的變化。
4,、通訊接口:MCU所提供的通訊接口一般包括SPI接口,,UART,I2C接口等,,其分別描述如下:
SPI接口:此類接口是絕大多數(shù)MCU都提供的一種最基本通訊方式,,其數(shù)據(jù)傳輸采用同步時鐘來控制,信號包括:SDI(串行數(shù)據(jù)輸入),、SDO(串行數(shù)據(jù)輸出),、SCLK(串行時鐘)及Ready信號;有些情況下則可能沒有Ready信號,;此類接口可以工作在Master方式或Slave方式下,,通俗說法就是看誰提供時鐘信號,提供時鐘的一方為Master,,相反的一方則為Slaver,。
UART(Universal Asynchronous Receive Transmit):屬于最基本的一種異步傳輸接口,其信號線只有Rx和Tx兩條,,基本的數(shù)據(jù)格式為:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even,, Odd or None) + Stop Bit(1~2Bit),。一位數(shù)據(jù)所占的時間稱為Baud Rate(波特率)。
對于大多數(shù)的MCU來講,,數(shù)據(jù)位的長度,、數(shù)據(jù)校驗方式(奇校驗、偶校驗或無校驗),、停止位(Stop Bit)的長度及Baud Rate是可以通過程序編程進行靈活設(shè)定,。此類接口最常用的方式就是與PC機的串口進行數(shù)據(jù)通訊。
I2C接口:I2C是由Philips開發(fā)的一種數(shù)據(jù)傳輸協(xié)議,,同樣采用2根信號來實現(xiàn):SDAT(串行數(shù)據(jù)輸入輸出)和SCLK(串行時鐘),。其最大的好處是可以在此總線上掛接多個設(shè)備,通過地址來進行識別和訪問,;I2C總線的一個最大的好處就是非常方便用軟件通過IO口來實現(xiàn),,其傳輸?shù)臄?shù)據(jù)速率完全由SCLK來控制,可快可慢,,不像UART接口,,有嚴(yán)格的速率要求。
5,、Watchdog(看門狗定時器):Watchdog也是絕大多數(shù)MCU的一種基本配置(一些4位MCU可能沒有此功能),,大多數(shù)的MCU的Watchdog只能允許程序?qū)ζ溥M行復(fù)位而不能對其關(guān)閉(有的是在程序燒入時來設(shè)定的,如Microchip PIC系列MCU),,而有的MCU則是通過特定的方式來決定其是否打開,,如Samsung的KS57系列,只要程序訪問了Watchdog寄存器,,就自動開啟且不能再被關(guān)閉,。一般而言watchdog的復(fù)位時間是可以程序來設(shè)定的。Watchdog的最基本的應(yīng)用是為MCU因為意外的故障而導(dǎo)致死機提供了一種自我恢復(fù)的能力,。
0 4
全球主流單片機制造商
?。ㄅ琶环窒群螅頌橹髁鲝S商,,如有缺少請在評論區(qū)補充)
歐美地區(qū)
1、Freescale+NXP(飛思卡爾+恩智浦):荷蘭,,主要提供16位,、32位MCU。應(yīng)用范圍:汽車電子,、LED和普通照明,、醫(yī)療保健、多媒體融合,、家電和電動工具,、樓宇自動化技術(shù)電機控制,、電源和功率轉(zhuǎn)換器、能源和智能電網(wǎng),、自動化,、計算機與通信基礎(chǔ)設(shè)施。
2,、Microchip+Atmel(微芯科技+愛特梅爾):美國,,主要提供16位、32位MCU,。應(yīng)用范圍:汽車電子,、工業(yè)用、電機控制,、汽車,、樓宇自動化、家用電器,、家庭娛樂,、工業(yè)自動化、照明,、物聯(lián)網(wǎng),、智能能源、移動電子設(shè)備,、計算機外設(shè),。
3、Cypress+Spansion(賽普拉斯+飛索半導(dǎo)體):美國,,主要提供8位,、16位、32位MCU,。應(yīng)用范圍:汽車電子,、家用電器、醫(yī)療,、消費類電子,、通信與電信、工業(yè),、無線,。
4、ADI(亞德諾半導(dǎo)體):美國,,主要提供8位,、16位、32位MCU,。應(yīng)用范圍:航空航天與國防,、汽車應(yīng)用 ,、樓宇技術(shù) 、通信 ,、消費電子 ,、能源 、醫(yī)療保健 ,、儀器儀表和測量 ,、電機、工業(yè)自動化 ,、安防,。
5、Infineon(英飛凌):德國,,主要提供16位,、32位MCU。應(yīng)用范圍:汽車電子,、消費電子,、工程、商用和農(nóng)用車輛,、數(shù)據(jù)處理,、電動交通、工業(yè)應(yīng)用,、醫(yī)療設(shè)備,、移動設(shè)備、電機控制與驅(qū)動,、電源,、面向摩托車電動自行車與小型電動車、智能電網(wǎng),、照明,、太陽能系統(tǒng)解決方案、風(fēng)能系統(tǒng)解決方案,。
6,、ST Microelectronics(意法半導(dǎo)體):意大利/法國,主要提供32位MCU,。應(yīng)用范圍:LED和普通照明,、交通運輸、醫(yī)療保健,、多媒體融合、家電和電動工具,、樓宇自動化技術(shù)電機控制,、電源和功率轉(zhuǎn)換器,、能源和智能電網(wǎng)、自動化,、計算機與通信基礎(chǔ)設(shè)施,。
7、Qualcomm(高通):美國,,主要提供16位,,32位MCU。應(yīng)用范圍:智能手機,、平板電腦,、無線調(diào)制解調(diào)器。
8,、Texas Instruments(德州儀器):美國,,主要提供16位、32位MCU,。應(yīng)用范圍:汽車電子,、消費電子、醫(yī)療設(shè)備,、移動設(shè)備,、通信。
9,、Maxim(美信):美國,,主要提供32位MCU。應(yīng)用范圍:汽車電子,、消費電子,、工業(yè)應(yīng)用、安防,。
日韓地區(qū)
1,、Renesas(瑞薩):日本,主要提供16位,、32位MCU,。應(yīng)用范圍:電腦及外設(shè)、消費類電子,、健康醫(yī)療電子,、汽車電子、工業(yè),、通信,。
2、Toshiba(東芝):日本,,主要提供16位,、32位MCU,。應(yīng)用范圍:汽車電子、工業(yè)用,、電機控制,、無線通信、移動電話,、電腦與周邊設(shè)備,、影像及音視頻、消費類(家電),、LED照明,、安全、電源管理,、娛樂設(shè)備,。
3、Fujitsu(富士通):日本,,主要提供32位MCU,。應(yīng)用范圍:汽車、醫(yī)療,、機械,,家電。
4,、Samsung Electronics(三星電子):韓國,,主要提供16位、32位MCU,。應(yīng)用范圍:汽車電子,、工業(yè)用、電機控制,、汽車,、樓宇自動化、家用電器,、家庭娛樂,、工業(yè)自動化、照明,、物聯(lián)網(wǎng),、智能能源、移動電子設(shè)備,、計算機外設(shè),。
中國地區(qū)
▍中國大陸地區(qū)
1、希格瑪微電子:主要提供32位MCU,應(yīng)用范圍:電信,、制造,、能源、交通,、電力等。
2,、珠海歐比特:主要提供32位MCU,,應(yīng)用范圍:航空航天:星箭站船、飛行器,;高端工控:嵌入式計算機,;艦船控制、工業(yè)控制,、電力設(shè)備,、環(huán)境監(jiān)控。
3,、兆易創(chuàng)新:主要提供32位MCU,,應(yīng)用范圍:工業(yè)自動化、人機界面,、電機控制,、安防監(jiān)控、智能家居,、物聯(lián)網(wǎng),。
4、晟矽微電子:主要提供8位,、32位MCU,,應(yīng)用范圍:小家電、消費類電子,、遙控器,、鼠標(biāo)、鋰電池,、數(shù)碼產(chǎn)品,、汽車電子、醫(yī)療儀器及計量,、玩具,、工業(yè)控制、智能家居及安防等領(lǐng)域,。
5,、芯海科技:主要提供16、32位MCU,,應(yīng)用范圍:儀器儀表,、物聯(lián)網(wǎng)、消費電子,、家電,、汽車電子。
6,、聯(lián)華集成電路:主要提供8位,、16位MCU,應(yīng)用范圍:消費電子,、白色家電,、工業(yè)控制、通信設(shè)備,、汽車電子,、計算機。
7,、珠海建榮:主要提供8位MCU,,應(yīng)用范圍:家用電器 、移動電源,。
8,、炬芯科技:主要提供8位至32位MCU,應(yīng)用范圍:平板電腦,、智能家居,、多媒體、藍牙,、wifi音頻,。
9、愛思科微電子:主要提供8位,、16位MCU,,應(yīng)用范圍:消費類芯片、通訊類芯片,、信息類芯片,、家電。
10,、華芯微電子:主要提供8位,、4位MCU,應(yīng)用范圍:衛(wèi)星接收器,、手機充電器,、萬年歷、多合一遙控器。
11,、上海貝嶺(華大半導(dǎo)體控股):主要提供8位,、16位、32位MCU,,應(yīng)用范圍:計算機周邊,、HDTV、電源管理,、小家電,、數(shù)字家電。
12,、海爾集成電路:主要提供14位、15位,、16位MCU,,應(yīng)用范圍:消費電子、汽車電子,、工業(yè),、智能儀表。
13,、北京君正:主要提供32位MCU,,應(yīng)用范圍:可穿戴式設(shè)備、物聯(lián)網(wǎng),、智能家電,、汽車、消費類電子,、平板電腦,。
14、中微半導(dǎo)體:主要提供8位MCU,,應(yīng)用范圍:智能家電,、汽車電子、安防監(jiān)控,、LED照明及景觀,、智能玩具、智能家居,、消費類電子,。
15、神州龍芯集成電路:主要提供32位MCU,,應(yīng)用范圍:電力監(jiān)控,、智能電網(wǎng)、工業(yè)數(shù)字控制、物聯(lián)網(wǎng),、智能家居,、數(shù)據(jù)監(jiān)控。
16,、紫光微電子:主要提供8位,、16位MCU,應(yīng)用范圍:智能家電,。
17,、時代民芯:主要提供32位MCU,應(yīng)用范圍:汽車導(dǎo)航,、交通監(jiān)控,、漁船監(jiān)管、電力電信網(wǎng)絡(luò),。
18,、華潤矽科微電子(華潤微旗下公司):主要提供8位、16位MCU,,應(yīng)用范圍:消費電子,、工業(yè)控制、家電,。
19,、國芯科技:主要提供32位MCU,應(yīng)用范圍:信息安全領(lǐng)域 ,、辦公自動化領(lǐng)域,、通訊網(wǎng)絡(luò)領(lǐng)域、 信息安全領(lǐng)域,。
20,、中天微:主要提供32位MCU,應(yīng)用范圍:智能手機,、數(shù)字電視,、機頂盒、汽車電子,、GPS,、電子閱讀器、打印機,。
21,、華潤微電子:主要提供8位、16位MCU,,應(yīng)用范圍:家電,,消費類電子,、工業(yè)自動化控制的通用控制電路。
22,、中穎電子:主要提供4位,、8位、16位,、32位MCU,,應(yīng)用范圍:家電、電機,。
23,、靈動微電子:主要提供32位,應(yīng)用范圍:電機控制,、藍牙控制,、高清顯示、無線充,、無人機,、微型打印機、智能標(biāo)簽,、電子煙、LED點陣屏等,。
24,、新唐科技:主要提供8位MCU,應(yīng)用范圍:照明,、物聯(lián)網(wǎng)等,。
25、東軟載波:主要提供8位,、32位MCU,,應(yīng)用范圍:家電、智能家居,、儀器儀表,、液晶面板控制器、工業(yè)控制等,。
26,、貝特萊:主要提供32位MCU,應(yīng)用范圍:智能家居,、工業(yè)控制以及消費類產(chǎn)品領(lǐng)域,。
27、笙泉科技:主要提供8位MCU,,應(yīng)用范圍:車用,、教育,、工控、醫(yī)療等中小型顯示面板,。
28,、航順芯片:主要提供8位、32位MCU,,應(yīng)用范圍:汽車,、物聯(lián)網(wǎng)等。
29,、復(fù)旦微電子:主要提供16位,、32位MCU,應(yīng)用范圍:智能電表,、智能門鎖等,。
30、華大半導(dǎo)體:主要提供8位,、16位,、32位MCU,應(yīng)用范圍:工業(yè)控制,、智能制造,、智慧生活及物聯(lián)網(wǎng)等。
▍中國臺灣地區(qū)
1,、宏晶科技:主要提供32位MCU,。應(yīng)用范圍:通信、工業(yè)控制,、信息家電,、語音。
2,、盛群半導(dǎo)體:主要提供8位,、32位MCU。應(yīng)用范圍:消費電子,、LED照明等,。
3、凌陽科技:主要提供8位,、16位MCU,。應(yīng)用范圍:家庭影音。
4,、中穎電子:主要提供4位,、8位MCU。應(yīng)用范圍:充電器,、移動電源,、家電,、工業(yè)控制。
5,、松翰科技:主要提供8位,、32位MCU。應(yīng)用范圍:搖控器,、智能型充電器,、大小系統(tǒng)、電子秤,、耳溫槍,、血壓計、胎壓計,、各類量測及健康器材,。
6、華邦電子:主要提供8位,、16位MCU,。應(yīng)用范圍:車用電子、工業(yè)電子,、網(wǎng)絡(luò),、計算機、消費電子,、物聯(lián)網(wǎng),。
7、十速科技:主要提供4位,、8位、51位MCU,。應(yīng)用范圍:遙控器,、小家電。
8,、佑華微電子:主要提供4位,、8位MCU。應(yīng)用范圍:錄音集成電路產(chǎn)品,、消費電子,、家用產(chǎn)品。
9,、應(yīng)廣科技單片機:主要提供4位,、8位MCU。應(yīng)用范圍:機械,、自動化,、家電,、機器人。
10,、義隆電子:主要提供8位,、16位MCU。應(yīng)用范圍:消費電子,、電腦,、智能手機。
0 5
單片機的學(xué)習(xí)竅門
任何一款MCU,,其基本原理和功能都是大同小異,,所不同的只是其外圍功能模塊的配置及數(shù)量、指令系統(tǒng)等,。
對于指令系統(tǒng),,雖然形式上看似千差萬別,但實際上只是符號的不同,,其所代表的含義,、所要完成的功能和尋址方式基本上是類似的。
要了解一款MCU,,首先需要知道就是其ROM空間,、RAM空間、IO口數(shù)量,、定時器數(shù)量和定時方式,、所提供的外圍功能模塊(Peripheral Circuit)、中斷源,、工作電壓及功耗等等,。
了解這些MCU Features后,接下來第一步就是將所選MCU的功能與實際項目開發(fā)的要求的功能進行對比,,明確哪些資源是目前所需要的,,哪些是本項目所用不到的。
對于項目中需要用到的而所選MCU不提供的功能,,則需要認(rèn)真理解MCU的相關(guān)資料,,以求用間接的方法來實現(xiàn),例如,,所開發(fā)的項目需要與PC機COM口進行通訊,,而所選的MCU不提供UART口,則可以考慮用外部中斷的方式來實現(xiàn),。
對于項目開發(fā)需要用到的資源,,則需要對其Manua*進行認(rèn)真的理解和閱讀,而對于不需要的功能模塊則可以忽略或瀏覽即可,。對于MCU學(xué)習(xí)來講,,應(yīng)用才是關(guān)鍵,,也是最主要的目的。
明確了MCU的相關(guān)功能后,,接下來就可以開始編程了,。
對于初學(xué)者或初次使用此款MCU的設(shè)計者來說,可能會遇到很多對MCU的功能描述不明確的地方,,對于此類問題,,可以通過兩種方法來解決,一種是編寫特別的驗證程序來理解資料所述的功能,;另一種則可以暫時忽略,,單片機程序設(shè)計中則按照自己目前的理解來編寫,留到調(diào)試時去修改和完善,。前一種方法適用于時間較寬松的項目和初學(xué)者,,而后一種方法則適合于具有一定單片機開發(fā)經(jīng)驗的人或項目進度較緊迫的情況。
指令系統(tǒng)千萬不要特別花時間去理解,。指令系統(tǒng)只是一種邏輯描述的符號,,只有在編程時根據(jù)自己的邏輯和程序的邏輯要求來查看相關(guān)的指令即可,而且隨著編程的進行,,對指令系統(tǒng)也會越來越熟練,,甚至可以不自覺地記憶下來。
0 6
單片機的程序編寫
MCU的程序的編寫與PC下的程序的編寫存在很大的區(qū)別,,雖然現(xiàn)在基于C的MCU開發(fā)工具越來越流行,,但對于一個高效的程序代碼和喜歡使用匯編的設(shè)計者來講,匯編語言仍然是最簡潔,、最有效的編程語言,。
對于MCU的程序編寫,其基本的框架可以說是大體一致的,,一般分為初始化部分(這是MCU程序設(shè)計與PC最大的不同),,主程序循環(huán)體和中斷處理程序三大部分,其分別說明如下:
1,、初始化:對于所有的MCU程序的設(shè)計來講,,初始化是最基本也是最重要的一步,,一般包括如下內(nèi)容:
屏蔽所有中斷并初始化堆棧指針:初始化部分一般不希望有任何中斷發(fā)生,。
清除系統(tǒng)的RAM區(qū)域和顯示Memory:雖然有時可能沒有完全的必要,但從可靠性及一致性的角度出發(fā),,特別是對于防止意外的錯誤,,還是建議養(yǎng)成良好的編程習(xí)慣。
IO口的初始化:根據(jù)項目的應(yīng)用的要求,,設(shè)定相關(guān)IO口的輸入輸出方式,,對于輸入口,,需要設(shè)定其上拉或下拉電阻;對于輸出口,,則必須設(shè)定其初始的電平輸出,,以防出現(xiàn)不必要的錯誤。
中斷的設(shè)置:對于所有項目需要用到的中斷源,,應(yīng)該給予開啟并設(shè)定中斷的觸發(fā)條件,,而對于不使用的多余的中斷,則必須給予關(guān)閉,。
其他功能模塊的初始化:對于所有需要用到的MCU的外圍功能模塊,,必須按項目的應(yīng)用的要求進行相應(yīng)的設(shè)置,如UART的通訊,,需要設(shè)定Baud Rate,,數(shù)據(jù)長度,校驗方式和Stop Bit的長度等,,而對于Programmer Timer,,則必須設(shè)置其時鐘源,分頻數(shù)及Reload Data等,。
參數(shù)的初始化:完成了MCU的硬件和資源的初始化后,,接下來就是對程序中使用到的一些變量和數(shù)據(jù)的初始化設(shè)置,這一部分的初始化需要根據(jù)具體的項目及程序的總體安排來設(shè)計,。對于一些用EEPROM來保存項目預(yù)制數(shù)的應(yīng)用來講,,建議在初始化時將相關(guān)的數(shù)據(jù)拷貝到MCU的RAM,以提高程序?qū)?shù)據(jù)的訪問速度,,同時降低系統(tǒng)的功耗(原則上,,訪問外部EEPROM都會增加電源的功耗)。
2,、主程序循環(huán)體:大多數(shù)MCU是屬于長時間不間斷運行的,,因此其主程序體基本上都是以循環(huán)的方式來設(shè)計,對于存在多種工作模式的應(yīng)用來講,,則可能存在多個循環(huán)體,,相互之間通過狀態(tài)標(biāo)志來進行轉(zhuǎn)換。對于主程序體,,一般情況下主要安排如下的模塊:
計算程序:計算程序一般比較耗時,,因此堅決反對放在任何中斷中處理,特別是乘除法運算,。
實時性要求不高或沒有實時性要求的處理程序,;
顯示傳輸程序:主要針對存在外部LED、LCD Driver的應(yīng)用。
3,、中斷處理程序:中斷程序主要用于處理實時性要求較高的任務(wù)和事件,,如,外部突發(fā)性信號的檢測,,按鍵的檢測和處理,,定時計數(shù),LED顯示掃描等,。
一般情況下,,中斷程序應(yīng)盡可能保證代碼的簡潔和短小,對于不需要實時去處理的功能,,可以在中斷中設(shè)置觸發(fā)的標(biāo)志,,然后由主程序來執(zhí)行具體的事務(wù)――這一點非常重要,特別是對于低功耗,、低速的MCU來講,,必須保證所有中斷的及時響應(yīng)。
4,、對于不同任務(wù)體的安排,,不同的MCU其處理的方法也有所不同:
例如,對于低速,、低功耗的MCU(Fosc=32768Hz)應(yīng)用,,考慮到此類項目均為手持式設(shè)備和采用普通的LCD顯示,對按鍵的反應(yīng)和顯示的反應(yīng)要求實時性較高,,因此一般采用定時中斷的方式來處理按鍵的動作和數(shù)據(jù)的顯示,;而對于高速的MCU,如Fosc》1MHz的應(yīng)用,,由于此時MCU有足夠的時間來執(zhí)行主程序循環(huán)體,,因此可以只在相應(yīng)的中斷中設(shè)置各種觸發(fā)標(biāo)志,并將所有的任務(wù)放在主程序體中來執(zhí)行,。
5,、在MCU的程序設(shè)計中,還需要特別注意的一點就是:
要防止在中斷和主程序體中同時訪問或設(shè)置同一個變量或數(shù)據(jù)的情況,。有效的預(yù)防方法是,,將此類數(shù)據(jù)的處理安排在一個模塊中,通過判斷觸發(fā)標(biāo)志來決定是否執(zhí)行該數(shù)據(jù)的相關(guān)操作,;而在其他的程序體中(主要是中斷),,對需要進行該數(shù)據(jù)的處理的地方只設(shè)置觸發(fā)的標(biāo)志。――這可以保證數(shù)據(jù)的執(zhí)行是可預(yù)知和唯一的,。
0 7
工程師對單片機編程的總結(jié)
1,、要養(yǎng)成總結(jié)的好習(xí)慣,總結(jié)不僅是對自己學(xué)習(xí)的一個總結(jié),,還是對學(xué)習(xí)過程的一個回顧與加深,,還可避免第二次犯錯。
2,、編寫程序之前先要有一個對該項目熟悉的了解,,做到心中有數(shù),列一個大致框架,。仔細(xì)推敲該怎么布局,,怎樣布局最合理,該步驟很重要,。要分析先做哪個模塊,,具體到該模塊的具體步驟,各個函數(shù)怎么命名,,與其他模塊的銜接等,。最好拿張紙記下重要過程。
3,、對于c語言的模塊化編程,,要先分好各個模塊,一個模塊一個模塊的編程,,確定一個順序,,按順序來,該模塊成功之后再編寫下一個,。對于頭文件,,當(dāng)該模塊編寫好之后再編寫該模塊的頭文件。
4,、出現(xiàn)警告不要忽視,,說明該程序一定有不合理之處,要弄清其來源,,找到解決辦法,。找來源時要有針對性,可上網(wǎng)搜一下該方面的資料,,或向別人請教,。例如,居然把另一個工程內(nèi)的main函數(shù)加入了這個工程,。還有居然函數(shù)命名重復(fù),。還有根據(jù)實驗現(xiàn)象分析原因,層層遞進,。還有端口定義時居然選錯了接口,。有時,實在解決不了就休息一下,在想也挺好的,。再簡單的地方也要注意一下,,都有可能出錯。