《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 電子元件 > 業(yè)界動態(tài) > 不可或缺的MCU

不可或缺的MCU

2020-12-03
來源:芯路芯語
關(guān)鍵詞: MCU 單片機

  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)象分析原因,層層遞進,。還有端口定義時居然選錯了接口,。有時,實在解決不了就休息一下,在想也挺好的,。再簡單的地方也要注意一下,,都有可能出錯。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。