微控制器原理及應(yīng)用-丁筱玲04_第1頁(yè)
微控制器原理及應(yīng)用-丁筱玲04_第2頁(yè)
微控制器原理及應(yīng)用-丁筱玲04_第3頁(yè)
微控制器原理及應(yīng)用-丁筱玲04_第4頁(yè)
微控制器原理及應(yīng)用-丁筱玲04_第5頁(yè)
已閱讀5頁(yè),還剩195頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微控制器

——原理及應(yīng)用——2第四章80C51系列微控制器的功能單元4.1.1I/O接口概述4.1并行I/O接口I/O接口是CPU和外圍設(shè)備之間交換信息的連接部件,是CPU與外設(shè)之間進(jìn)行數(shù)據(jù)傳送的橋梁和紐帶。外圍設(shè)備種類(lèi)繁多,工作速度通常比CPU的速度低很多,且不同外圍設(shè)備的工作速度、信息類(lèi)型、傳送方式差別很大,因此導(dǎo)致CPU與外設(shè)之間的信息傳送十分復(fù)雜,所以CPU和外設(shè)之間必須有接口電路,通過(guò)它協(xié)調(diào)單片機(jī)與外設(shè)之間的數(shù)據(jù)傳送。3

在單片機(jī)應(yīng)用中,輸入設(shè)備通過(guò)I/O接口電路把程序、數(shù)據(jù)或現(xiàn)場(chǎng)采集到的各種信息輸入單片機(jī),單片機(jī)的處理結(jié)果和控制信息要通過(guò)I/O接口電路傳送到輸出裝置,以便顯示、打印或?qū)崿F(xiàn)各種控制。一般來(lái)說(shuō)I/O接口電路的主要功能如下。地址譯碼由譯碼器對(duì)地址進(jìn)行譯碼,選擇外圍設(shè)備,以便CPU對(duì)被尋址的外設(shè)進(jìn)行讀/寫(xiě)操作。1.I/O接口的功能42)數(shù)據(jù)緩沖和鎖存

CPU通過(guò)總線(xiàn)與多個(gè)外設(shè)打交道。但是,各輸入設(shè)備的數(shù)據(jù)線(xiàn)不能都直接與CPU的數(shù)據(jù)總線(xiàn)相連,必須經(jīng)輸入緩沖器接到數(shù)據(jù)總線(xiàn)上;否則,會(huì)出現(xiàn)幾個(gè)輸入設(shè)備同時(shí)占用數(shù)據(jù)總線(xiàn),發(fā)生“總線(xiàn)沖突”,以致CPU不能正常工作。緩沖電路便于實(shí)現(xiàn)在同一時(shí)刻CPU只與一個(gè)外設(shè)交換信息,即只有被選中的外設(shè)與CPU交換信息。單片機(jī)傳送信息的速度一般遠(yuǎn)遠(yuǎn)高于外設(shè)的工作速度。當(dāng)單片機(jī)向外設(shè)輸出信息時(shí),外設(shè)還來(lái)不及立即將信息處理完畢。例如,點(diǎn)陣式打印機(jī)打印一個(gè)字符約需10ms,而單片5機(jī)輸出一個(gè)字符只需10s左右。因此,在輸出接口電路中應(yīng)設(shè)置數(shù)據(jù)鎖存器,以便及時(shí)把CPU輸出的數(shù)據(jù)鎖存起來(lái),然后再由外設(shè)進(jìn)行處理。3)信息轉(zhuǎn)換外設(shè)送往單片機(jī)的信息應(yīng)該轉(zhuǎn)換成單片機(jī)所能接收的數(shù)字量,而單片機(jī)輸出的信息應(yīng)該轉(zhuǎn)換成外設(shè)所要求的信號(hào)。因此,I/O接口電路應(yīng)能實(shí)現(xiàn)信息的轉(zhuǎn)換。例如,串行、并行數(shù)據(jù)的互相轉(zhuǎn)換,電壓、電流的轉(zhuǎn)換,電平的轉(zhuǎn)換,模/數(shù)的轉(zhuǎn)換,數(shù)/模的轉(zhuǎn)換等。64)通信聯(lián)絡(luò)為了協(xié)調(diào)CPU與外設(shè)之間的信息交換,CPU需要通過(guò)I/O接口電路以一定的方式與外設(shè)進(jìn)行通信聯(lián)絡(luò),以保證不丟失信息。為了進(jìn)行通信聯(lián)絡(luò),I/O接口電路傳送的信息除了數(shù)據(jù)之外,還要提供外設(shè)狀態(tài)信息及CPU對(duì)外設(shè)的啟??刂菩盘?hào)等。72.接口與端口I/O接口的功能主要通過(guò)電路實(shí)現(xiàn),因此也稱(chēng)之為接口電路。在接口電路中應(yīng)該包含數(shù)據(jù)寄存器以保存輸入輸出數(shù)據(jù),狀態(tài)寄存器以保存外設(shè)的狀態(tài)信息,命令寄存器以保存來(lái)自CPU的有關(guān)數(shù)據(jù)傳送的控制命令。由于在數(shù)據(jù)的傳送中,CPU需要對(duì)這些寄存器的狀態(tài)口和保存命令的命令口尋址,因此通常把接口電路中這些已編址并能進(jìn)行讀或?qū)懖僮鞯募拇嫫鞣Q(chēng)為端口(Port),或簡(jiǎn)稱(chēng)口。因此,一個(gè)接口電路就對(duì)應(yīng)著多個(gè)端口地址,對(duì)它們像存儲(chǔ)單元一樣進(jìn)行編址。83.80C51系列微控制器端口

標(biāo)準(zhǔn)80C51系列微控制器共有4個(gè)8位的并行雙向口,有32根輸入/輸出(I/O)口線(xiàn)。各口的每一位均由鎖存器、輸出驅(qū)動(dòng)器和輸入緩沖器所組成。因?yàn)樗鼈冊(cè)诮Y(jié)構(gòu)上存在一些差異,所以各口的性質(zhì)和功能也就有了差異。下面分別介紹P0~P3這4個(gè)端口。94.1.2P0口P0口是一個(gè)多功能的8位端口,可以字節(jié)訪(fǎng)問(wèn)也可以位訪(fǎng)問(wèn),其字節(jié)訪(fǎng)問(wèn)地址為80H,位訪(fǎng)問(wèn)地址為80H~87H。P0口的各位結(jié)構(gòu)完全相同,但相互之間又是獨(dú)立的。P0口的某一位的位電路結(jié)構(gòu)圖如圖4-1所示,其中i的取值范圍為0~7。101.位電路結(jié)構(gòu)

從圖4-1可以看出,P0.i的電路包含以下內(nèi)容:(1)一個(gè)數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)鎖存。(2)兩個(gè)三態(tài)緩沖器BUF1、BUF2,分別用于緩沖鎖存器數(shù)據(jù)和引腳數(shù)據(jù);(3)一個(gè)2選1的數(shù)據(jù)選擇器MUX21,其中一個(gè)輸入來(lái)自鎖存器的端,另一個(gè)輸入為“地址/數(shù)據(jù)”信號(hào)的反相輸入,選擇控制端為“控制”。(4)數(shù)據(jù)輸出的驅(qū)動(dòng)電路和控制電路,由兩個(gè)場(chǎng)效應(yīng)管T1、T2和一個(gè)與門(mén)組成。122.工作過(guò)程分析1)P0口用作“地址/數(shù)據(jù)”總線(xiàn)

(1)當(dāng)MUX21的選擇控制端置1時(shí),選擇“地址/數(shù)據(jù)”輸出到T2,此時(shí)P0口輸出地址/數(shù)據(jù)。當(dāng)MUX21的選擇控制端“控制”置1時(shí),“地址/數(shù)據(jù)”信號(hào)控制場(chǎng)效應(yīng)管T1,而“地址/數(shù)據(jù)”信號(hào)的反相信號(hào)控制場(chǎng)效應(yīng)管T2。當(dāng)輸出的地址/數(shù)據(jù)信號(hào)為1時(shí),與門(mén)輸出為1,場(chǎng)效應(yīng)管T1導(dǎo)通,場(chǎng)效應(yīng)管T2截止,P0.i引腳輸出為1;當(dāng)輸出的地址/數(shù)據(jù)信號(hào)為0時(shí),與門(mén)輸出為0,場(chǎng)效應(yīng)管T1截止,場(chǎng)效應(yīng)管T2導(dǎo)通,P0.i引腳輸出為0。13通過(guò)上述分析可以看出,此時(shí)的輸出狀態(tài)隨地址/數(shù)據(jù)線(xiàn)變化;而且,場(chǎng)效應(yīng)管T1、T2輪流導(dǎo)通,構(gòu)成了推拉式的輸出電路,其負(fù)載能力大大增加。場(chǎng)效應(yīng)管T1起到內(nèi)部上拉電阻的作用。(2)當(dāng)MUX21的選擇控制端置0時(shí),從P0口輸入數(shù)據(jù)。真正的雙向口是具有高電平、低電平和高阻抗3種狀態(tài)的端口。顯然,此時(shí)P0口在不輸入數(shù)據(jù)時(shí)處于高阻狀態(tài),因此,P0口作為地址/數(shù)據(jù)總線(xiàn)使用時(shí)是一個(gè)真正的雙向端口,簡(jiǎn)稱(chēng)雙向口。142)

P0口用作通用I/O口當(dāng)系統(tǒng)不進(jìn)行外部程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí),即不將P0口用作系統(tǒng)的地址/數(shù)據(jù)總線(xiàn)使用時(shí),P0口可作為通用的I/O口使用。當(dāng)P0口用作通用I/O口時(shí),MUX21的選擇控制端“控制”置0,選擇端輸出到T2,同時(shí)與門(mén)輸出為0,場(chǎng)效應(yīng)管T1截止,則P0口的輸出電路為漏極開(kāi)路輸出,形成OD門(mén)。15(1)P0口輸出數(shù)據(jù)。當(dāng)P0口輸出數(shù)據(jù)時(shí),來(lái)自CPU的“寫(xiě)”脈沖加到鎖存器的CLK端,內(nèi)部總線(xiàn)上的數(shù)據(jù)寫(xiě)入鎖存器,并通過(guò)T2輸出到P0.i引腳。當(dāng)鎖存器內(nèi)的數(shù)據(jù)為1時(shí),則輸出端為0,場(chǎng)效應(yīng)管T2截止,由于輸出為漏極開(kāi)路,此時(shí)必須外接上拉電阻才能輸出1(高電平)。當(dāng)鎖存器內(nèi)的數(shù)據(jù)為0時(shí),場(chǎng)效應(yīng)管T2導(dǎo)通,P0口輸出為0(低電平)。(2)從P0口輸入數(shù)據(jù)。當(dāng)從P0口輸入數(shù)據(jù)時(shí),有兩種讀入方式:“讀引腳”和“讀鎖存器”(對(duì)應(yīng)兩種從P0口讀入數(shù)據(jù)指令)。16當(dāng)CPU發(fā)出“讀引腳”指令時(shí),鎖存器的輸出必須為1(即端輸出為0),從而使場(chǎng)效應(yīng)管T2截止,引腳的狀態(tài)經(jīng)三態(tài)緩沖器BUF2進(jìn)入內(nèi)部總線(xiàn);反之,若“讀引腳”時(shí)鎖存器的輸出為0(即端輸出為1),則場(chǎng)效應(yīng)管T2導(dǎo)通,從而使得P0.i引腳電平被鉗位在0(低電平),使輸入值1(高電平)無(wú)法讀入。此外,在場(chǎng)效應(yīng)管T2導(dǎo)通的狀態(tài)下,P0.i引腳的高電平被強(qiáng)行拉回為低電平,從而可能產(chǎn)生很大的輸入電流,將場(chǎng)效應(yīng)管T2燒毀。17當(dāng)CPU發(fā)出“讀鎖存器”指令時(shí),鎖存器內(nèi)的數(shù)據(jù)通過(guò)Q輸出端經(jīng)由三態(tài)緩沖器BUF1進(jìn)入CPU內(nèi)部總線(xiàn)。之所以會(huì)有“讀鎖存器”的指令(例如“讀-改-寫(xiě)”指令A(yù)NLP0,A),是因?yàn)椤白x鎖存器”可以避免一些錯(cuò)誤的讀操作。例如,用P0.i引腳去驅(qū)動(dòng)晶體管的基極。當(dāng)對(duì)端口P0.i寫(xiě)入值1(高電平)時(shí),引腳P0.i為高電平(已外接上拉電阻),則晶體管導(dǎo)通,該引腳被鉗位在低電平。若此時(shí)CPU立刻去讀該引腳的值,則由于晶體管導(dǎo)通,讀入CPU的值為0。顯然這個(gè)值是錯(cuò)誤的,因?yàn)殒i存器輸出的值為1。18綜上所述,P0口具有以下功能和特點(diǎn)。

(1)作為地址/數(shù)據(jù)復(fù)用總線(xiàn)使用。此時(shí),P0相當(dāng)于一個(gè)真正的雙向口,用作與外部存儲(chǔ)器的連接,配合P2口,輸出16位地址的低8位地址和輸入/輸出8位數(shù)據(jù)。當(dāng)P0口作地址/數(shù)據(jù)復(fù)用總線(xiàn)用之后,就再也不能作I/O口使用了。當(dāng)然,由于現(xiàn)在生產(chǎn)的多種80C51單片機(jī)內(nèi)部集成了足夠的ROM和RAM,所以,P0口很少用作地址/數(shù)據(jù)復(fù)用總線(xiàn),大部分情況,P0口僅用作通用I/O口。3.P0口的特點(diǎn)19

(2)作為I/O口使用。此時(shí),P0口需要外接上拉電阻,端口只有兩個(gè)狀態(tài):高電平、低電平,是一個(gè)準(zhǔn)雙向口。為了能夠從引腳讀入正確的數(shù)據(jù),當(dāng)P0口由輸出狀態(tài)轉(zhuǎn)變?yōu)檩斎霠顟B(tài)時(shí),應(yīng)首先向鎖存器P0.i寫(xiě)1(執(zhí)行指令MOVP0,#0FFH)。當(dāng)單片機(jī)復(fù)位后,鎖存器P0.i被自動(dòng)置1,可立即作輸出口使用。204.1.3P1口P1口只有一個(gè)功能:I/O口。對(duì)P1口來(lái)說(shuō),可以字節(jié)訪(fǎng)問(wèn)也可以位訪(fǎng)問(wèn),其字節(jié)訪(fǎng)問(wèn)地址為90H,位訪(fǎng)問(wèn)地址為90H~97H。P1口的各位結(jié)構(gòu)完全相同,但相互之間又是獨(dú)立的。P1口的某一位的位電路結(jié)構(gòu)圖如圖4-2所示,其中i的取值范圍為0~7。211.位電路結(jié)構(gòu)

從圖4-2可以看出,P1.i的電路包含以下內(nèi)容:(1)一個(gè)數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)鎖存。(2)兩個(gè)三態(tài)緩沖器BUF1、BUF2,分別用于緩沖鎖存器數(shù)據(jù)和引腳數(shù)據(jù)。(3)數(shù)據(jù)輸出的驅(qū)動(dòng)電路,由一個(gè)場(chǎng)效應(yīng)管T2和一個(gè)片內(nèi)上拉電阻組成。222.工作過(guò)程分析P1口只能作為通用I/O口使用。

(1)

P1口用作輸出口。CPU輸出0時(shí),D=0,=1,場(chǎng)效應(yīng)管T2導(dǎo)通,P1.i引腳被下拉為低電平,即輸出O;CPU輸出1時(shí),D=1,=0,場(chǎng)效應(yīng)管T2截止,P1.i引腳被上拉為高電平,即輸出1。23(2)

P1口用作輸入口

此時(shí)分為“讀引腳”和“讀鎖存器”兩種方式?!白x引腳”時(shí),與P0口類(lèi)似,先向P1.i位寫(xiě)1,使場(chǎng)效應(yīng)管T2截止,P1.i引腳上的輸入數(shù)據(jù)經(jīng)輸入緩沖器BUF2送入內(nèi)部總線(xiàn)。“讀鎖存器”時(shí),P1.i鎖存器的輸出端Q的狀態(tài)經(jīng)輸入緩沖器BUF1送入內(nèi)部總線(xiàn)。24

P1口由于有片內(nèi)上拉電阻,在作為輸出口時(shí),不需要在片外接上拉電阻;而且由于沒(méi)有高阻抗?fàn)顟B(tài),所以P1口是一個(gè)準(zhǔn)雙向口。為了能夠從引腳讀入正確的數(shù)據(jù),當(dāng)P1口由輸出狀態(tài)轉(zhuǎn)變?yōu)檩斎霠顟B(tài)時(shí),應(yīng)首先向鎖存器P1.i寫(xiě)1(執(zhí)行指令MOVP1,#0FFH)。當(dāng)單片機(jī)復(fù)位后,P1.i鎖存器被自動(dòng)置1,可立即作輸出口使用。3.P1口的特點(diǎn)254.1.4P2口P2口是一個(gè)多功能的8位端口,可以字節(jié)訪(fǎng)問(wèn)也可以位訪(fǎng)問(wèn),其字節(jié)訪(fǎng)問(wèn)地址為A0H,位訪(fǎng)問(wèn)地址為A0H~A7H。P2口的各位結(jié)構(gòu)完全相同,但相互之間又是獨(dú)立的。P2口的某一位的位電路結(jié)構(gòu)圖如圖4-3所示,其中i的取值范圍為0~7。261.位電路結(jié)構(gòu)

從圖4-3可以看出,P2.i的電路包含以下內(nèi)容:(1)一個(gè)數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)鎖存。(2)兩個(gè)三態(tài)緩沖器BUF1、BUF2,分別用于緩沖鎖存器數(shù)據(jù)和引腳數(shù)據(jù)。(3)一個(gè)2選1的數(shù)據(jù)選擇器MUX21,其中一個(gè)輸入來(lái)自鎖存器的Q端,另一個(gè)輸入為“地址”信號(hào),選擇控制端為“控制”。(4)數(shù)據(jù)輸出的驅(qū)動(dòng)電路和控制電路,由一個(gè)場(chǎng)效應(yīng)管T2和一個(gè)片內(nèi)上拉電阻組成。272.工作過(guò)程分析P2口有兩個(gè)功能:用作地址總線(xiàn)和通用I/O口。

(1)

P2口用作輸出16位地址總線(xiàn)的高8位地址。在內(nèi)部“控制”信號(hào)作用下,MAX21選擇“地址”輸出到反相器的輸入端。當(dāng)“地址”為0時(shí),場(chǎng)效應(yīng)管T2柵極信號(hào)為1,T2導(dǎo)通,P2.i引腳輸出0;當(dāng)“地址”為1時(shí),場(chǎng)效應(yīng)管T2截止,P2.i引腳輸出為1。28(2)

P2口用作通用I/O口。

在內(nèi)部“控制”信號(hào)作用下,MAX21選擇Q輸出到反相器的輸入端。當(dāng)CPU輸出0時(shí),Q=0,T2導(dǎo)通,P2.i引腳輸出0;當(dāng)CPU輸出1時(shí),Q=0,場(chǎng)效應(yīng)管T2截止,P2.i引腳輸出1。當(dāng)P2口用作輸入口時(shí),此時(shí)分為“讀引腳”和“讀鎖存器”兩種方式?!白x引腳”時(shí),與P0口類(lèi)似,先向P2.i位寫(xiě)1,使場(chǎng)效應(yīng)管T2截止,P2.i引腳上的輸入數(shù)據(jù)經(jīng)輸入緩沖器BUF2送入內(nèi)部總線(xiàn)。“讀鎖存器”時(shí),P2.i鎖存器的輸出端Q的狀態(tài)經(jīng)輸入緩沖器BUF1送入內(nèi)部總線(xiàn)。29當(dāng)P2口作為地址輸出線(xiàn)使用時(shí),P2口輸出16位地址線(xiàn)的高8位地址,與P0口輸出的低8位地址一起構(gòu)成16位地址,可以尋址64KB的地址空間。當(dāng)P2口作為高8位地址輸出時(shí),輸出鎖存器P2.i的內(nèi)容保持不變。當(dāng)P2作為通用I/O口使用時(shí),P2口為一個(gè)準(zhǔn)雙向口,功能與P1口相同。3.P2口的特點(diǎn)304.1.5P3口P3口是一個(gè)多功能的8位端口,可以字節(jié)訪(fǎng)問(wèn)也可以位訪(fǎng)問(wèn),其字節(jié)訪(fǎng)問(wèn)地址為B0H,位訪(fǎng)問(wèn)地址為B0H~B7H。P3口的各位結(jié)構(gòu)完全相同,但相互之間又是獨(dú)立的。P3口的某一位的位電路結(jié)構(gòu)圖如圖4-4所示,其中i的取值范圍為0~7。311.位電路結(jié)構(gòu)

從圖4-4可以看出,P3.i的電路包含以下內(nèi)容:

(1)一個(gè)數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)鎖存。

(2)

3個(gè)三態(tài)緩沖器BUF1、BUF2和BUF3,分別用于緩沖鎖存器數(shù)據(jù)、引腳數(shù)據(jù)和第二功能數(shù)據(jù)。

(3)數(shù)據(jù)輸出的驅(qū)動(dòng)電路和控制電路,由一個(gè)“與非門(mén)”、一個(gè)場(chǎng)效應(yīng)管T2和一個(gè)片內(nèi)上拉電阻組成。322.工作過(guò)程分析P3口有兩個(gè)功能:通用I/O口(第一功能)和第二輸入/輸出功能。

(1)

P3口用作通用I/O口。當(dāng)P3口用作第一功能通用輸出時(shí),“第二輸出功能”端應(yīng)置1,使“與非門(mén)”處于開(kāi)啟狀態(tài),輸出由Q端決定。當(dāng)CPU輸出0時(shí),Q=0,場(chǎng)效應(yīng)管T2導(dǎo)通,P3.i引腳輸出為0;當(dāng)CPU輸出1時(shí),Q=1,場(chǎng)效應(yīng)管T2截止,P3.i引腳輸出為1。當(dāng)P3口用作第一功能通用輸入時(shí),為了使場(chǎng)效應(yīng)管T2截止,不影響輸入電平,P3.i鎖存器和“第二輸出功能”均應(yīng)置1。33此時(shí),在“讀引腳”信號(hào)的作用下,P3.i引腳數(shù)據(jù)通過(guò)三態(tài)緩沖器BUF3、BUF2進(jìn)入內(nèi)部總線(xiàn)。與其他口類(lèi)似,在“讀鎖存器”信號(hào)的作用下,P2.i鎖存器的輸出端Q的狀態(tài)經(jīng)輸入緩沖器BUF1送入內(nèi)部總線(xiàn)。(2)

P3口用作第二輸入/輸出功能。與第一功能類(lèi)似,當(dāng)選擇第二輸出功能時(shí),P3.i鎖存器置1,使“與非門(mén)”處于開(kāi)啟狀態(tài),輸出由“第二輸出功能”端決定。當(dāng)“第二輸出功能”端輸出為0時(shí),場(chǎng)效應(yīng)管T2導(dǎo)通,P3.i引腳輸出為0;當(dāng)“第二輸出功能”端輸出為1時(shí),場(chǎng)效應(yīng)管T2截止,P3.i引腳輸出為1。34與第一功能類(lèi)似,當(dāng)選擇第二輸入功能時(shí),P3.i鎖存器和“第二輸出功能”均應(yīng)置1,保證場(chǎng)效應(yīng)管T2處于截止?fàn)顟B(tài)。此時(shí),P3.i引腳輸入的“第二功能”信息由輸入緩沖器BUF3的輸出送至內(nèi)部引線(xiàn)“第二輸入功能”。35

P3口片內(nèi)有上拉電阻,無(wú)論是第一功能——通用I/O口,還是第二功能,皆為準(zhǔn)雙向口。無(wú)論P(yáng)3口用作通用I/O口的輸入口,還是用作第二功能的輸入/輸出口,都需要將P3.i鎖存器置1。在實(shí)際應(yīng)用中,由于復(fù)位后P3.i鎖存器的初值為1,所以,P3口可以直接用作第二功能的輸入/輸出口而不需要做任何設(shè)置。由于P3口各個(gè)位相互獨(dú)立,當(dāng)某一位不作為第二功能使用時(shí),可以作為通用I/O口使用。3.P3口的特點(diǎn)36P3.0——RXD,串行輸入口。P3.1——TXD,串行輸出口。P3.2——INT0,外部中斷0的請(qǐng)求。P3.3——INT1,外部中斷1的請(qǐng)求。P3.4——T0,定時(shí)器/計(jì)數(shù)器0外部計(jì)數(shù)脈沖輸入。P3.5——T1,定時(shí)器/計(jì)數(shù)器1外部計(jì)數(shù)脈沖輸入。P3.6——WR,外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通,輸出,低電平有效。P3.7——RD,外部數(shù)據(jù)存儲(chǔ)器讀選通,輸出,低電平有效。P3口的第二功能定義如下:374.1.6并行I/O接口的編程和使用

例4.1P1口輸入/輸出的簡(jiǎn)單應(yīng)用,按鍵控制LED的點(diǎn)亮和熄滅。電路圖如圖4-5所示。38解:程序如下:

ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV P1,#80H;P1.7寫(xiě)“1”,作為輸入口線(xiàn)ST1: JB P1.7,$;檢測(cè)P1.7是否為0,是,則按鍵按下 LCALL DELAY ;延時(shí),去除按鍵抖動(dòng) JB P1.7,$;檢測(cè)P1.7是否為0,是,則確認(rèn)按鍵 ;按下39 JNBP1.7,$;檢測(cè)按鍵是否抬起 CPL P1.0 ;LED點(diǎn)亮或熄滅 SJMPST1 END404.2.1定時(shí)器/計(jì)數(shù)器概述4.2定時(shí)器/計(jì)數(shù)器

定時(shí)器/計(jì)數(shù)器(Timer/Counter)是單片機(jī)中重要的功能部件之一,其工作方式靈活、編程簡(jiǎn)單,對(duì)減輕CPU的負(fù)擔(dān)和簡(jiǎn)化外圍工作電路有重要意義。以STC89C51系列單片機(jī)為例,單片機(jī)的定時(shí)器/計(jì)數(shù)器有以下特點(diǎn):(1)

STC89C51單片機(jī)包含有2個(gè)16位的定時(shí)器/計(jì)數(shù)器:定時(shí)器/計(jì)數(shù)器T0和定時(shí)器/計(jì)數(shù)器T1。(2)

STC89C52單片機(jī)包含有3個(gè)16位的定時(shí)器/計(jì)數(shù)器:定時(shí)器/計(jì)數(shù)器T0、定時(shí)器/計(jì)數(shù)器T1和定時(shí)器/計(jì)數(shù)器T2。41(3)

定時(shí)器/計(jì)數(shù)器的核心是一個(gè)加1計(jì)數(shù)器,其基本功能是加1功能。在單片機(jī)的T0、T1或T2引腳上施加一個(gè)1到0的跳變,計(jì)數(shù)器加1,即為計(jì)數(shù)功能;在單片機(jī)內(nèi)部對(duì)機(jī)器周期或其分頻進(jìn)行計(jì)數(shù),計(jì)數(shù)值與周期的乘積,即為定時(shí)時(shí)間。在80C51系列單片機(jī)中,定時(shí)功能和計(jì)數(shù)功能的設(shè)定和控制都是通過(guò)軟件來(lái)進(jìn)行的。424.2.2定時(shí)器/計(jì)數(shù)T0、T1

定時(shí)器/計(jì)數(shù)器T0、T1的內(nèi)部結(jié)構(gòu)簡(jiǎn)圖如圖4-6所示。從圖中可以看出,定時(shí)器/計(jì)數(shù)器T0、T1由以下幾部分組成:(1)計(jì)數(shù)器TH0、TL0和TH1、TL1;(2)特殊功能寄存器TMOD和TCON;(3)時(shí)鐘分頻器;(4)輸入引腳T0、T1、INT0和INT1。1.定時(shí)器/計(jì)數(shù)器T0、T1的內(nèi)部結(jié)構(gòu)44

1)定時(shí)器/計(jì)數(shù)器T0、T1的方式寄存器(TMOD)顧名思義,80C51系列單片機(jī)定時(shí)器/計(jì)數(shù)器的方式寄存器TMOD就是用來(lái)選擇定時(shí)器/計(jì)數(shù)器的工作方式的。方式寄存器TMOD是一個(gè)逐位定義的8位寄存器,是只能字節(jié)尋址的寄存器,字節(jié)地址為89H,其格式如圖4-7所示。8位被分作了兩組,高4位定義定時(shí)器/計(jì)數(shù)器T1的工作方式,低4位定義定時(shí)器/計(jì)數(shù)器T0的工作方式。下面對(duì)TMOD的各位加以說(shuō)明。2.定時(shí)器/計(jì)數(shù)器T0、T1的特殊功能寄存器45(1)

GATE門(mén)控位。

GATE=0時(shí),僅由運(yùn)行控制位TRi(i=0,1)來(lái)控制定時(shí)器/計(jì)數(shù)器計(jì)數(shù)。

GATE=1時(shí),由外部中斷引腳INT0、INT1和TRi來(lái)控制定時(shí)器/計(jì)數(shù)器計(jì)數(shù)。當(dāng)INT0引腳為高電平時(shí),TR0置位,啟動(dòng)定時(shí)器/計(jì)數(shù)器T0計(jì)數(shù);當(dāng)INT1引腳為高電平時(shí),TR1置位來(lái)啟動(dòng)定時(shí)器/計(jì)數(shù)器T1計(jì)數(shù)。46(2)C/T——計(jì)數(shù)功能、定時(shí)功能選擇位。

C/T=0時(shí),選擇定時(shí)功能,定時(shí)器/計(jì)數(shù)器對(duì)單片機(jī)的晶振12分頻后得到的信號(hào)進(jìn)行計(jì)數(shù),以此得到定時(shí)的時(shí)間。

C/T=1時(shí),選擇計(jì)數(shù)功能,定時(shí)器/計(jì)數(shù)器對(duì)外部輸入引腳T0(P3.4)或T1(P3.5)的輸入脈沖(負(fù)跳變)計(jì)數(shù)。(3)

M1、M0——工作方式選擇位。由于有M1和M0兩位,所以有四種工作方式見(jiàn)表4-1。47

1)定時(shí)器/計(jì)數(shù)器T0、T1的控制寄存器(TCON)

80C51系列單片機(jī)定時(shí)器/計(jì)數(shù)器的控制寄存器TCON是用來(lái)控制、指示定時(shí)器/計(jì)數(shù)器的工作狀態(tài)的。控制寄存器TCON是一個(gè)逐位定義的8位寄存器,既可字節(jié)尋址,也可位尋址。字節(jié)地址為88H,位尋址的地址為88H~8FH,其格式如圖4-8所示。48下面對(duì)TCON的各位加以說(shuō)明。

(1)TF1、TF0(TCON.7、TCON.5)——定時(shí)器/計(jì)數(shù)器T1、T0的溢出標(biāo)志。當(dāng)定時(shí)器/計(jì)數(shù)器溢出時(shí),該位由內(nèi)部硬件置位。若中斷開(kāi)放,則響應(yīng)中斷,進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清0;若中斷禁止,則此位可用于查詢(xún)方式,作為狀態(tài)位供CPU查詢(xún),當(dāng)查詢(xún)有效時(shí),進(jìn)入處理程序后,及時(shí)用軟件將此位清0。(2)

TR1、TR0(TCON.6、TCON.4)——定時(shí)器/計(jì)數(shù)器T1、T0的運(yùn)行控制位。用軟件控制,置1時(shí),啟動(dòng)T1;清0時(shí),停止T1。49TCON的低4位與外部中斷有關(guān),將在后續(xù)章節(jié)中詳細(xì)討論。復(fù)位后,TCON的所有位均清0。50

3)定時(shí)器/計(jì)數(shù)器T0、T1的數(shù)據(jù)寄存器(TH1、TL1和TH0、TL0)

定時(shí)器/計(jì)數(shù)器T0、T1各有1個(gè)16位的數(shù)據(jù)寄存器,它們都是由高8位寄存器和低8位寄存器所組成的。這些寄存器不經(jīng)過(guò)緩沖,直接顯示當(dāng)前的計(jì)數(shù)值。這4個(gè)寄存器都是讀/寫(xiě)寄存器,任何時(shí)候都可對(duì)它們進(jìn)行讀/寫(xiě)操作。復(fù)位后,所有這4個(gè)寄存器全部清0。它們都只能字節(jié)尋址,相應(yīng)的字節(jié)地址見(jiàn)表4-2。51定時(shí)器/計(jì)數(shù)器T0、T1的工作模式是通過(guò)TMOD中的C/T位來(lái)選擇的。1)定時(shí)器(C/T=0)此時(shí),計(jì)數(shù)輸入信號(hào)是內(nèi)部時(shí)鐘脈沖,每個(gè)機(jī)器周期使寄存器的值加1。每個(gè)機(jī)器周期包含12個(gè)振蕩周期,故計(jì)數(shù)速率為振蕩周期的1/12。當(dāng)采用12MHz的晶體時(shí),計(jì)數(shù)速率為1MHz。定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的振蕩頻率有關(guān),與計(jì)數(shù)器的長(zhǎng)度和初值有關(guān)。3.定時(shí)器/計(jì)數(shù)器T0、T1的定時(shí)、計(jì)數(shù)模式選擇52

2)計(jì)數(shù)器(C/T=1)這時(shí),通過(guò)引腳T0(P3.4)和T1(P3.5)對(duì)外部信號(hào)進(jìn)行計(jì)數(shù)。在每個(gè)機(jī)器周期,CPU都采樣引腳的輸入電平。若前一機(jī)器周期采樣值為1,下一機(jī)器周期采樣值為0,則計(jì)數(shù)器加1,此后的機(jī)器周期,新的計(jì)數(shù)值裝入計(jì)數(shù)器,周而復(fù)始,直至計(jì)數(shù)器溢出。由此可知,在計(jì)數(shù)模式下,檢測(cè)到一個(gè)1到0的跳變(下降沿)需要2個(gè)機(jī)器周期,故最高計(jì)數(shù)頻率為振蕩頻率的1/24。53通過(guò)設(shè)置M1和M0的值,定時(shí)器/計(jì)數(shù)器T0、T1可選擇4種不同的工作方式。下面分別介紹。1)方式0當(dāng)TMOD中的M1M0=00時(shí),定時(shí)器/計(jì)數(shù)器被設(shè)置為工作方式0。這時(shí)定時(shí)器/計(jì)數(shù)器的邏輯結(jié)構(gòu)框圖如圖4-9所示。這種方式下,計(jì)數(shù)寄存器由13位組成,即TLi的高3位未用。計(jì)數(shù)時(shí),TLi的低5位溢出后向THi進(jìn)位,THi溢出后使TFi置位,并向CPU申請(qǐng)中斷。如果中斷允許,CPU響應(yīng)中斷并轉(zhuǎn)入中斷服務(wù)程序,由內(nèi)部硬件清TFi。TFi也可以由程序查詢(xún)和清0。4.定時(shí)器/計(jì)數(shù)器T0、T1的4種工作方式是否計(jì)數(shù),由GATE、INTi引腳、TRi三部分決定,一般先設(shè)定GATE位。

(1)當(dāng)GATE=0時(shí),A點(diǎn)為高電平,定時(shí)器/計(jì)數(shù)器的啟動(dòng)/停止由TRi決定。TRi=1,定時(shí)器/計(jì)數(shù)器啟動(dòng);TRi=0,定時(shí)器/計(jì)數(shù)器停止。

(2)當(dāng)GATE=1時(shí),A點(diǎn)的電位由INTi決定,因而B(niǎo)點(diǎn)的電位由TRi和INTi決定,即定時(shí)器/計(jì)數(shù)器的啟動(dòng)/停止由TRi和INTi兩個(gè)條件決定。2)方式1當(dāng)TMOD中的M1M0=01時(shí),定時(shí)器/計(jì)數(shù)器被設(shè)置為工作方式1。這時(shí)定時(shí)器/計(jì)數(shù)器的邏輯結(jié)構(gòu)框圖如圖4-10所示。這種方式下,計(jì)數(shù)寄存器由16位組成。圖4-10

定時(shí)器/計(jì)數(shù)器方式1邏輯結(jié)構(gòu)框圖計(jì)數(shù)時(shí),TLi溢出后向THi進(jìn)位,THi溢出后使TFi置位,并向CPU申請(qǐng)中斷。如果中斷允許,CPU響應(yīng)中斷并轉(zhuǎn)入中斷服務(wù)程序,由內(nèi)部硬件清TFi。TFi也可以由程序查詢(xún)和清0。其他與方式0完全相同。

3)方式2當(dāng)TMOD中的M1M0=10時(shí),定時(shí)器/計(jì)數(shù)器被設(shè)置為工作方式2。這時(shí)定時(shí)器/計(jì)數(shù)器的邏輯結(jié)構(gòu)框圖如圖4-11所示。這種方式將16位計(jì)數(shù)寄存器分為2個(gè)8位寄存器,組成一個(gè)自動(dòng)重裝載的8位計(jì)數(shù)寄存器。在方式2中,TLi作為8位計(jì)數(shù)寄存器,THi作為8位計(jì)數(shù)常數(shù)寄存器。當(dāng)TLi計(jì)數(shù)溢出時(shí),一方面將TFi置位,并向CPU申請(qǐng)中斷;另一方面,將THi的內(nèi)容自動(dòng)加載到TLi中,繼續(xù)計(jì)數(shù)。重裝載不影響THi的內(nèi)容,因而可以多次連續(xù)加載。

方式2對(duì)定時(shí)控制特別有用,它可實(shí)現(xiàn)每隔預(yù)定時(shí)間發(fā)出控制信號(hào),而且特別適合于串行口波特率發(fā)生器的使用。

4)方式3當(dāng)TMOD中的M1M0=11時(shí),定時(shí)器/計(jì)數(shù)器被設(shè)置為工作方式3。這種方式將定時(shí)器/計(jì)數(shù)器T0分為一個(gè)8位定時(shí)器/計(jì)數(shù)器和一個(gè)8位定時(shí)器,TL0用于8位定時(shí)器/計(jì)數(shù)器,TH0用于8位定時(shí)器。這時(shí)定時(shí)器/計(jì)數(shù)器T0的邏輯結(jié)構(gòu)框圖如圖4-12所示。定時(shí)器/計(jì)數(shù)器方式3下定時(shí)器/計(jì)數(shù)器T0的工作方式與方式0、1時(shí)相同,只是此時(shí)的計(jì)數(shù)器為8位計(jì)數(shù)寄存器TL0,它占用了定時(shí)器/計(jì)數(shù)器T0的GATE、、TR0、T0引腳以及中斷源等。由于定時(shí)器/計(jì)數(shù)器T0的資源已被計(jì)數(shù)寄存器TL0所占用,所以TH0只能作為定時(shí)器用,而且TH0占用了定時(shí)器/計(jì)數(shù)器T1的啟動(dòng)/停止控制位TR1、計(jì)數(shù)溢出標(biāo)志位TF1及中斷源。在定時(shí)器/計(jì)數(shù)器方式3下,定時(shí)器/計(jì)數(shù)器T1的結(jié)構(gòu)如圖4-13所示。此時(shí)定時(shí)器/計(jì)數(shù)器T1可選方式為0、1或2。因?yàn)榇藭r(shí)中斷源已被占用,所以?xún)H能作為波特率發(fā)生器或用在其他不用中斷的地方。事實(shí)上,只在定時(shí)器/計(jì)數(shù)器T1用作波特率發(fā)生器時(shí),定時(shí)器/計(jì)數(shù)器T0才選作方式3。634.2.3定時(shí)器/計(jì)數(shù)T280C52中有一個(gè)功能強(qiáng)大的定時(shí)器/計(jì)數(shù)器T2,它是一個(gè)16位的、具有自動(dòng)重裝載和捕獲能力的定時(shí)器/計(jì)數(shù)器。在定時(shí)器/計(jì)數(shù)器T2的內(nèi)部,除了兩個(gè)8位計(jì)數(shù)器TL2、TH2和控制寄存器T2CON、方式寄存器T2MOD之外,還設(shè)置有捕獲寄存器RCAP2L(低字節(jié))和RCAP2H(高字節(jié))。定時(shí)器/計(jì)數(shù)器T2的計(jì)數(shù)脈沖源可以有兩個(gè):一個(gè)是內(nèi)部機(jī)器周期,另一個(gè)是由T2(P1.0)端輸入的外部計(jì)數(shù)脈沖。輸入引腳T2(P1.0)是外部計(jì)數(shù)脈沖輸入端。輸入引腳T2EX(P1.1)是外部控制信號(hào)輸入端。64

1)定時(shí)器/計(jì)數(shù)器T2的控制寄存器(T2CON)控制寄存器T2CON是一個(gè)逐位定義的8位寄存器,既可字節(jié)尋址,也可位尋址。字節(jié)地址為0C8H,位尋址的地址為0C8H~0CFH,其格式如圖4-14所示。1.定時(shí)器/計(jì)數(shù)器T2的特殊功能寄存器下面對(duì)T2CON的各位加以說(shuō)明。

(1)

TF2——定時(shí)器/計(jì)數(shù)器T2溢出標(biāo)志。定時(shí)器/計(jì)數(shù)器T2溢出時(shí)置位,并申請(qǐng)中斷。只能軟件清除此標(biāo)志位。當(dāng)RCLK=l或TCLK=l時(shí),即T2工作在波特率發(fā)生器方式下時(shí),定時(shí)器/計(jì)數(shù)器T2的溢出不影響TF2,即TF2不置1。(2)

EXF2——定時(shí)器/計(jì)數(shù)器T2外部標(biāo)志。當(dāng)EXEN2=1,且T2EX引腳上出現(xiàn)下降沿而造成捕獲或重裝載時(shí),EXF2置位,并申請(qǐng)中斷。此時(shí)若已允許定時(shí)器/計(jì)數(shù)器T2中斷,則CPU將響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)程序。只能軟件清除此標(biāo)志位。

(3)

RCLK——接收時(shí)鐘標(biāo)志位。此標(biāo)志位由軟件置位或清0,用以選擇定時(shí)器/計(jì)數(shù)器T2或T1作串行口接收波特率發(fā)生器。RCLK=1時(shí),用定時(shí)器/計(jì)數(shù)器T2溢出脈沖作為串行口的接收時(shí)鐘;RCLK=0時(shí),用定時(shí)器/計(jì)數(shù)器T1的溢出脈沖作接收時(shí)鐘。(4)

TCLK——發(fā)送時(shí)鐘標(biāo)志位。此標(biāo)志位由軟件置位或清0,用以選擇定時(shí)器/計(jì)數(shù)器T2或T1作串行口發(fā)送波特率發(fā)生器。TCLK=l時(shí),用定時(shí)器/計(jì)數(shù)器T2溢出脈沖作為串行口的發(fā)送時(shí)鐘;TCLK=0時(shí),用定時(shí)器/計(jì)數(shù)器Tl的溢出脈沖作為串行口的發(fā)送時(shí)鐘。

(5)

EXEN2——定時(shí)器/計(jì)數(shù)器T2外部允許標(biāo)志。此標(biāo)志位由軟件置位或清0。當(dāng)EXEN2=1時(shí),允許用外部信號(hào)來(lái)觸發(fā)捕獲或重裝載操作;若定時(shí)器/計(jì)數(shù)器T2未用作串行口的波特率發(fā)生器,當(dāng)在T2EX端出現(xiàn)下降沿信號(hào)時(shí),將導(dǎo)致定時(shí)器/計(jì)數(shù)器T2捕獲或重裝載,并置EXF2標(biāo)志為1,請(qǐng)求中斷。當(dāng)EXEN2=0時(shí),禁止用外部信號(hào)來(lái)觸發(fā)捕獲或重裝載操作,即T2EX端的外部信號(hào)不起作用。(6)

TR2——定時(shí)器/計(jì)數(shù)器T2運(yùn)行控制位。此標(biāo)志位由軟件置位或清0,以決定定時(shí)器/計(jì)數(shù)器T2是否運(yùn)行。TR2=l,啟動(dòng)定時(shí)器/計(jì)數(shù)器T2;TR2=0,則停止定時(shí)器/計(jì)數(shù)器T2。

(7)

——C/T2定時(shí)器/計(jì)數(shù)器T2的定時(shí)器方式或計(jì)數(shù)器方式選擇位。此標(biāo)志位由軟件置位或清0。C/T2=0,選擇定時(shí)器工作方式;C/T2=1,選擇計(jì)數(shù)器工作方式,由下降沿觸發(fā)計(jì)數(shù)。

(8)

——CP/RL2捕獲/重裝載標(biāo)志。此標(biāo)志位由軟件置位或清0。CP/RL2=1,選擇捕獲功能,這時(shí)當(dāng)EXEN2=1且T2EX端出現(xiàn)信號(hào)下降沿時(shí),發(fā)生捕獲操作。CP/RL2=0,選擇重裝載功能,這時(shí)若定時(shí)器/計(jì)數(shù)器T2溢出或EXEN2=1,且T2EX端出現(xiàn)下降沿信號(hào),都會(huì)導(dǎo)致自動(dòng)重裝載操作。當(dāng)RCLK+TCLK=l時(shí),此控制位不起作用,定時(shí)器/計(jì)數(shù)器T2被強(qiáng)制工作于重裝載方式。重裝載發(fā)生于定時(shí)器/計(jì)數(shù)器T2溢出時(shí),常用作波特率發(fā)生器。

2)定時(shí)器/計(jì)數(shù)器T2的方式寄存器(T2MOD)當(dāng)方式寄存器T2MOD的字節(jié)地址為0C9H,不可位尋址,其格式如圖4-15所示。雖然方式寄存器T2MOD有8位,但只定義了2位,其余位保留,且復(fù)位值均為0。下面對(duì)T2MOD定義的2位加以說(shuō)明。

(1)

T2OE:定時(shí)/計(jì)數(shù)器T2輸出允許控制位。當(dāng)T2OE=1時(shí),啟動(dòng)定時(shí)器/計(jì)數(shù)器T2的可編程時(shí)鐘輸出功能,允許時(shí)鐘輸出至引腳T2(P1.0);當(dāng)T2OE=0時(shí),禁止引腳T2(P1.0)輸出。(2)

DCEN:定時(shí)/計(jì)數(shù)器T2加減計(jì)數(shù)控制位。當(dāng)DCEN=1時(shí),允許T2作為加/減計(jì)數(shù)器使用。具體的計(jì)數(shù)方向由T2EX引腳來(lái)控制,當(dāng)T2EX=1時(shí),T2進(jìn)行加計(jì)數(shù);當(dāng)T2EX=O時(shí),T2進(jìn)行減計(jì)數(shù)。DCEN=0時(shí),T2自動(dòng)加計(jì)數(shù)。

3)定時(shí)器/計(jì)數(shù)器T2的數(shù)據(jù)寄存器(TH2、TL2)定時(shí)器/計(jì)數(shù)器T2的數(shù)據(jù)寄存器是一個(gè)16位寄存器,它由高8位寄存器(TH2)和低8位寄存器(TL2)所組成,相應(yīng)的字節(jié)地址為OCDH和OCCH,只能字節(jié)尋址。這兩個(gè)寄存器都是讀/寫(xiě)寄存器。復(fù)位后,這2個(gè)寄存器全部清0。

4)定時(shí)器/計(jì)數(shù)器T2的捕獲寄存器(RCAP2H、RCAP2L)定時(shí)器/計(jì)數(shù)器T2中的捕獲寄存器是一個(gè)16位寄存器,由高8位寄存器(RCAP2H)和低8位寄存器(RCAP2L)所組成,相應(yīng)的字節(jié)地址為OCBH和OCAH,只能字節(jié)尋址。RCAP2H、RCAP2L用于捕獲計(jì)數(shù)器TL2、TH2的計(jì)數(shù)狀態(tài),或用來(lái)預(yù)置計(jì)數(shù)初值。TH2、TL2和RCAP2H、RCAP2L之間接有雙向緩沖器(三態(tài)門(mén)),用于捕獲或者重裝載。復(fù)位后,這兩個(gè)寄存器全部清0。74定時(shí)器/計(jì)數(shù)器T2的工作模式是通過(guò)T2CON中的位C/T2來(lái)選擇的。

1)定時(shí)器(C/T2=0)此時(shí),T2與T0、T1相似,計(jì)數(shù)輸入信號(hào)是內(nèi)部時(shí)鐘脈沖,計(jì)數(shù)速率為振蕩周期的1/12,即每個(gè)機(jī)器周期使(TH2、TL2)寄存器的值加1。

2)計(jì)數(shù)器(C/T2=1)這時(shí),通過(guò)引腳T2(P1.0)對(duì)外部信號(hào)進(jìn)行計(jì)數(shù),T2的工作情況和時(shí)序關(guān)系與T0、T1完全一樣,對(duì)外部計(jì)數(shù)脈沖的要2.定時(shí)器/計(jì)數(shù)器T2的定時(shí)、計(jì)數(shù)模式選擇75求也相同,即外部脈沖的最高頻率為振蕩頻率的1/24。當(dāng)有外部脈沖到來(lái)時(shí),(TH2、TL2)寄存器的值加1。76通過(guò)設(shè)置定時(shí)器/計(jì)數(shù)器T2的控制寄存器T2CON中的CP/RL2和RCLK+TCLK的值,定時(shí)器/計(jì)數(shù)器T2可選擇3種不同的工作方式(表4-3):捕獲方式、自動(dòng)重裝載方式和波特率發(fā)生器方式。3.定時(shí)器/計(jì)數(shù)器T2的3種工作方式771)自動(dòng)重裝載方式自動(dòng)重裝載方式是指在一定條件下,自動(dòng)地將RCAP2H和RCAP2L的數(shù)據(jù)裝入計(jì)數(shù)器TH2和TL2中。一般說(shuō)來(lái),RCAP2H和RCAP2L在這里起預(yù)置計(jì)數(shù)初值的功能。對(duì)于89C52,其工作的邏輯結(jié)構(gòu)框圖如圖4-16所示。當(dāng)CP/RL2=0時(shí),選擇自動(dòng)重裝載方式。重裝載操作在下述兩種情況下發(fā)生:(1)當(dāng)定時(shí)器/計(jì)數(shù)器T2的寄存器(TH2、TL2)溢出時(shí),打開(kāi)重裝載三態(tài)緩沖器,把(RCAP2H、RCAP2L)的內(nèi)容自動(dòng)裝載到(TH2、TL2)中(重裝載操作)。同時(shí),溢出標(biāo)志TF2置1,申請(qǐng)中斷。79(2)當(dāng)EXEN2=1且端口T2EX(P1.1)出現(xiàn)下降沿信號(hào)時(shí),將發(fā)生重裝載操作。同時(shí),標(biāo)志位EXF2置1,申請(qǐng)中斷。若定時(shí)器/計(jì)數(shù)器T2的中斷是被允許的,則無(wú)論發(fā)生TF2=1還是EXF2=1,CPU都會(huì)響應(yīng)中斷,此中斷向量的地址為2BH。響應(yīng)中斷后,應(yīng)采用軟件方式撤除中斷申請(qǐng),以正確地響應(yīng)新的中斷。TF2和EXF2都是直接可尋址位,可采用指令“CLRTF2”和“CLREXF2”撤除中斷申請(qǐng)。802)捕獲方式捕獲方式是指在一定條件下,自動(dòng)將計(jì)數(shù)器TH2和TL2的數(shù)據(jù)讀入RCAP2H和RCAP2L,即TH2和TL2內(nèi)容的捕獲是通過(guò)捕獲寄存器RCAP2H和RCAP2L來(lái)實(shí)現(xiàn)的。對(duì)于89C52,其工作的邏輯結(jié)構(gòu)框圖如圖4-17所示。81

當(dāng)CP/RL2=1時(shí),選擇捕獲方式。中斷和捕獲操作在下述兩種情況下發(fā)生:(1)當(dāng)定時(shí)器/計(jì)數(shù)器T2的寄存器(TH2、TL2)溢出時(shí),溢出標(biāo)志TF2置1,申請(qǐng)中斷。(2)當(dāng)EXEN2=1且端口T2EX(P1.1)出現(xiàn)下降沿信號(hào)時(shí),打開(kāi)捕獲三態(tài)緩沖器,把(TH2、TL2)的內(nèi)容自動(dòng)讀入到(RCAP2H、RCAP2L)中(捕獲操作)。同時(shí)標(biāo)志位EXF2置1,申請(qǐng)中斷。

若定時(shí)器/計(jì)數(shù)器T2的中斷是被允許的,則無(wú)論發(fā)生TF2=1還是EXF2=1,CPU都會(huì)響應(yīng)中斷,此中斷向量的地址為2BH。響應(yīng)中斷后,應(yīng)采用軟件方式撤除中斷申請(qǐng),以正確地82響應(yīng)新的中斷。TF2和EXF2都是直接可尋址位,可采用指令“CLRTF2”和“CLREXF2”撤除中斷申請(qǐng)。833)波特率發(fā)生器方式當(dāng)T2CON中的RCLK+TCLK=1時(shí),定時(shí)器/計(jì)數(shù)器T2將工作于波特率發(fā)生器方式,即其溢出脈沖用作串行口的時(shí)鐘。定時(shí)器/計(jì)數(shù)器T2的波特率發(fā)生器方式下的邏輯結(jié)構(gòu)框圖如圖4-18所示。在T2CON中,RCLK選擇串行通信接收波特率發(fā)生器,TCLK選擇串行通信發(fā)送波特率發(fā)生器。因此,發(fā)送和接收的波特率可以不同。此時(shí),定時(shí)器/計(jì)數(shù)器T2的輸入時(shí)鐘脈沖可由內(nèi)部時(shí)鐘電路決定,也可由外部時(shí)鐘電路決定。(1)若C/T2=0,選用內(nèi)部時(shí)鐘,計(jì)數(shù)脈沖的頻率為振蕩器頻率的1/2。圖4-18

波特率發(fā)生器方式邏輯結(jié)構(gòu)框圖85(2)若C/T2=1,選用外部時(shí)鐘,該時(shí)鐘由T2(P1.0)端輸入,每當(dāng)外部信號(hào)產(chǎn)生下降沿時(shí),計(jì)數(shù)器值加1。外部脈沖頻率不超過(guò)振蕩器頻率的1/24。由于脈沖溢出時(shí),RCAP2H、RCAP2L的內(nèi)容會(huì)自動(dòng)裝載到TH2、TL2中,故波特率的值還決定于RCAP2H、RCAP2L的裝載初值。

RCLK+TCLK還用于選擇定時(shí)器/計(jì)數(shù)器T1還是T2作串行通信的波特率發(fā)生器。由圖4-18可看出,這兩位的值用來(lái)控制兩個(gè)電子開(kāi)關(guān)的位置。值為0時(shí),選用定時(shí)器/計(jì)數(shù)器T1作波特率發(fā)生器;值為1時(shí),選用定時(shí)器/計(jì)數(shù)器T2作波特率發(fā)生器。86

當(dāng)定時(shí)器/計(jì)數(shù)器T2用作波特率發(fā)生器時(shí),TH2的溢出不會(huì)使TF2置位,即不會(huì)產(chǎn)生中斷請(qǐng)求。因此,可以不禁止中斷。當(dāng)定時(shí)器/計(jì)數(shù)器T2用作波特率發(fā)生器時(shí),若EXEN2置1,則端口T2EX的信號(hào)產(chǎn)生下降沿時(shí),EXF2將置1,但不會(huì)發(fā)生重裝載或捕獲操作。這時(shí),端口T2EX可以作為一個(gè)額外的外部中斷源。在波特率發(fā)生器工作方式下,在T2計(jì)數(shù)過(guò)程中(即在TR2=1之后),不能再讀/寫(xiě)TH2、TL2的內(nèi)容。如果讀,則讀出的結(jié)果不會(huì)精確(因?yàn)槊總€(gè)狀態(tài)加1);如果寫(xiě),則會(huì)影響T2的溢出而使波特率不穩(wěn)定。在T2計(jì)數(shù)過(guò)程中,可以讀出但不能87改寫(xiě)RCAP2H、RCAP2L的內(nèi)容。若需要訪(fǎng)問(wèn)RCAP2H、RCAP2L,則應(yīng)事先關(guān)閉定時(shí)器。884.2.4定時(shí)器/計(jì)數(shù)器的編程和使用

在定時(shí)器/計(jì)數(shù)器的4種工作方式中,方式0與方式1基本相同,只是計(jì)數(shù)器位數(shù)不同:方式0為13位計(jì)數(shù)器,方式1為16位計(jì)數(shù)器。方式0的存在是為了兼容MCS-48,而且方式0的計(jì)數(shù)初值計(jì)算麻煩,所以在實(shí)際使用中,一般不使用方式0,而使用方式1。89

例4.2設(shè)晶振頻率fosc=6MHz,使用定時(shí)器/計(jì)數(shù)器T1以方式1產(chǎn)生周期為2ms的方波脈沖,并由P1.0輸出,如圖4-19所示。試以中斷方式實(shí)現(xiàn)。90

解:方波的周期用定時(shí)器T1來(lái)確定,即在T1中設(shè)置一個(gè)初值,在初值的基礎(chǔ)上進(jìn)行計(jì)數(shù),每隔1ms計(jì)數(shù)器T1溢出一次,即產(chǎn)生一次中斷。CPU響應(yīng)中斷后,在中斷服務(wù)程序中對(duì)P1.0取反。

(1)

TMOD確定。TMOD取值如圖4-20所示。圖4-20TMOD取值91(2)計(jì)算計(jì)數(shù)器的計(jì)數(shù)初值。要產(chǎn)生2ms的方波脈沖,只需在P1.0端以1ms為間隔,交替輸出高低電平即可實(shí)現(xiàn)。為此,定時(shí)間應(yīng)為1ms。晶振頻率fosc=6MHz,則一個(gè)機(jī)器周期為2s,設(shè)待求計(jì)數(shù)初值為X,則其中:t為定時(shí)時(shí)間,L為計(jì)數(shù)器位數(shù),X為計(jì)數(shù)初值,tc為計(jì)數(shù)周期。

1000×10-6=(216-X)×2×10-6即500=216-X

X=216-500=10000H-1F4H92

X=216-500=10000H-1F4H

=0FE0CH=1111111000001100B所以,初值為T(mén)H1=0FEH,TL1=0CH。

(3)采用中斷方式。編程時(shí)打開(kāi)全局和局部中斷。設(shè)置EA=1,ET1=1,以允許T1中斷。

(4)定時(shí)器的啟動(dòng)。由定時(shí)器控制寄存器TCON中的TR1位控制定時(shí)器的啟動(dòng)和停止。

TR1=1,啟動(dòng);TR1=0,停止。(5)程序設(shè)計(jì)。中斷服務(wù)程序除了產(chǎn)生方波以外,還需將計(jì)數(shù)初值重新裝入計(jì)數(shù)器,以便產(chǎn)生方波序列。93程序如下:

ORG 0000H LJMP MAIN ;主程序入口

ORG 001BH LJMP INTT1 ;T1中斷入口

ORG 0030HMAIN: MOV SP,#60H ;修改堆棧指針

MOV TMOD,#10H ;T1為方式1 MOV TH1,#0FEH ;設(shè)置計(jì)數(shù)初值

MOV TL1,#0CH94 SETB EA ;允許中斷

SETB ET1 ;允許T1中斷 SETB TR1 ;啟動(dòng)T1 SJMP $ ;等待中斷INTT1: MOV TH1,#0FEH ;重新設(shè)置初值

MOV TL1,#0CH CPL P1.0 ;定時(shí)1ms時(shí)間到,輸出取反 RETI END95

例4.3設(shè)晶振頻率fosc=6MHz,使用定時(shí)器/計(jì)數(shù)器T0以方式2產(chǎn)生周期為400s的方波脈沖,并由P1.0輸出,如圖4-21所示。試以中斷方式實(shí)現(xiàn)。圖4-21

在P1.0引腳上輸出的波形96

解:方波的周期用定時(shí)器T0來(lái)確定,即在T0中設(shè)置一個(gè)初值,在初值的的基礎(chǔ)上進(jìn)行計(jì)數(shù),每隔200μs計(jì)數(shù)器T0溢出一次,即產(chǎn)生一次中斷。CPU響應(yīng)中斷后,在中斷服務(wù)程序中對(duì)P1.0取反。

(1)

TMOD確定。TMOD取值如圖4-22所示。圖4-22TMOD取值97(2)計(jì)算計(jì)數(shù)器的計(jì)數(shù)初值。要產(chǎn)生400μs的方波脈沖,只需在P1.0端以200μs為間隔,交替輸出高低電平即可實(shí)現(xiàn)。為此,定時(shí)間應(yīng)為200μs。晶振頻率fosc=6MHz,則一個(gè)機(jī)器周期為2μs,設(shè)待求計(jì)數(shù)初值為X,則

200×10-6=(28-X)×2×10-6即100=28-XX=28-100=100H-64H=9CH=10011100B所以,初值為T(mén)H0=9CH,TL0=9CH。

(3)采用中斷方式。編程時(shí)打開(kāi)全局和局部中斷。設(shè)置EA=1,ET0=1,以允許T0中斷。98

(4)定時(shí)器的啟動(dòng)。由定時(shí)器控制寄存器TCON中的TR0位控制定時(shí)器的啟動(dòng)和停止。

TR0=1,啟動(dòng);TR0=0,停止。(5)程序設(shè)計(jì)。中斷服務(wù)程序只需產(chǎn)生方波方波序列即可。程序如下:

ORG 0000H LJMP MAIN ;主程序入口

ORG 000BH LJMP INTT0 ;T1中斷入口

ORG 0030H99MAIN: MOV SP,#60H ;修改堆棧指針

MOV TMOD,#02H ;T0為方式2 MOV TH0,#9CH ;設(shè)置計(jì)數(shù)初值

MOV TL0,#9CH SETB EA ;允許中斷

SETB ET0 ;允許T0中斷

SETB TR0 ;啟動(dòng)T0 SJMP $ ;等待中斷INTT0:100 CPL P1.0 ;定時(shí)200s時(shí)間到,輸出取反

RETI END101

例4.4門(mén)控制位GATE的應(yīng)用——測(cè)量脈沖寬度。下面以T1為例,介紹門(mén)控制位GATE的應(yīng)用。門(mén)控制位GATE可使定時(shí)器/計(jì)數(shù)器T1的啟動(dòng)計(jì)數(shù)受INT1的控制,當(dāng)GATE=1,TR1=1時(shí),只有INT1引腳輸入高電平時(shí),T1才被允許計(jì)數(shù),利用GATE位的這一功能(對(duì)于T0的GATE位也是一樣,可使T0的啟動(dòng)計(jì)數(shù)受INT0的控制),可測(cè)量INT1引腳(P3.3)上正脈沖的寬度(機(jī)器周期數(shù)),其方法如圖4-23所示。圖4-23利用GATE位測(cè)量正脈沖的寬度102參考程序如下:

ORG 0000H LJMP MAIN ;復(fù)位入口轉(zhuǎn)主程序

ORG 0030HMAIN: MOV SP,#60H MOV TMOD,#90H ;向TMOD寫(xiě)控制字,T1為方式

;1定時(shí),GATE=1 MOV TL1,#00H MOV TH1,#00H JB P3.3,$ ;等待降低103

SETB TR1 ;如果為低,啟動(dòng)T1,計(jì)數(shù)器

;開(kāi)始計(jì)數(shù)

JNB P3.3,$ ;等待升高

JB P3.3,$ ;為高,等待降低

CLR TR1 ;停止T1計(jì)數(shù)

MOV A,TL1 ;T1計(jì)數(shù)值送A …執(zhí)行以上程序,使引腳上出現(xiàn)的正脈沖寬度以機(jī)器周期數(shù)的形式顯示在顯示器上。1044.3中斷系統(tǒng)

中斷系統(tǒng)在單片機(jī)系統(tǒng)中起著十分重要的作用。一個(gè)功能很強(qiáng)的中斷系統(tǒng),能大大提高單片機(jī)處理事件的能力,提高效率,增強(qiáng)實(shí)時(shí)性。80C51系列微控制器(單片機(jī))的中斷功能較強(qiáng),共設(shè)有6個(gè)中斷源,6個(gè)中斷矢量:T0、T1、T2、、和一個(gè)串行通信中斷矢量。有兩級(jí)中斷優(yōu)先級(jí),可實(shí)現(xiàn)兩級(jí)中斷嵌套。用戶(hù)可以很方便地通過(guò)軟件實(shí)現(xiàn)對(duì)中斷的控制。1054.3.1中斷系統(tǒng)概述

程序執(zhí)行過(guò)程中,允許外部或內(nèi)部事件通過(guò)硬件中斷程序的執(zhí)行,使其轉(zhuǎn)向處理外部或內(nèi)部事件的中斷服務(wù)程序中;完成中斷服務(wù)程序后,CPU繼續(xù)原來(lái)被打斷的程序,這樣的過(guò)程稱(chēng)為中斷。中斷響應(yīng)和處理過(guò)程如圖4-24所示。1.中斷1062.中斷源

能產(chǎn)生中斷的外部和內(nèi)部事件稱(chēng)為中斷源,如鍵盤(pán)中斷、A/D轉(zhuǎn)換器中斷(當(dāng)A/D轉(zhuǎn)換器結(jié)束模擬量到數(shù)字量的轉(zhuǎn)換而產(chǎn)生的中斷)、定時(shí)中斷(定時(shí)器/計(jì)數(shù)器產(chǎn)生的中斷)、程序性中斷(為調(diào)試程序而設(shè)置斷點(diǎn)、單步工作等)。對(duì)于每個(gè)中斷源,不僅要求能發(fā)出中斷請(qǐng)求信號(hào),還要求這個(gè)信號(hào)能保持一定的時(shí)間,直至CPU響應(yīng)這個(gè)中斷請(qǐng)求后才能且必須撤銷(xiāo)這個(gè)中斷請(qǐng)求信號(hào)。這樣既不會(huì)因CPU未及時(shí)響應(yīng)而丟失中斷申請(qǐng)信號(hào),也不會(huì)出現(xiàn)多次重復(fù)中斷的情況。1073.中斷優(yōu)先級(jí)

幾個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),或者CPU正在處理某外部事件時(shí),又有另一外部事件申請(qǐng)中斷,CPU必須區(qū)分哪個(gè)中斷源更重要,從而確定優(yōu)先處理哪個(gè)中斷源,這就是中斷優(yōu)先級(jí)問(wèn)題。就后者來(lái)說(shuō),優(yōu)先級(jí)高的事件可以中斷CPU正在處理的低級(jí)的中斷服務(wù)程序,待完成了高級(jí)中斷服務(wù)程序之后,再繼續(xù)被中斷的低級(jí)中斷服務(wù)程序。在80C51系列微控制器中,只有兩級(jí)中斷優(yōu)先級(jí)。圖4-25是80C51系列微控制器的中斷系統(tǒng)結(jié)構(gòu)示意圖。圖4-25

80C51系列微控制器的中斷系統(tǒng)結(jié)構(gòu)示意圖1094.3.2中斷的控制和操作80C51系列微控制器中有5個(gè)中斷源。80C52系列微控制器中增加了一個(gè)定時(shí)器/計(jì)數(shù)器T2中斷源,即有6個(gè)中斷源。80C52的6個(gè)中斷源如下。

(1)(P3.2)——外部中斷0。當(dāng)IT0(TCON.0)=0時(shí),低電平有效;當(dāng)ITO(TCON.0)=1時(shí),下降沿有效。

(2)(P3.3)——外部中斷1。當(dāng)IT0(TCON.2)=0時(shí),低電平有效;當(dāng)IT1(TCON.2)=1時(shí),下降沿有效。

(3)

TF0(P3.4)——定時(shí)器/計(jì)數(shù)器T0溢出中斷。1.80C52系列微控制器中斷源110(4)

TF1(P3.5)——定時(shí)器/計(jì)數(shù)器T1溢出中斷。

(5)

RI,TI——串行中斷。

(6)

TF2、EXF2——定時(shí)器/計(jì)數(shù)器T2溢出中斷。微控制器各中斷源提出的中斷申請(qǐng),如果得到微控制器的中斷響應(yīng),則會(huì)自動(dòng)轉(zhuǎn)入各自固定的中斷入口地址(中斷矢量)見(jiàn)表4-4。1112.中斷標(biāo)志INT0、INT1、T0及T1的中斷標(biāo)志存放在定時(shí)器/計(jì)數(shù)器控制寄存器TCON中,串行口的中斷標(biāo)志存放在串行口控制寄存器SCON中,T2的中斷標(biāo)志存放在定時(shí)器/計(jì)數(shù)器T2的控制寄存器T2CON中。

TCON寄存器字節(jié)地址為88H,其格式如圖4-26所示。圖4-26定時(shí)器/計(jì)數(shù)器控制寄存器TCON格式112SCON寄存器字節(jié)地址為98H,其格式如圖4-27所示。圖4-27串行口控制寄存器SCON格式T2CON寄存器字節(jié)地址為0C8H,其格式如圖4-28所示。圖4-28定時(shí)器/計(jì)數(shù)器控制寄存器T2CON格式113

下面對(duì)中斷標(biāo)志及控制位的各位加以說(shuō)明。(1)

TF2(T2CON.7)——定時(shí)器/計(jì)數(shù)器T2溢出標(biāo)志。定時(shí)器/計(jì)數(shù)器T2溢出時(shí)置位,并申請(qǐng)中斷。響應(yīng)中斷后需用軟件清0。(2)

EXF2(T2CON.6)——定時(shí)器/計(jì)數(shù)器T2外部標(biāo)志。當(dāng)EXEN2=1,且T2EX引腳上出現(xiàn)下降沿而造成捕獲或重裝載時(shí),EXF2置位,并申請(qǐng)中斷。響應(yīng)中斷后需用軟件清0。(3)

TF1(TCON.7)——定時(shí)器/計(jì)數(shù)器T1溢出標(biāo)志。硬件置位,響應(yīng)中斷后硬件清0。不用中斷時(shí),需用軟件清0。(4)

TF0(TCON.5)——定時(shí)器/計(jì)數(shù)器T0溢出標(biāo)志。硬件置位,響應(yīng)中斷后硬件清0。不用中斷時(shí),需用軟件清0。114

下面對(duì)中斷標(biāo)志及控制位的各位加以說(shuō)明。(1)

TF2(T2CON.7)——定時(shí)器/計(jì)數(shù)器T2溢出標(biāo)志。定時(shí)器/計(jì)數(shù)器T2溢出時(shí)置位,并申請(qǐng)中斷。響應(yīng)中斷后需用軟件清0。(2)

EXF2(T2CON.6)——定時(shí)器/計(jì)數(shù)器T2外部標(biāo)志。當(dāng)EXEN2=1,且T2EX引腳上出現(xiàn)下降沿而造成捕獲或重裝載時(shí),EXF2置位,并申請(qǐng)中斷。響應(yīng)中斷后需用軟件清0。(3)

TF1(TCON.7)——定時(shí)器/計(jì)數(shù)器T1溢出標(biāo)志。硬件置位,響應(yīng)中斷后硬件清0。不用中斷時(shí),需用軟件清0。(4)

TF0(TCON.5)——定時(shí)器/計(jì)數(shù)器T0溢出標(biāo)志。硬件置位,響應(yīng)中斷后硬件清0。不用中斷時(shí),需用軟件清0。115(5)

IE1(TCON.3)——外部中斷請(qǐng)求1的中斷標(biāo)志。IE1=1時(shí),INT1向CPU申請(qǐng)中斷。

(6)

IE0(TCON.1)——外部中斷請(qǐng)求0的中斷標(biāo)志。IE0=1時(shí),INT0向CPU申請(qǐng)中斷。

(7)

TI(SCON.1)——串行口發(fā)送中斷標(biāo)志。發(fā)送完一幀,硬件置位。響應(yīng)中斷后需用軟件清0。

(8)

RI(SCON.0)——串行口接收中斷標(biāo)志。接收完一幀,硬件置位。響應(yīng)中斷后需用軟件清0。

(9)

IT1(TCON.2)——外部中斷請(qǐng)求觸發(fā)方式控制位。

IT1=0,電平觸發(fā)方式,引腳上的外部中斷請(qǐng)求輸入信號(hào)為低電平有效,并使IT1置位。進(jìn)入中斷服務(wù)程序后,由硬116件自動(dòng)將IE1清0。IT1=1,下降沿觸發(fā)方式,引腳上的外部中斷請(qǐng)求輸入信號(hào)電平從高到低的跳變有效,并使IT1置位。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)將IE1清0。

(10)

IT0(TCON.0)——外部中斷請(qǐng)求觸發(fā)方式控制位。

IT0=0,電平觸發(fā)方式,引腳上的外部中斷請(qǐng)求輸入信號(hào)為低電平有效,并使IT0置位。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)將IE0清0。

IT0=1,下降沿觸發(fā)方式,引腳上的外部中斷請(qǐng)求輸入信號(hào)電平從高到低的跳變有效,并使IT0置位。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)將IE0清0。1173.中斷允許控制

中斷允許和禁止由中斷允許寄存器控制。中斷允許寄存器IE是一個(gè)逐位定義的8位寄存器,既可字節(jié)尋址,也可位尋址。字節(jié)地址為0A8H,位尋址的地址為0A8H~0AFH。其格式如圖4-29所示。圖4-29中斷允許寄存器IE格式

中斷中斷允許寄存器IE中的各位為0時(shí),禁止相應(yīng)中斷;為1時(shí),允許相應(yīng)中斷。系統(tǒng)復(fù)位后,中斷允許寄存器IE中各位均為0,即此時(shí)禁止所有中斷。下面對(duì)IE的各位加以說(shuō)明。118EX0(IE.0)——外部中斷0中斷允許位。ET0(IE.1)——定時(shí)器/計(jì)數(shù)器T0中斷允許位。EX1(IE.2)——外部中斷1中斷允許位。ET1(IE.3)——定時(shí)器/計(jì)數(shù)器T1中斷允許位。ES(IE.4)——串行口中斷允許位。ET2(IE.5)——定時(shí)器/計(jì)數(shù)器T2中斷允許位。EA(IE.7)——CPU中斷允許位(中斷總允許位)。EA=1時(shí),開(kāi)放所有中斷;EA=0時(shí),屏蔽所有中斷。1194.中斷優(yōu)先級(jí)

在80C51系列單片機(jī)中有高、低兩個(gè)中斷優(yōu)先級(jí),通過(guò)中斷優(yōu)先級(jí)寄存器IP來(lái)設(shè)定。中斷優(yōu)先級(jí)寄存器IP是一個(gè)逐位定義的8位寄存器,既可字節(jié)尋址,也可位尋址。字節(jié)地址為0B8H,位尋址的地址為0B8H~0BFH。其格式如圖4-30所示。

中斷中斷優(yōu)先級(jí)寄存器IP中的各位為0時(shí),相應(yīng)中斷為低優(yōu)先級(jí);為1時(shí),相應(yīng)中斷為高優(yōu)先級(jí)。系統(tǒng)復(fù)位后,IP寄存器中各位均為0,即此時(shí)全部中斷設(shè)定為低優(yōu)先級(jí)。圖4-30中斷優(yōu)先級(jí)寄存器IP格式120PX0(IP.0)——外部中斷0中斷優(yōu)先級(jí)控制位。PT0(IP.1)——定時(shí)器/計(jì)數(shù)器T0中斷優(yōu)先級(jí)控制位。PX1(IP.2)——外部中斷1中斷優(yōu)先級(jí)控制位。PT1(IE.3)——定時(shí)器/計(jì)數(shù)器T1中斷優(yōu)先級(jí)控制位。PS(IP.4)——串行口中斷優(yōu)先級(jí)控制位。PT2(IP.5)——定時(shí)器/計(jì)數(shù)器T2中斷優(yōu)先級(jí)控制位。下面對(duì)IP的各位加以說(shuō)明。

在中斷執(zhí)行過(guò)程中,所有允許的高優(yōu)先級(jí)中斷可以中斷低優(yōu)先級(jí)中斷的執(zhí)行過(guò)程。同級(jí)的中斷不能相互中斷。幾個(gè)同級(jí)的中斷源同時(shí)向CPU121申請(qǐng)中斷時(shí),CPU按硬件次序排定優(yōu)先權(quán),即依次為INT0、T0、INT1、T1、串行口和T2。1224.3.3中斷過(guò)程

中斷請(qǐng)求就是中斷源向CPU申請(qǐng)中斷的過(guò)程,即建立中斷請(qǐng)求標(biāo)志位IE0、IE1、TF0、TF1、TF2/EXF2、TI/RI的過(guò)程。

1)外部中斷請(qǐng)求外部中斷源INT0、INT0經(jīng)由引腳P3.2、P3.3向CPU申請(qǐng)中斷。外部中斷請(qǐng)求有兩種方式:電平觸發(fā)方式和下降沿觸發(fā)方式。通過(guò)設(shè)置觸發(fā)方式控制位IT0、IT1進(jìn)行選擇。對(duì)于定時(shí)器/計(jì)數(shù)器T2的控制端T2EX來(lái)說(shuō),只有下降沿觸發(fā)方式1.中斷請(qǐng)求123,控制端T2EX的下降沿經(jīng)由引腳P1.1向CPU申請(qǐng)中斷。(1)電平觸發(fā)方式。若外部中斷定義為電平觸發(fā)方式,外部中斷請(qǐng)求觸發(fā)器的狀態(tài)隨著CPU在每個(gè)機(jī)器周期采樣到的外部中斷源輸入線(xiàn)的電平變化而變化,這能提高CPU對(duì)外部中斷請(qǐng)求的響應(yīng)速度,但是也存在缺陷。這是因?yàn)樵陔娖接|發(fā)方式,單片機(jī)不鎖存電平觸發(fā)中斷請(qǐng)求信號(hào),會(huì)把每個(gè)機(jī)器周期采樣到的外部中斷源輸入線(xiàn)上的邏輯電平直接賦值給中斷標(biāo)志寄存器。當(dāng)中斷請(qǐng)求被阻塞而沒(méi)有得到及時(shí)響應(yīng)時(shí),將會(huì)被丟失。所以,要使電平觸發(fā)的中斷被CPU響應(yīng)并執(zhí)行,必須保證外部中斷源輸入線(xiàn)上的低電平維持到中斷被執(zhí)行為止。124當(dāng)外部中斷源被設(shè)定為電平觸發(fā)方式時(shí),在中斷服務(wù)程序返回之前,外部中斷請(qǐng)求輸入必須無(wú)效(即外部中斷請(qǐng)求為高電平),否則,CPU返回主程序后會(huì)再次響應(yīng)中斷。所以,在電平觸發(fā)方式,需要CPU能夠清除外部中斷請(qǐng)求源。(2)下降沿觸發(fā)方式。當(dāng)CPU在一個(gè)機(jī)器周期中檢測(cè)到中斷源輸入線(xiàn)上的電平為高電平,下一個(gè)機(jī)器周期檢測(cè)到低電平,即電平信號(hào)有一個(gè)從高到低的跳變時(shí),CPU即置位中斷標(biāo)志,申請(qǐng)中斷。所以,為確保檢測(cè)到下降沿,中斷源輸入線(xiàn)上的高電平和低電平應(yīng)至少各自保持一個(gè)機(jī)器周期。當(dāng)中斷標(biāo)志寄存器鎖存下降沿中斷請(qǐng)求信號(hào)后,直到CPU響應(yīng)中斷并進(jìn)入中斷服務(wù)程序時(shí),才由硬件自動(dòng)清除。因此,在下降沿觸發(fā)125方式,當(dāng)CPU正在執(zhí)行同級(jí)或高級(jí)中斷時(shí),產(chǎn)生的外部中斷同樣會(huì)被記錄到中斷標(biāo)志寄存器中。在同級(jí)或高級(jí)中斷執(zhí)行完畢后,該中斷將被響應(yīng)并執(zhí)行。外部中斷請(qǐng)求標(biāo)志存放在IE0、IE1中。

IE0為INT0中斷請(qǐng)求標(biāo)志位,當(dāng)INT0有中斷請(qǐng)求時(shí)IE0置位,在CPU響應(yīng)中斷后,由硬件將IE0清0。

IE1為INT1中斷請(qǐng)求標(biāo)志位,當(dāng)INT1有中斷請(qǐng)求時(shí)IE1置位,在CPU響應(yīng)中斷后,由硬件將IE1清0。對(duì)于定時(shí)器/計(jì)數(shù)器T2的外部標(biāo)志EXF2來(lái)說(shuō),當(dāng)T2EX的下降沿來(lái)臨,且EXEN2置位時(shí),則置位EXF2并申請(qǐng)中斷。在CPU響應(yīng)中斷后,只能由軟件將EXF2清0。126

2)內(nèi)部中斷請(qǐng)求當(dāng)定時(shí)器/計(jì)數(shù)器T0計(jì)數(shù)產(chǎn)生溢出時(shí),由硬件置位TF0。當(dāng)CPU響應(yīng)中斷后,再由硬件將TF0清0。當(dāng)定時(shí)器/計(jì)數(shù)器T1計(jì)數(shù)產(chǎn)生溢出時(shí),由硬件置位TF1。當(dāng)CPU響應(yīng)中斷后,再由硬件將TF1清0。當(dāng)定時(shí)器/計(jì)數(shù)器T2計(jì)數(shù)產(chǎn)生溢出時(shí),由硬件置位TF2。當(dāng)CPU響應(yīng)中斷后,只能由軟件將TF2清0。對(duì)于串行口中斷來(lái)說(shuō),有兩個(gè)標(biāo)志位:TI、RI。當(dāng)串行口發(fā)送完一個(gè)字節(jié)數(shù)據(jù)后,置位TI;當(dāng)串行口接收完一個(gè)字節(jié)數(shù)據(jù)后,置位RI。CPU響應(yīng)中斷后,只能由軟件將TI、RI清0。1272.中斷響應(yīng)CPU對(duì)中斷請(qǐng)求進(jìn)行判斷,形成中斷矢量,轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序的過(guò)程稱(chēng)為中斷響應(yīng)。只有滿(mǎn)足規(guī)定要求的中斷請(qǐng)求才能被CPU響應(yīng)。

1)

CPU響應(yīng)中斷的基本條件一個(gè)中斷源的中斷申請(qǐng)被響應(yīng),需滿(mǎn)足以下基本條件。有中斷源提出中斷申請(qǐng)。中斷總允許位EA=1,即CPU開(kāi)放中斷。申請(qǐng)中斷的中斷源的中斷允許位為1,即開(kāi)放中斷源。CPU沒(méi)有響應(yīng)同級(jí)或更高優(yōu)先級(jí)的中斷。當(dāng)前指令執(zhí)行結(jié)束。128如果正在執(zhí)行的指令是RETI或是訪(fǎng)問(wèn)IE、IP指令,則CPU在執(zhí)行RETI或訪(fǎng)問(wèn)IE、IP指令后,至少還要再執(zhí)行一條其他指令后才會(huì)響應(yīng)中斷請(qǐng)求。在接收中斷申請(qǐng)時(shí),如遇下列情況,硬件生成的長(zhǎng)調(diào)用指令“LCALL”將被封鎖:

(1)正在執(zhí)行同級(jí)或高優(yōu)先級(jí)的中斷服務(wù)程序。

(2)所查詢(xún)的機(jī)器周期不是執(zhí)行當(dāng)前指令的最后一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論