如何快速掌握一款新的MCU
任何一款MCU,其基本原理和功能都是大同小異,所不同的只是其外圍功能模塊的配置及數(shù)量、指令系統(tǒng)等。對(duì)于指令系統(tǒng),雖然形式上看似千差萬(wàn)別,但實(shí)際上只是符號(hào)的不同,其所代表的含義、所要完成的功能和尋址方式基本上是類(lèi)似的。因此,對(duì)于任何一款MCU,主要應(yīng)從如下的幾個(gè)方面來(lái)理解和掌握:
* MCU的特點(diǎn):要了解一款MCU,首先需要知道就是其ROM空間、RAM空間、IO口數(shù)量、定時(shí)器數(shù)量和定時(shí)方式、所提供的外圍功能模塊(Peripheral Circuit)、中斷源、工作電壓及功耗等等。
* 了解這些MCU Features后,接下來(lái)第一步就是將所選MCU的功能與實(shí)際項(xiàng)目開(kāi)發(fā)的要求的功能進(jìn)行對(duì)比,明確那些資源是目前所需要的,那些是本項(xiàng)目所用不到的。對(duì)于項(xiàng)目中需要用到的而所選MCU不提供的功能,則需要認(rèn)真理解MCU的相關(guān)資料,以求用間接的方法來(lái)實(shí)現(xiàn),例如,所開(kāi)發(fā)的項(xiàng)目需要與PC機(jī)COM口進(jìn)行通訊,而所選的MCU不提供UART口,則可以考慮用外部中斷的方式來(lái)實(shí)現(xiàn);
* 對(duì)于項(xiàng)目開(kāi)發(fā)需要用到的資源,則需要對(duì)其Manua*進(jìn)行認(rèn)真的理解和閱讀,而對(duì)于不需要的功能模塊則可以忽略或?yàn)g覽即可。對(duì)于MCU學(xué)習(xí)來(lái)講,應(yīng)用才是關(guān)鍵,也是最主要的目的。
* 明確了MCU的相關(guān)功能后,接下來(lái)就可以開(kāi)始編程了。對(duì)于初學(xué)者或初次使用此款MCU的設(shè)計(jì)者來(lái)說(shuō),可能會(huì)遇到很多對(duì)MCU的功能描述不明確的地方,對(duì)于此類(lèi)問(wèn)題,可以通過(guò)兩種方法來(lái)解決,一種是編寫(xiě)特別的驗(yàn)證程序來(lái)理解資料所述的功能;另一種則可以暫時(shí)忽略,程序設(shè)計(jì)中則按照自己目前的理解來(lái)編寫(xiě),留到調(diào)試時(shí)去修改和完善。前一種方法適用于時(shí)間較寬松的項(xiàng)目和初學(xué)者,而后一種方法則適合于具有一定MCU開(kāi)發(fā)經(jīng)驗(yàn)的人或項(xiàng)目進(jìn)度較緊迫的情況;
* 指令系統(tǒng)千萬(wàn)不要特別花時(shí)間去理解。指令系統(tǒng)只是一種邏輯描述的符號(hào),只有在編程時(shí)根據(jù)自己的邏輯和程序的邏輯要求來(lái)查看相關(guān)的指令即可,而且隨著編程的進(jìn)行,對(duì)指令系統(tǒng)也會(huì)越來(lái)越熟練,甚至可以不自覺(jué)地記憶下來(lái);
MCU的基本功能:
對(duì)于絕大多數(shù)MCU,下列功能是最普遍也是最基本的,針對(duì)不同的MCU,其描述的方式可能會(huì)有區(qū)別,但本質(zhì)上是基本相同的:
* Timer(定時(shí)器):Timer的種類(lèi)雖然比較多,但可歸納為兩大類(lèi):一類(lèi)是固定時(shí)間間隔的Timer,即其定時(shí)的時(shí)間是由系統(tǒng)設(shè)定的,用戶(hù)程序不可控制,系統(tǒng)只提供幾種固定的時(shí)間間隔給用戶(hù)程序進(jìn)行選擇,如32Hz,16Hz,8Hz等,此類(lèi)Timer在4位MCU中比較常見(jiàn),因此可以用來(lái)實(shí)現(xiàn)時(shí)鐘、計(jì)時(shí)等相關(guān)的功能;另一類(lèi)則是Programmable Timer(可編程定時(shí)器),顧名思義,該類(lèi)Timer的定時(shí)時(shí)間是可以由用戶(hù)的程序來(lái)控制的,控制的方式包括:時(shí)鐘源的選擇、分頻數(shù)(Prescale)選擇及預(yù)制數(shù)的設(shè)定等,有的MCU三者都同時(shí)具備,而有的則可能是其中的一種或兩種。此類(lèi)Timer應(yīng)用非常靈活,實(shí)際的使用也千變?nèi)f化,其中最常見(jiàn)的一種應(yīng)用就是用其實(shí)現(xiàn)PWM輸出(具體的應(yīng)用,后續(xù)會(huì)有特別的介紹)。由于時(shí)鐘源可以自由選擇,因此,此類(lèi)Timer一般均與Event Counter(事件計(jì)數(shù)器)合在一起;
* IO口:任何MCU都具有一定數(shù)量的IO口,沒(méi)有IO口,MCU就失去了與外部溝通的渠道。根據(jù)IO口的可配置情況,可以分為如下幾種類(lèi)型:
** 純輸入或純輸出口:此類(lèi)IO口有MCU硬件設(shè)計(jì)決定,只能是輸入或輸出,不可用軟件來(lái)進(jìn)行實(shí)時(shí)的設(shè)定;
** 直接讀寫(xiě)IO口:如MCS-51的IO口就屬于此類(lèi)IO口。當(dāng)執(zhí)行讀IO口指令時(shí),就是輸入口;當(dāng)執(zhí)行寫(xiě)IO口指令則自動(dòng)為輸出口;
** 程序編程設(shè)定輸入輸出方向的:此類(lèi)IO口的輸入或輸出由程序根據(jù)實(shí)際的需要來(lái)進(jìn)行設(shè)定,應(yīng)用比較靈活,可以實(shí)現(xiàn)一些總線級(jí)的應(yīng)用,如I2C總線,各種LCD、LED Driver的控制總線等;
** 對(duì)于IO口的使用,重要的一點(diǎn)必須牢記的是:對(duì)于輸入口,必須有明確的電平信號(hào),確保不能浮空(可以通過(guò)增加上拉或下拉電阻來(lái)實(shí)現(xiàn));而對(duì)于輸出口,其輸出的狀態(tài)電平必須考慮其外部的連接情況,應(yīng)保證在Standby或靜態(tài)狀態(tài)下不存在拉電流或灌電流。
* 外部中斷:外部中斷也是絕大多數(shù)MCU所具有的基本功能,一般用于信號(hào)的實(shí)時(shí)觸發(fā),數(shù)據(jù)采樣和狀態(tài)的檢測(cè),中斷的方式由上升沿、下降沿觸發(fā)和電平觸發(fā)幾種。外部中斷一般通過(guò)輸入口來(lái)實(shí)現(xiàn),若為IO口,則只有設(shè)為輸入時(shí)其中斷功能才會(huì)開(kāi)啟;若為輸出口,則外部中斷功能將自動(dòng)關(guān)閉(ATMEL的ATiny系列存在一些例外,輸出口時(shí)也能觸發(fā)中斷功能)。外部中斷的應(yīng)用如下:
** 外部觸發(fā)信號(hào)的檢測(cè):一種是基于實(shí)時(shí)性的要求,比如可控硅的控制,突發(fā)性信號(hào)的檢測(cè)等;而另一種情況則是省電的需要;
** 信號(hào)頻率的測(cè)量;為了保證信號(hào)不被遺漏,外部中斷是最理想的選擇;
** 數(shù)據(jù)的解碼:在遙控應(yīng)用領(lǐng)域,為了降低設(shè)計(jì)的成本,經(jīng)常需要采用軟件的方式來(lái)對(duì)各種編碼數(shù)據(jù)進(jìn)行解碼,如Manchester和PWM編碼的解碼;
** 按鍵的檢測(cè)和系統(tǒng)的喚醒:對(duì)于進(jìn)入Sleep狀態(tài)的MCU,一般需要通過(guò)外部中斷來(lái)進(jìn)行喚醒,最基本的形式則是按鍵,通過(guò)按鍵的動(dòng)作來(lái)產(chǎn)生電平的變化;
評(píng)論