單片機(jī)關(guān)鍵技術(shù)基礎(chǔ)詳解(三)
1.4 KeilC 編程
【規(guī)則14】深入了解你所用的工具。
仔細(xì)查看KeilC 附帶的幫助文件,你能找到你期待已久的東西。KeilC 是當(dāng)前最好用的單片機(jī)開發(fā)軟件。要充分利用該軟件的功能,就必須對(duì)它深入的進(jìn)行了解。
【規(guī)則15】不要使用語言的冷僻特性,并且記住,耍小聰明會(huì)貽害無窮。最重要的是編寫你理解的代碼,理解你編寫的代碼,你就可能會(huì)做得很好。
2 推薦書目
要成為一個(gè)優(yōu)秀的單片機(jī)系統(tǒng)產(chǎn)品設(shè)計(jì)工程師,興趣、熱情、責(zé)任心至關(guān)重要。
2.1 單片機(jī)技術(shù)學(xué)習(xí)
《微機(jī)原理及應(yīng)用(從16 位到32 位) 》戴梅萼等著清華大學(xué)出版社。學(xué)校教材,也是當(dāng)年我學(xué)習(xí)單片機(jī)的啟蒙書。
2.2 C51 編程學(xué)習(xí)
《單片機(jī)高級(jí)語言C51 Windows 環(huán)境編程與應(yīng)用》作者:徐愛鈞彭秀華電子工業(yè)出版社。這本書幾乎覆蓋了C51 編程的方方面面,最新版本對(duì)當(dāng)前使用最廣的keilC 也有很詳細(xì)的講述。對(duì)于剛學(xué)C51 編程的同志,本書是上上之選,強(qiáng)力推薦。比起現(xiàn)今書市上的所謂什么“C51 編程圣經(jīng)”之類的書強(qiáng)得多。
2.3 C 語言編程必讀
《C 陷阱與缺陷》Andrew Koenig 著
《C 專家編程》Peter Van Der Linden 著
C 語言開發(fā)技術(shù)經(jīng)典之作,C 程序員必讀之書,數(shù)十年來經(jīng)久不衰。如果你想對(duì)C語言全面的掌握,真正了解C 語言的精髓,這兩本書是必讀之作。由人民郵電出版社出版的中文譯本也還不錯(cuò)。
2.4 程序設(shè)計(jì)技術(shù)方面
《數(shù)據(jù)結(jié)構(gòu)》嚴(yán)蔚敏清華大學(xué)出版社。清華大學(xué)出版社的教材質(zhì)量穩(wěn)定,中規(guī)中矩,價(jià)格相對(duì)來說也便宜一點(diǎn)。
《程序設(shè)計(jì)實(shí)踐》Brian W. Kernighan Rob Pike 著;《代碼大全》
三、MCS-51單片機(jī)終端及外中斷軟件編程
MCS-51單片機(jī)有多個(gè)中斷源,以8051為例,有5個(gè)中斷源,兩個(gè)外中斷、兩個(gè)定時(shí)中斷和一個(gè)串行中斷,這一節(jié)我們討論外中斷軟件編程。
外中斷是由外部原因引起的中斷,有兩個(gè)中斷源。即外中斷0(INT0)和外中斷1(INT1),中斷請(qǐng)求信號(hào)由引腳P3.2(INT0)和P3.3(INT1)輸入。
外中斷請(qǐng)求信號(hào)有兩種方式,一是電平方式,二是脈沖方式。可通過有關(guān)控制位的定義進(jìn)行規(guī)定。
電平方式為低電平有效,只需在單片機(jī)的(INT0)和(INT1)中斷請(qǐng)求輸入端采樣到有效的低電平時(shí),就會(huì)激活外部中斷。
脈沖方式則在脈沖的后負(fù)跳沿有效,即在相鄰兩個(gè)機(jī)器周期對(duì)中斷請(qǐng)求引入端進(jìn)行采樣中,如前一次為高,后一次為低即為有效中斷請(qǐng)求。這就要求在這種中斷方式,中斷請(qǐng)求信號(hào)的脈沖寬度必須大于一個(gè)機(jī)器周期,以保證電平變化能被單片機(jī)采樣到。
定時(shí)器控制寄存器 (TCON)
外中斷請(qǐng)求方式的控制位在定時(shí)控制寄存器TCON(地址為88H)中的位88(IT0)和位8A(IT1)兩個(gè)位,當(dāng)IT0(IT1)=0為電平方式,IT0(IT1)=1為脈沖方式。同時(shí)在此寄存器中的位89(IE0)和位8B(IE1)為外中斷請(qǐng)求標(biāo)志位,當(dāng)CPU采樣到INT0(INT1)端出現(xiàn)有效中斷請(qǐng)求時(shí),此位由硬件置1。在中斷響應(yīng)完成后轉(zhuǎn)向中斷服務(wù)時(shí),再由硬件自動(dòng)清0。
下面我們對(duì)有關(guān)控制位作說明:
·EA——中斷允許總控制位,EA=0,中斷總禁止,禁止所有中斷。EA=1,中斷總允許,總允許位打開后,各中斷的允許或禁止由各中斷允許控制位設(shè)置決定。
·EX0(EX1)——外部中斷允許控制位,EX0(EX1)=0,禁止外部中斷。EX0(EX1)=1,允許外部中斷。
·ET0(ET1)——定時(shí)/計(jì)數(shù)中斷允許控制位,ET0(ET1)=0,禁止定時(shí)/計(jì)數(shù)中斷。ET0(ET1)=1,允許定時(shí)/計(jì)數(shù)中斷。
·ES——串行中斷允許控制位,ES=0,禁止串行中斷。ES=1,允許串行中斷。
中斷的允許和禁止就是中斷的開放和關(guān)閉,中斷允許就是開放中斷,中斷的禁止就是關(guān)閉中斷。從以上說明我們可看出,MCS-51的中斷允許是通過兩級(jí)控制的,以EA位作為總中斷控制位,以各中斷控制位為分控制位。當(dāng)總中斷位為禁止?fàn)顟B(tài)時(shí),不管分控制位是允許或禁止整個(gè)中斷都是禁止的。只有當(dāng)EA=1(允許)時(shí),才能由各分控制位設(shè)置各自的中斷允許與禁止。MCS-51單片機(jī)復(fù)位后,IE=00H,因此中斷處于禁止?fàn)顟B(tài)。
值得一提的是:?jiǎn)纹瑱C(jī)中斷響應(yīng)后不會(huì)自動(dòng)關(guān)閉中斷,因此在轉(zhuǎn)入中斷服務(wù)程序后,應(yīng)由軟件指令禁止中斷。
中斷優(yōu)先級(jí)控制寄存器 (IP)
MCS-51的中斷優(yōu)先級(jí)控制比較簡(jiǎn)單,只設(shè)置了高、低兩個(gè)級(jí)別的有限級(jí),各中斷源的優(yōu)先級(jí)別由優(yōu)先寄存器(IP)進(jìn)行控制。
·PX0——外中斷0(INT0)優(yōu)先級(jí)控制位。
·PT0——定時(shí)中斷0(T0)優(yōu)先級(jí)控制位。
·PX1——外中斷1(INT1)優(yōu)先級(jí)控制位。
·PT1——定時(shí)中斷1(T1)優(yōu)先級(jí)控制位。
·PS ——串行中斷(ES)優(yōu)先級(jí)控制位。
控制位=0,優(yōu)先級(jí)為低??刂莆?1,優(yōu)先級(jí)為高。
中斷優(yōu)先級(jí)是為了中斷嵌套服務(wù)的,控制原則為:
(1) 低優(yōu)先級(jí)中斷不能打斷高優(yōu)先級(jí)的中斷服務(wù),而高優(yōu)先級(jí)的中斷服務(wù)可以打斷低優(yōu)先級(jí)的中斷服務(wù)。
(2) 同級(jí)的中斷已經(jīng)響應(yīng),其他中斷將被禁止。
(3) 如果同級(jí)的多個(gè)中斷源同時(shí)出現(xiàn),CPU將按查詢次序確定哪個(gè)中斷被響應(yīng),次序?yàn)椋和庵袛?→定時(shí)中斷0→外中斷1→定時(shí)中斷1→串行中斷。
中斷控制寄存器的狀態(tài)設(shè)置
在應(yīng)用中,我們可以通過相應(yīng)的控制寄存器來使用中斷系統(tǒng),因此從使用的角度上看,這些控制寄存器是面向用戶的。這些控制寄存器既可以進(jìn)行字節(jié)尋址,也可以進(jìn)行位尋址,也就是對(duì)位狀態(tài)的尋址既可以使用字節(jié)操作指令也可以使用位操作指令,例如:
MOV IE,#81H
如使用位操作指令,也可寫為:
SETB EA
SETB EX0
對(duì)于一般的外中斷程序,我們可以這樣安排:
ORG 0000H ;主程序入口
START: AJMP MAIN
ORG 0003H ;外中斷程序入口
AJMP INT00
MAIN: MOV IE,#81H ;允許總中斷和外中斷
…… ;主程序
……
……
INT00: …… ;外中斷服務(wù)程序
……
RETI ;中斷返回
評(píng)論