滄州交通學(xué)院電子與電氣工程學(xué)院 沈 敏 張 靜 張汝峰 郭寶軍
單片機(jī)原理與應(yīng)用是高校工業(yè)自動(dòng)化、電子信息/通信工程、機(jī)電一體化、機(jī)械制造及自動(dòng)化等工科類專業(yè)的必修課。單片機(jī)是設(shè)計(jì)計(jì)算機(jī)控制系統(tǒng)常用的控制器,掌握單片機(jī)系統(tǒng)設(shè)計(jì)是大學(xué)生參加學(xué)科競賽、進(jìn)入社會(huì)參加工作的重要技能。
從教學(xué)角度出發(fā),受學(xué)時(shí)限制以及市場單片機(jī)主流產(chǎn)品等因素,多選擇CPU字長是8位的MCS-51系列單片機(jī),但是在實(shí)際應(yīng)用中有16位、32位字長的單片機(jī),有非51系列的單片機(jī)。學(xué)習(xí)單片機(jī)原理及應(yīng)用最重要不是記住幾條指令,會(huì)設(shè)置寄存器等理論知識(shí),而是抓住本質(zhì),掌握精髓,抽象出學(xué)習(xí)單片機(jī)的系統(tǒng)思維,在學(xué)會(huì)MC-51單片機(jī)的同時(shí),可以掌握任何一款單片機(jī)的使用才是學(xué)習(xí)單片機(jī)原理與應(yīng)用的根本所在。
本文以單片機(jī)原理與應(yīng)用課程內(nèi)容為基礎(chǔ),對(duì)該課程所蘊(yùn)含的系統(tǒng)思維做了研究和探索,有助于學(xué)生迅速掌握單片機(jī)系統(tǒng)設(shè)計(jì)。
單片機(jī)是一個(gè)計(jì)算機(jī)系統(tǒng),由硬件和軟件系統(tǒng)構(gòu)成。單片機(jī)系統(tǒng)設(shè)計(jì)首先要分析系統(tǒng)功能需求,根據(jù)系統(tǒng)功能需求進(jìn)行硬件系統(tǒng)設(shè)計(jì),在硬件設(shè)計(jì)基礎(chǔ)上完成軟件設(shè)計(jì)。而單片機(jī)硬件系統(tǒng)設(shè)計(jì)的前提是熟悉并掌握單片機(jī)的硬件資源及其使用,MCS-51單片機(jī)集成的硬件資源和功能如表1所示。
表1 MCS-51單片機(jī)硬件資源和功能
不同型號(hào)的單片機(jī),其硬件資源不盡相同,但都是由CPU、存儲(chǔ)器和I/O接口構(gòu)成的,在使用單片機(jī)設(shè)計(jì)系統(tǒng)的時(shí)候首先要選擇合適的單片機(jī)。
單片機(jī)CPU字長影響單片機(jī)的數(shù)據(jù)處理速度,例如MCS-51單片機(jī)的CPU字長是8位的,使用匯編語言進(jìn)行程序設(shè)計(jì)的時(shí)候要充分考慮8位CPU的數(shù)據(jù)處理能力,8位的CPU處理字節(jié)數(shù)據(jù)可以一次處理完,如果處理字?jǐn)?shù)據(jù)或雙字?jǐn)?shù)據(jù)必須兩次或四次才能處理完;如果使用C語言編程,表面上C語言在做數(shù)據(jù)處理時(shí),不同數(shù)據(jù)類型只是在定義變量的時(shí)候有區(qū)別,在數(shù)據(jù)處理的時(shí)候區(qū)別不大,但是不同字長的CPU會(huì)直接單片機(jī)的存儲(chǔ)空間、I/O資源的管理能力,更重要的是影響系統(tǒng)的響應(yīng)時(shí)間。因此在系統(tǒng)對(duì)響應(yīng)時(shí)間要求比較高的場合,CPU字長越長越好。
存儲(chǔ)器是由數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器構(gòu)成,數(shù)據(jù)存儲(chǔ)器用來存放數(shù)據(jù),程序存儲(chǔ)器用來存放程序代碼和數(shù)據(jù)表格。例如MCS-51單片機(jī)的存儲(chǔ)器有128B的RAM空間,4KB的ROM空間。以匯編語言編程為例,51單片機(jī)的大多數(shù)指令是單字節(jié)或者是雙字節(jié),個(gè)別指令是三字節(jié),4KB的ROM空間可以存放2000條指令,如果系統(tǒng)功能比較復(fù)雜,程序代碼超過2000條,在選擇單片機(jī)時(shí),ROM存儲(chǔ)空間是否夠用就顯得很重要了;如果程序設(shè)計(jì)時(shí)中斷、子程序應(yīng)用比較多,就要考慮堆??臻g初始化的問題,堆??臻g只能安排在片內(nèi)RAM中,所以選擇單片機(jī)的時(shí)候也不能忽略RAM空間是否夠用的問題。
單片機(jī)集成的I/O接口資源主要是定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)和通信接口,有些單片機(jī)還集成了A/D和D/A轉(zhuǎn)換器等。單片機(jī)I/O接口是連接I/O設(shè)備的橋梁,不同單片機(jī)型號(hào),所集成的I/O資源的種類和數(shù)量不盡相同。
時(shí)間是計(jì)算機(jī)控制系統(tǒng)中非常重要的參數(shù),很多系統(tǒng)比如常見的家用電器控制:全自動(dòng)洗衣機(jī)、電風(fēng)扇、面包機(jī)等等,主要的控制參數(shù)都是時(shí)間參數(shù),在單片機(jī)做串口通信時(shí),定時(shí)器還可以給串行通信提供必要的波特率;中斷系統(tǒng)是計(jì)算機(jī)系統(tǒng)可以實(shí)時(shí)管理多個(gè)I/O設(shè)備的重要技術(shù),CPU訪問I/O設(shè)備常見的兩種方法是查詢和中斷,當(dāng)CPU要訪問的I/O設(shè)備比較多時(shí),中斷技術(shù)中的優(yōu)先級(jí)管理和中斷嵌套使得CPU能夠高效的處理數(shù)據(jù),還能實(shí)時(shí)與I/O設(shè)備通信;串行通信接口是單片機(jī)與其他計(jì)算機(jī)系統(tǒng)通信的接口,并行接口和串行接口是單片機(jī)與I/O設(shè)備的兩種接口方式,串行通信接口是串行接口的一種,除此以外還有SPI、I2C等接口。單片機(jī)要構(gòu)成具有一定功能的系統(tǒng),通過并行接口、串行接口連接必要的外設(shè)是必不可少的,單片機(jī)要實(shí)現(xiàn)更復(fù)雜的系統(tǒng)功能,多個(gè)單片機(jī)通過串行通信的方式協(xié)同工作則是重要的途徑,通信也是解決信號(hào)遠(yuǎn)距離傳輸抗干擾的最好措施。
因此在選擇單片機(jī)的時(shí)候要考慮單片機(jī)集成的定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)、通信接口是否滿足系統(tǒng)需求。
單片機(jī)是一個(gè)計(jì)算機(jī)系統(tǒng),再加上一定的I/O設(shè)備就可以構(gòu)成一個(gè)計(jì)算機(jī)控制系統(tǒng),如圖1所示。
圖1 單片機(jī)構(gòu)成的計(jì)算機(jī)控制系統(tǒng)組成框圖
I/O設(shè)備是構(gòu)成計(jì)算機(jī)控制系統(tǒng)必要組成部分,常見的輸入設(shè)備有按鍵和傳感器,輸出設(shè)備有顯示器、電動(dòng)機(jī)、電磁閥等,選擇I/O設(shè)備時(shí)要根據(jù)計(jì)算機(jī)控制系統(tǒng)的控制需求。
按鍵可以把用戶的指令發(fā)送給單片機(jī),傳感器能夠把現(xiàn)場的非電量信號(hào)轉(zhuǎn)換成電信號(hào),轉(zhuǎn)換的電信號(hào)是模擬量電信號(hào),還需要相應(yīng)的信號(hào)處理電路,把電信號(hào)轉(zhuǎn)換成標(biāo)準(zhǔn)的電信號(hào)交給A/D轉(zhuǎn)換器。如果系統(tǒng)需要A/D轉(zhuǎn)換功能,在選擇單片機(jī)的時(shí)候要考慮選擇已經(jīng)集成A/D轉(zhuǎn)換器的單片機(jī),集成A/D轉(zhuǎn)換器的轉(zhuǎn)換位數(shù)和轉(zhuǎn)換時(shí)間以及模擬量信號(hào)輸入通道是否夠用等因素。
單片機(jī)常用的顯示器有LED發(fā)光二極管,顯示系統(tǒng)狀態(tài);LED數(shù)碼管、點(diǎn)陣顯示器、LCD顯示器等顯示數(shù)字、字母、甚至簡單的圖像等,方便用戶了解系統(tǒng)的運(yùn)行情況。選擇顯示器一方面要考慮顯示信息量的大小、復(fù)雜程度,還要考慮系統(tǒng)的應(yīng)用場合、功耗大小這些因素。
電動(dòng)機(jī)可以選擇步進(jìn)電機(jī)、伺服電機(jī)、直流電機(jī)、交流電機(jī)等實(shí)現(xiàn)對(duì)被控對(duì)象的控制,對(duì)電動(dòng)機(jī)的控制有啟動(dòng)/制動(dòng)控制、正反轉(zhuǎn)控制、速度控制等,具體控制方案是由被控對(duì)象決定的。考慮到單片機(jī)驅(qū)動(dòng)能力比較有限,選擇合適的驅(qū)動(dòng)裝置才能實(shí)現(xiàn)對(duì)輸出設(shè)備的控制。
單片機(jī)系統(tǒng)功能的實(shí)現(xiàn)是通過硬件、軟件協(xié)同工作完成的。單片機(jī)系統(tǒng)軟件設(shè)計(jì)是基于硬件設(shè)計(jì),是單片機(jī)系統(tǒng)的“靈魂”,軟件設(shè)計(jì)的思維方式中同樣蘊(yùn)含著重要的系統(tǒng)思維。
軟件設(shè)計(jì)同硬件設(shè)計(jì)一樣,都是從系統(tǒng)控制需求角度出發(fā)。根據(jù)系統(tǒng)控制需求,分析軟件輸入數(shù)據(jù)和輸出數(shù)據(jù)的數(shù)據(jù)類型(位、字節(jié)、字或是雙字)、數(shù)據(jù)性質(zhì)(有符號(hào)數(shù)還是無符號(hào)數(shù)),根據(jù)輸入/輸出數(shù)據(jù)的數(shù)量、數(shù)據(jù)類型對(duì)存儲(chǔ)空間進(jìn)行合理規(guī)劃,才能為后續(xù)確定合適的算法打下基礎(chǔ)。
單片機(jī)程序設(shè)計(jì)可以選擇使用C51語言,也可以選擇使用匯編語言,甚至可以C51與匯編語言嵌套編程。所不同的是C51語言在處理字節(jié)、字?jǐn)?shù)據(jù)的各種運(yùn)算,尤其是一些復(fù)雜數(shù)學(xué)運(yùn)算的時(shí)候比較簡單,而匯編語言在處理位數(shù)據(jù)的時(shí)候比C51語言更方便,兩種編程語言各有千秋。匯編語言生成的目標(biāo)代碼比較短小,相對(duì)執(zhí)行效率高,可以提高系統(tǒng)的響應(yīng)時(shí)間,而C51語言的程序可讀性好,可移植性好,根據(jù)系統(tǒng)功能需求選擇合適的編程語言。
無論是選擇哪種編程語言,程序在結(jié)構(gòu)上都是由主程序、子程序和中斷服務(wù)子程序構(gòu)成的。當(dāng)系統(tǒng)需要不間斷工作的時(shí)候,主程序通常需要循環(huán)運(yùn)行,也就是常說的“死循環(huán)”,子程序是通過調(diào)用才執(zhí)行,中斷服務(wù)子程序則需要硬件觸發(fā)才執(zhí)行,這兩種程序在功能上是獨(dú)立封裝的,入口參數(shù)和出口參數(shù)包含著子程序與調(diào)用程序間的接口信息。在設(shè)計(jì)軟件結(jié)構(gòu)時(shí),原則上子程序,中斷服務(wù)子程序越短越好,同時(shí)子程序的接口信息要明確。
只有合理設(shè)計(jì)軟件結(jié)構(gòu)基礎(chǔ)上才能考慮算法問題,算法并不是針對(duì)整個(gè)項(xiàng)目而言,而是針對(duì)每一個(gè)子程序,只有軟件結(jié)構(gòu)是合理的,根據(jù)輸入/輸出數(shù)據(jù)的數(shù)量、數(shù)據(jù)類型對(duì)存儲(chǔ)空間進(jìn)行合理規(guī)劃,才能找到合適的算法進(jìn)行軟件設(shè)計(jì)。關(guān)于算法,匯編語言由于數(shù)據(jù)處理能力受限于CPU字長,字節(jié)數(shù)據(jù),字?jǐn)?shù)據(jù)在同樣的數(shù)據(jù)處理需求下,其算法可能是不一樣的。
單片機(jī)系統(tǒng)設(shè)計(jì)是一個(gè)綜合性的系統(tǒng)工程,調(diào)試是保證系統(tǒng)能正常運(yùn)行的重要環(huán)節(jié)。調(diào)試有硬件調(diào)試、軟件調(diào)試和系統(tǒng)調(diào)試。Proteus仿真軟件提供了很多虛擬儀器儀表對(duì)硬件系統(tǒng)測試,是系統(tǒng)調(diào)試的有效手段,但仿真是理想的運(yùn)行環(huán)境,實(shí)際系統(tǒng)運(yùn)行環(huán)境比較復(fù)雜,系統(tǒng)調(diào)試中還需要擅長利用萬用表、示波器的物理儀器儀表對(duì)實(shí)際系統(tǒng)進(jìn)行測試,查找問題。
單片機(jī)原理及應(yīng)用是一門應(yīng)用技術(shù),單片機(jī)型號(hào)非常豐富,每種型號(hào)都有自己特征,但又都具備相同的理論基礎(chǔ)。在理論課時(shí)遠(yuǎn)多于實(shí)驗(yàn)課時(shí)的情況下,理論教學(xué)目的不單是讓學(xué)生掌握某個(gè)具體的知識(shí)點(diǎn),而是把基于單片機(jī)原理的系統(tǒng)思維方式傳遞給學(xué)生,真正做到“一通百通”、“以不變應(yīng)萬變”。