單片機(jī)原理、接口及應(yīng)用:第4章 并行接口P0~P3和單片機(jī)的中斷系統(tǒng)_第1頁(yè)
單片機(jī)原理、接口及應(yīng)用:第4章 并行接口P0~P3和單片機(jī)的中斷系統(tǒng)_第2頁(yè)
單片機(jī)原理、接口及應(yīng)用:第4章 并行接口P0~P3和單片機(jī)的中斷系統(tǒng)_第3頁(yè)
單片機(jī)原理、接口及應(yīng)用:第4章 并行接口P0~P3和單片機(jī)的中斷系統(tǒng)_第4頁(yè)
單片機(jī)原理、接口及應(yīng)用:第4章 并行接口P0~P3和單片機(jī)的中斷系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第4章 并行接口P0P3和單片機(jī)的中斷系統(tǒng)單片機(jī)原理、接口及應(yīng)用單片機(jī)的并行接口P0P3 POP3端口的功能和內(nèi)部結(jié)構(gòu) POP3端口的編程 用并行口設(shè)計(jì)LED數(shù)碼顯示和鍵盤電路 并行接口小結(jié)MCS-51單片機(jī)的中斷系統(tǒng) 中斷的基本概念 中斷的系統(tǒng)結(jié)構(gòu) 中斷的響應(yīng)過(guò)程 中斷的的應(yīng)用編程小結(jié)內(nèi)容提要 由于CPU的數(shù)據(jù)線是外設(shè)或存貯器和CPU進(jìn)行數(shù)據(jù)傳輸?shù)奈ㄒ还餐ǖ溃瑸榱耸箶?shù)據(jù)線的使用對(duì)象不產(chǎn)生使用總線的沖突,以及快速的CPU和慢速的外設(shè)時(shí)間上協(xié)調(diào),CPU和外設(shè)之間必須有接口電路(簡(jiǎn)稱接口或I/O口),接口起著緩沖、鎖存數(shù)據(jù),地址譯碼、信息格式轉(zhuǎn)換、傳遞狀態(tài)(外設(shè)狀態(tài)),發(fā)布命令等 功能。 I/O

2、接口有并行接口、串行接口、定時(shí)/計(jì)數(shù)器、A/D、/D/A等,根據(jù)外設(shè)的不同情況和要求選擇不同的接口。本章介紹并行接口,用于和外設(shè)的并行數(shù)據(jù)通信。4.1單片機(jī)的并行接口接口P0P3 MCS-51單片機(jī)有P0、P1、P2、P3四個(gè)8位雙向I/O口,每個(gè)端口可以按字節(jié)輸入或輸出,也可以按位進(jìn)行輸入或輸出,四個(gè)口共32根口線,用作位控制十分方便。P0口為三態(tài)雙向口,能帶8個(gè)TTL電路;P1、P2、P3口為準(zhǔn)雙向口,負(fù)載能力為4個(gè)TTL電路。4.1.1 POP3端口的功能和內(nèi)部結(jié)構(gòu) 4.1.1.1 POP3接口功能 大多數(shù)口線都有雙重功能,具體介紹如下:PO口1.作為輸入/輸出口。 2.作為地址/數(shù)據(jù)總

3、線 ,接外圍芯片時(shí)PO口分時(shí)輸出低 8 位地址與數(shù)據(jù)信號(hào)。P1口1.作為輸入/輸出口。 2.在增強(qiáng)型(52系列)和ISP型(在系統(tǒng)編程型)中有如下功能: P1.0 T2引腳,定時(shí)/計(jì)數(shù)器2外部計(jì)數(shù)脈沖輸入 P1.1 T2EX引腳,定時(shí)/計(jì)數(shù)器2觸發(fā)和方向控制 P1.5 MOSI引腳,在系統(tǒng)編程數(shù)據(jù)輸入 P1.6 MISO引腳,在系統(tǒng)編程數(shù)據(jù)輸出 P1.7 SCK引腳,在系統(tǒng)編程時(shí)鐘輸入P2口 1.作為輸入/輸出口。 2.作為高8位地址總線。 P3口P3口為雙功能 1.作第一功能使用時(shí),其功能為輸入/輸出口。 2.作第二功能使用時(shí),每一位功能定義如下表所示: RD (外部數(shù)據(jù)存儲(chǔ)器讀選通信號(hào)輸入

4、) P3.7 WR (外部數(shù)據(jù)存儲(chǔ)器寫選通信號(hào)輸入)P3.6 T1 (定時(shí)器1外部計(jì)數(shù)脈沖輸入)P3.5 T0 (定時(shí)器0外部計(jì)數(shù)脈沖輸入)P3.4 P3.3 P3.2 TXD (串行輸出線)P3.1 RXD (串行輸入線) P3.0 第 二 功 能 端口引腳 INT0(外部中斷0輸入線)INT1 (外部中斷1輸入線) 4.1.1.2 端口的內(nèi)部結(jié)構(gòu) 四個(gè)端口的一位結(jié)構(gòu)見圖5.1,同一個(gè)端口的各位具有相同的結(jié)構(gòu)。由圖可見,四個(gè)端口的 結(jié)構(gòu)有相同之處: 依據(jù)每個(gè)端口的不同功能,內(nèi)部結(jié)構(gòu)亦有不同之處,以下重點(diǎn)介紹不同之處。 都有兩個(gè)輸入緩沖器,分別受內(nèi)部讀鎖存器和讀引腳控制信號(hào)的控制。 都有鎖存器

5、(即專用寄存器POP3) 都是場(chǎng)效應(yīng)管輸出驅(qū)動(dòng)。1.PO口 PO口的輸出驅(qū)動(dòng)電路由上拉場(chǎng)效應(yīng)管T1和驅(qū)動(dòng)場(chǎng)效應(yīng)T2組成,控制電路包括一個(gè)與門, 一個(gè)非門和一個(gè)模擬開關(guān)MUX。Q PO作I/O口使用 CPU發(fā)控制電平“0”封鎖與門,使T1管截止,同時(shí)使MUX開關(guān)同下面的觸點(diǎn)接通,使鎖存器的 Q 與T2柵極接通。 當(dāng)CPU向端口輸出數(shù)據(jù)時(shí),寫脈沖加在鎖存器的 CL上、內(nèi)部總線的數(shù)據(jù)經(jīng)反相,再經(jīng)T2管反相,PO口的這一位引腳上出現(xiàn)正好和內(nèi)部總線同相的數(shù)據(jù)。由于輸出驅(qū)動(dòng)級(jí)是漏極開路電路(因T1截止),在作I/O口使用時(shí)應(yīng)外接10K的上拉電阻。 當(dāng)輸入操作時(shí),端口中兩個(gè)三態(tài)緩沖器用于讀操作。緩沖器2用于

6、讀端口引腳的數(shù)據(jù)。當(dāng)執(zhí)行端口讀指令時(shí),讀引腳脈沖打開三態(tài)緩沖器2,于是端口引腳數(shù)據(jù)經(jīng)三態(tài)緩沖器2送到內(nèi)部總線。緩沖器1用于讀取鎖存器Q端的數(shù)據(jù)。當(dāng)執(zhí)行“讀-修改-寫”指令(即讀端口信息,在片內(nèi)加以運(yùn)算修改后,再輸出到該端口的某些指令如:ANL P0,A指令),即是讀的鎖存器Q的數(shù)據(jù)。 這是為了避免錯(cuò)讀引腳的電平信號(hào),例如用一根口線去驅(qū)動(dòng)一個(gè)晶體管基極,當(dāng)向口線寫“1”,晶體管導(dǎo)通,導(dǎo)通的PN結(jié)會(huì)把引腳的電平拉低,如讀引腳數(shù)據(jù),則會(huì)讀為0 ,而實(shí)際上原口線的數(shù)據(jù)為1。因而采用讀鎖存器Q的值而避免了錯(cuò)讀。究竟是讀引腳還是讀 鎖存器,CPU內(nèi)部會(huì)自行判斷是發(fā)讀引腳脈沖還是讀鎖存器脈沖,讀者不必在意。

7、 應(yīng)注意 ,當(dāng)作輸入端口使用時(shí),應(yīng)先對(duì)該口寫入“1”使場(chǎng)效應(yīng)管T2截止,再進(jìn)行讀入操作,以防場(chǎng)效應(yīng)管處于導(dǎo)通狀態(tài),使引腳箝位到零,而引起誤讀。 當(dāng)PO口作地址/數(shù)據(jù)線使用時(shí),CPU及內(nèi)部控制信號(hào)為“1”,轉(zhuǎn)換開關(guān)MUX打向上面的觸點(diǎn), 使反相器的輸出端和T2管柵極接通,輸出的地址或數(shù)據(jù)信號(hào)通過(guò)與門驅(qū)動(dòng)T1管,同時(shí)通過(guò)反相器驅(qū)動(dòng)T2管完成信息傳送,數(shù)據(jù)輸入時(shí),通過(guò)緩沖器進(jìn)入內(nèi)部總線。 P1口作通用I/O口使用,因電路結(jié)構(gòu)上輸出驅(qū)動(dòng)部分接有上拉電阻。當(dāng)作輸入時(shí),同PO一樣, 要先對(duì)該口寫“1”。 Q2.P1口 P1口的結(jié)構(gòu)見下圖3.P2口 P2口的位結(jié)構(gòu)比P1多了一個(gè)轉(zhuǎn)換控制部分,當(dāng)P2口作通用I

8、/O口時(shí),多路開關(guān)MUX倒向左; 當(dāng)擴(kuò)展片外存貯器時(shí),MUX開關(guān)打向右,P2口作高八位地址線輸出高八位地址信號(hào)。 其MUX的的倒向是受CPU內(nèi)部控制的。 應(yīng)當(dāng)注意:當(dāng)P2口的幾位作地址線使用時(shí),剩下的P2口線不能作I /O口線使用。 4.P3口 P3口 P3口為雙功能I/O口,內(nèi)部結(jié)構(gòu)中增加了第二輸入/輸出功能。 當(dāng)作為普通I/O口使用時(shí),第二輸出功能端保持“1”,打開與非門3,用法同P1口。 當(dāng)作第二功能輸出時(shí),鎖存器輸出為“1”打開與非門3,第二功能內(nèi)容通過(guò)與非門3和T送至引腳。 輸入時(shí),引腳的第二功能信號(hào)通過(guò)三態(tài)緩沖器4進(jìn)入第二輸入功能端。兩種功能的引腳輸入都應(yīng)使T截止,此時(shí)第 二輸出功

9、能端和鎖存器輸出端Q均為高電平。 P3的各位如不設(shè)定為第二功能則自動(dòng)處于第一功能,在更多情況下,根據(jù)需要, 把幾條口線設(shè)為第二功能,剩下的口線可作第一功能(I/O)使用,此時(shí),宜采用位操作形式 。 歸納四個(gè)并行口使用的注意事項(xiàng)如下:1.如果單片機(jī)內(nèi)部有程序存貯器,不需要擴(kuò)展外部存貯器和I/O接口,單片機(jī)的四個(gè)口均可作I/O口用。2.四個(gè)口在作輸入口使用時(shí),均應(yīng)先對(duì)其寫“1”,以避免誤讀。3.P0口作I/O口使用時(shí)應(yīng)外接10K的上拉電阻,其它口則可不必。4.P2可某幾根線作地址使用時(shí),剩下的線不能作I/O口線使用。5.P3口的某些口線作第二功能時(shí),剩下的口線可以單獨(dú)作I/O口線使用。4.1.2

10、編程舉例 下面舉例說(shuō)明端口的輸入、輸出功能,其他功能的應(yīng)用實(shí)例在后面章節(jié)說(shuō)明。 例4-1.設(shè)計(jì)一電路,監(jiān)視某開關(guān)K,用發(fā)光二極管LED顯示開關(guān)狀態(tài),如果開關(guān)合上,LED 亮、 開關(guān)打開,LED熄滅。 分析:設(shè)計(jì)電路如圖5. 2如示。 開關(guān)接在P1.1口線,LED接P1.0口線,當(dāng)開關(guān)斷開時(shí),P1.1為+5V,對(duì)應(yīng)數(shù)字量為“1”,開 關(guān)合上時(shí)P1.1電平為0V,對(duì)應(yīng)數(shù)字量為“0”,這樣就可以用JB指令對(duì)開關(guān)狀態(tài)進(jìn)行檢測(cè) 。 LED正偏時(shí)才能發(fā)亮,按電路接法,當(dāng)P1.0輸出“1”,LED正偏而發(fā)亮,當(dāng)P1.0 輸出“0” ,LED 的兩端電壓為 0 而熄滅。 LED+5VVcc-EARST10uF

11、 1KP1.089S51P1.11K30P30PXTAL1XTAL2GND89C51+5VVcc-EARST10uF 1KP1.089S51+5VP1.11K30P30PXTAL1XTAL2GND89C51K編程如下: CLR P1.0 ;使發(fā)光二極管滅AGA:SETB P1.1 ;先對(duì)P1口寫入“1” JB P1.1,LIG ;開關(guān)開,轉(zhuǎn)LIG SETB P1.0 ;開關(guān)合上,二極管亮 SJMP AGALIG: CLR P1.0 ;開關(guān)開,二極管滅 SJMP AGA+5VP1.0LED 在上述電路圖中二極管亮度不夠,按下面兩種電路接法,增加了驅(qū)動(dòng)能力,二極管更亮些。接成灌電流形式:P1.0+

12、5VLED1加驅(qū)動(dòng)電路: 例4-2.在下圖中P1.4P1.7接四個(gè)發(fā)光二極管LED,P1.0P1.3接四個(gè)開關(guān),編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。 111189C51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7+5V+5V1K43304EA 上述程序中每次讀開關(guān)之前,輸入位都先置“1”,保證了開關(guān)狀態(tài)的正確讀入。 編程如下: ORG 0000HABC: MOV P1, #0FFH ;高四位滅,低四位送“1” MOV A, P1 ;讀P1口引腳開關(guān)狀態(tài)至A SWAP A ;低四位開關(guān)狀態(tài)轉(zhuǎn)換到高四位 ANL A, #0F0H ;保留高四位 MOV P1, A ;從P1口輸出

13、 SJMP ABC ;循環(huán) 例3.用P1.0輸出1KHz和500Hz的音頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器,作報(bào)警信號(hào),要求1KHz信號(hào)響100ms ,500Hz信號(hào)響200ms,交替進(jìn)行,P1.7接一開關(guān)進(jìn)行控制,當(dāng)開關(guān)合上響報(bào)警信號(hào),當(dāng)開關(guān)斷開告警信號(hào)停止,編出程序。 分析:500Hz信號(hào)周期為2ms,信號(hào)電平為每1ms變反1次。1KHz的信號(hào)周期為1ms,信號(hào)電平 每500S變反1次,編一個(gè)延時(shí)500S子程序,延時(shí)1ms只需調(diào)用2次。用R2控制音響時(shí)間長(zhǎng)短,A作音響頻率的交換控制的標(biāo)志。A=FF時(shí)產(chǎn)生1KHz信號(hào),A=0時(shí)產(chǎn)生500Hz信號(hào)。 P1.0 波 形 圖 1ms 1ms100個(gè)T (變反200次

14、即200ms)。500S500S100個(gè)T (變反200次即100ms)。TT ORG 0000H CLR A ;A作1KHz,500Hz 轉(zhuǎn)換控BEG: JB P1.7, $ ;檢測(cè)P1.7的開關(guān)狀態(tài) MOV R2, #200 ;開關(guān)閉合報(bào)警,R2控制音響 時(shí)間DV: CPL P1.0 CJNE A, #0FFH, N1 ;AFFH,延時(shí)500S ACALL D500 ;A=FFH ; 延時(shí)1ms P1.0變N1: ACALL D500 DJNZ R2,DV CPL A SJMP BEGD500: MOV R7, #250 ;延時(shí)500 S子程序 DJNZ R7, RET END4.1.3

15、用并行口設(shè)計(jì)LED數(shù)碼顯示器和鍵盤電路 鍵盤和顯示器是單片機(jī)應(yīng)用系統(tǒng)中常用的輸入輸出裝置。LED數(shù)碼顯示器是常用的顯示器之一,下面介紹用單片機(jī)并行口設(shè)計(jì)LED數(shù)碼顯示電路和鍵盤電路的方法。 4.1.3.1用并行口設(shè)計(jì)LED顯示電路1. LED顯示器及其原理 LED有著顯示亮度高,響應(yīng)速度快的特點(diǎn),最常用的是七段式LED顯示器,又稱數(shù)碼管。 七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。常見LED的管腳排列見圖4(a)。其中COM為公共點(diǎn),根據(jù)內(nèi)部發(fā)光二極管的接線 形式,可分成共陰極型圖4(b)和共陽(yáng)極型圖4(c)。 abcdefgdp(a)(b)

16、(c)cdedp12345678910abfgcomcomabcefabcdefgdpcomcom圖40 0 1 1 1 1 1 1 3fh x g f e d c b a abcdefgdpcdedp12345678910abfgcomcomabcefcomgLED數(shù)碼管的ga七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不能發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,例如顯示”0”abcdefgdp12345678910abfgcomcomabcefgx g f e d c b a 0 0 0 0 0 1 1 0 06h 例如顯示”1”abcdefgdpcdedp12345

17、678910comcomabcefcomgx g f e d c b a 0 1 0 1 1 0 1 1 5bh 例如顯示”2”顯然共陽(yáng)極和共陰極的字形碼是不同的 ,其字形碼見下表。LED數(shù)碼管每段需1020ma的驅(qū)動(dòng)電流,可用TTL或CMOS器件驅(qū)動(dòng)。 字形碼的控制輸出可采用硬件譯碼方式,如采用BCD 7段譯碼/驅(qū)動(dòng)器74LS48、74LS49、CD4511(共陰極)或74LS46、74LS47、CD4513(其陽(yáng)極)也可用軟件查表方式輸出。 顯示字符段 符 號(hào)十六進(jìn)制代碼dpgfedcba共陰共陽(yáng)0123456789ABCDEFHP00000000000000000100111110111

18、10111111000111011111011111010001010111111111011011011011110001101111111110100001111100111100100011011011111101011113FH06H5BH4FH66H6DH7DH07H7FH6FH77H7CH39H5EH79H71H76HF3HC0F9A4B0999282F880908883C6A18684FFBF2.LED 接法占用接口多,如果PO口和P2口要用作數(shù)據(jù)線和地址線,僅用單片機(jī)的并行口就只能接二個(gè)數(shù)碼管。也可以用串行接口的方法接多個(gè)數(shù)碼管, 使之靜態(tài)顯示. 動(dòng)態(tài)接口采用各數(shù)碼管循環(huán)輪流顯

19、示的方法,當(dāng)循環(huán)顯示頻率較高時(shí),利用人眼的暫留特性 ,看不出閃爍顯示現(xiàn)象,這種顯示需要一個(gè)接口完成字形碼的輸出(字形選擇),另一接口完 成各數(shù)碼管的輪流點(diǎn)亮(數(shù)位選擇)。 例如圖5是接有五個(gè)共陰極數(shù)碼管的動(dòng)態(tài)顯示接口電路,用74LS373接成直通的方式作驅(qū)動(dòng) 電路,陰極用非門74LS04反相門驅(qū)動(dòng),字形選擇由P1口提供,位選擇由P3口控制。 當(dāng)P3.0P3.4輪流輸出1時(shí),五個(gè)數(shù)碼管輪流顯示。P1.7接開關(guān),當(dāng)開關(guān)打向位置“1”時(shí), 顯示“12345”字樣,當(dāng)開關(guān)打向“2”時(shí),顯示“HELLO”字樣,程序清單如下: 12 用匯編語(yǔ)言編程 ORG 0000H MOV P3,#0 ;清顯示TEST

20、:SETB P1.7 JB P1.7,DIR1 ;檢測(cè)開關(guān) MOV DPTR,#TAB 1 ; 開關(guān)置于1,12345字形表頭地址 SJMP DIRDIR1: MOV DPTR,#TAB2 ; 開關(guān)置于2,“HELLO”字形表頭DIR: MOV R0,#0 ;R0存字形表偏移量 MOV R1,#01 ;R1置數(shù)碼表位選代碼NEXT:MOV A,R0 MOVC A,A+DPTR ; 查字形碼表1 MOV P1,A ;送P1口輸出 MOV A,R1 MOV P3,A ;輸出位選碼 ACALL DAY ;延時(shí) INC R0 ;指向下一位字形 RL A ;指向下一位 MOV R1,A CJNE R1,

21、#20H,NEXT ;五個(gè) 數(shù)碼管顯示完? SJMP TESTDAY:MOV R6,#20 ; 延時(shí)20ms子程序DL2: MOV R7,#7DH DL1: NOP NOP DJNZ R7,DL1 DJNZ R6,DL2 RETTAB1:db 06H,5BH,4FH,66H,6DH ; “15”的字形碼TAB2:db 78H,79H,38H,38H,3FH ; “HELLO”的字形碼 END4.1.3.2用并行口設(shè)計(jì)鍵盤電路 鍵盤是計(jì)算機(jī)系統(tǒng)中不可缺少的輸入設(shè)備,當(dāng)按鍵少時(shí)可接成線性鍵盤(如圖5.3中的按鍵 ),當(dāng)按鍵較多時(shí),這樣的接法占用口線較多。將按鍵接成矩陣的形式,可以節(jié)省口線,例如兩個(gè)

22、接口可按8*8的形式接64個(gè)按鍵。每個(gè)按鍵有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和CPU通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關(guān)的一端通過(guò)電阻接Vcc(列)、而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。 鍵盤處理程序的任務(wù)是:確定有無(wú)鍵按下;判哪一個(gè)鍵按下, 鍵的功能是什么;還要消除按鍵在閉合或斷開時(shí)的抖動(dòng)。 兩個(gè)并行口中,一個(gè)輸出掃描碼, 使按鍵逐行動(dòng)態(tài)接地(稱行掃描),另一個(gè)并行口輸入按鍵狀態(tài)(稱回饋信號(hào),鍵盤的列值), 由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵、通過(guò)軟件查表,查出該鍵的功能。也可由硬件編碼器完成鍵的編碼。

23、 下圖中,用8XX51的并行口P1接44矩陣鍵盤,以P1.0P1.3作輸出線,以P1.4P1.7作輸入線,鍵盤掃描程序的流程如圖5.7所示。 EE DE BE 7E ED DD BD 7D EB DB BB 7B E7 D7 B7 77 Y返回鍵編碼讀P1.3P1.4值置行掃描初值掃描位從P1口輸出P1口的高四位和低四位相或得鍵編碼掃到最后一行?NN(有鍵按下)N開始P1.0P1.3輸出0延時(shí)去抖動(dòng)P1.4P1.7全為1?P1.4P1.7全為1?YYY(無(wú)鍵按下) 對(duì)鍵盤的程序流程圖5.7說(shuō)明如下: 當(dāng)P1.0P1.3輸出0時(shí),如無(wú)鍵按下,P1.4P1.7的輸入值均為“1”,如果其中有一個(gè)不是

24、 “1”,說(shuō)明有鍵按下,再使P1.0P1.3逐個(gè)輸出零(行掃描),檢查P1.4P1.7的輸入值有 無(wú)零,從而查出是哪行哪列的鍵按下。在判按鍵時(shí),按鍵有抖動(dòng),可采用延時(shí)后再重讀以跳 過(guò)抖動(dòng)時(shí)段(也可用R-S觸發(fā)器閂鎖電路硬件消抖,但這樣電路復(fù)雜,在矩陣鍵盤中不采用)。程序清單如下: ORG 0000H TEST: MOV P1,#0F0H ; P1.0P1.3輸出0, P1.4P1.7輸出1,作輸入位 MOV A,P1 ;讀鍵盤,檢測(cè)有無(wú)鍵按下ANL A,#0F0H ; 屏蔽P1.0P1.3,檢測(cè)P1.4P1.是否全為1 CJNE A, #0F0H,HAVE ; P1.4P1.7不全為1,有鍵按

25、下SJMP TEST ;P1.4P1.7全為1,無(wú)鍵按下,重檢測(cè)鍵盤HAVE: MOV A,#0FE ;有鍵按下,逐行掃描鍵盤,置掃描初值 NEXT: MOV B,A ;掃描碼暫存于BMOV P1,A ;輸出掃描碼READ: MOV A,P1 ;讀鍵盤ANL A,#0F0H ; 屏蔽P1.0P1.3, 檢測(cè)P1.4P1.是否全為1CJNE A,0F0H,YES ;P1.4P1.7不全為1, 該行有鍵按下MOV A,B ;被掃行無(wú)鍵按下,準(zhǔn)備查下一行RL A ;置下一行掃描碼CJNE A,#0EFH,NEXT ;未掃到到最后一行循環(huán)YES: ACALL DAY ;延時(shí)去抖動(dòng)AREAD: MOV

26、A,P1 ;再讀鍵盤ANL A,#0F0H ; 屏蔽P1.0P1.3,保留P1.4P1.7(列碼)MOV R2,A ;暫存列碼MOV A, B ANL A,#0FH ;取行掃描碼ORL A,R2 ;行碼、列碼合并為鍵編碼YES1: MOV B,A ;鍵編碼存于BLJMP SAM38 ;轉(zhuǎn)鍵分析處理程序(見例3-8) 例如圖5-6中的“a”鍵,當(dāng)行掃描值sccode=feH=11111110B,讀入列值到P1口和f0H相與即保 留高四位讀入值,屏蔽了低四位,再和0fh相或得recole=dfH=11011111B. sccode+ recode=00100001B,所以“a”鍵的編碼21H,此值

27、是A的鍵碼,同樣可得“5” 鍵編碼為01000100B即44H,由此可將每個(gè)按鍵的編碼排出來(lái),通過(guò)查表程序轉(zhuǎn)不同的按鍵處 理程序。此程序部分請(qǐng)讀者自行編出。該程序同樣可用匯編語(yǔ)言編出。 4.1.4 并行接口小結(jié) 1. 四個(gè)并行口均可作為輸入輸出接口使用,但又有各自的特點(diǎn)。因PO口是數(shù)據(jù)線和低八位的 地址線,因此不用它作輸入/輸出接口,而是用它傳輸數(shù)據(jù)和低八位的地址信息,除非在不 接其他外圍芯片的情況下才作I/O接口使用,此時(shí)由于內(nèi)部漏極開路,需外接上拉電阻。四個(gè)口的使用特點(diǎn)是本章的重點(diǎn)。 并行接口是單片機(jī)用得最多的部分,可直接接外部設(shè)備(要注意電平的匹配)。本章以最簡(jiǎn)單 的實(shí)驗(yàn)室最容易實(shí)現(xiàn)的外

28、部設(shè)備開關(guān)和發(fā)光二極管為例說(shuō)明并行口的應(yīng)用設(shè)計(jì),其他外設(shè) 的測(cè)控原理與其一樣。3. 在應(yīng)用設(shè)計(jì)中應(yīng)理解,計(jì)算機(jī)內(nèi)由數(shù)字電路組成只存在兩種TTL電平,高電平3.55V和低 電平0V,對(duì)應(yīng)著的數(shù)字為“1”和“0”。 外設(shè)的狀態(tài)要通過(guò)電路轉(zhuǎn)換成高、低電平,計(jì)算機(jī)才能識(shí)別(如開關(guān)電路)。 計(jì)算機(jī)輸出數(shù)據(jù)“1”即輸出3.5V5V,輸出數(shù)據(jù)“0”即輸出0V,根據(jù)外設(shè)需要的電平要求 輸出“1”或“0”數(shù)據(jù),這就是程序控制外設(shè)的本質(zhì)。 2. 當(dāng)并行口作為輸入口使用時(shí),應(yīng)對(duì)所用的口線寫“1”,使其內(nèi)部的驅(qū)動(dòng)場(chǎng)效應(yīng)管截止 ,防止誤讀。寫“1”以后不影響讀引腳指令,因?yàn)樽x入的信息是經(jīng)緩沖器2(見圖5.1)進(jìn)入C P

29、U的,而不是讀的鎖存器。 8XX51有5個(gè)中斷源,3個(gè)在片內(nèi),2個(gè)在片外,它們?cè)诔绦虼尜A器中有固定的中斷入口地址, 當(dāng)CPU響應(yīng)中斷時(shí),硬件自動(dòng)形成這些地址,由此進(jìn)入中斷服務(wù)程序;5個(gè)中斷源有兩級(jí)中斷優(yōu)先級(jí),可形式中斷嵌套;4.2.2.1 中斷源 8XX51有5個(gè)中斷源,其符號(hào)、名稱、產(chǎn)生條件及中斷服務(wù)程序的入口地址如下表。4.2.1 8XX51中斷系統(tǒng)結(jié)構(gòu)4.2 MCS51單片機(jī)的中斷系統(tǒng) 可以是I/O設(shè)備、故障、時(shí)鐘、調(diào)試中人為設(shè)置。中斷優(yōu)先級(jí) 當(dāng)有多個(gè)中斷源同時(shí) 向CPU申請(qǐng)中斷時(shí),CPU優(yōu)先響應(yīng)最需緊急處理的中斷請(qǐng)求,處理完畢再響應(yīng)優(yōu)先級(jí)別較低的 ,這種預(yù)先安排的響應(yīng)次序。 中斷的嵌套

30、 在中斷系統(tǒng)中,高優(yōu)先級(jí)的 中斷請(qǐng)求能中斷正在進(jìn)行的較低級(jí)的中斷源處理, 本章將討論MCS51系列單片機(jī)的中斷系統(tǒng)。 4.2.1 中斷系統(tǒng)結(jié)構(gòu) 8XX51有5個(gè)中斷源,3個(gè)在片內(nèi),2個(gè)在片外,它們?cè)诔绦虼尜A器中有固定的中斷入口地址, 當(dāng)CPU響應(yīng)中斷時(shí),硬件自動(dòng)形成這些地址,由此進(jìn)入中斷服務(wù)程序;5個(gè)中斷源有兩級(jí)中斷優(yōu)先級(jí),可形式中斷嵌套; 增強(qiáng)型8XX52新增一個(gè)中斷源T2,有6個(gè)中斷源. 6個(gè)中斷源,其符號(hào)、名稱、產(chǎn)生條件及中斷服務(wù)程序的入口地址如下表。符號(hào) 名 稱 中 斷 引 起 原 因 中斷服務(wù)程序入口INT0外部中斷 0 P3.2引腳的低電平或下降沿信號(hào) 0003HINT1 外部中斷

31、 1P3.3引腳的低電平或下降沿信號(hào) 0013HT0定時(shí)器0中斷 定時(shí)計(jì)數(shù)器0計(jì)數(shù)回零溢出 000BHT1定時(shí)器1中斷 定時(shí)計(jì)數(shù)器1計(jì)數(shù)回零溢出 001BHT2定時(shí)器2中斷 定時(shí)計(jì)數(shù)器2中斷(TF2或T2EX信號(hào))002BHTI/RI 串行口中斷 串行通信完成一幀數(shù)據(jù)發(fā)送或接收引起中斷 0023H二、中斷控制的有關(guān)寄存器 (1)中斷的允許和禁止中斷控制寄存器IE IE寄存器的各位對(duì)應(yīng)相應(yīng)的中斷源,如果允許該中斷源中斷則該位置1,禁止中斷則該位0 。EA - ET2 ES ET1 EX1 ET0 EX0中斷總控允/禁 不 用 T2允/禁 串行口允/禁 T1允/禁 INT1允/禁 T0允/禁 IN

32、T0允/禁 EA:中斷總控開關(guān),是CPU是否響應(yīng)中斷的前提。 EA=1,CPU開中斷; EA=0, CPU關(guān)中斷。ES: 串行口中斷允許位, ES=1,允許串行口發(fā)送/接收中斷; ES=0,禁止串行口中斷。ET2:定時(shí)器T2中斷允許位, ET2=1,允許T2計(jì)數(shù)溢出中斷; ET2=0,禁止T2中斷。ET1:定時(shí)器T1中斷允許位, ET1=1,允許T1計(jì)數(shù)溢出中斷; ET1=0,禁止T1中斷。ET0: 定時(shí)器T0中斷允許位, ET0=1,允許T1計(jì)數(shù)溢出中斷; ET0=0,禁止T0中斷。EX1: 外部中斷INT1允許位, EX1=1,允許INT1中斷; EX1= 0,禁止INT1中斷。EX0:

33、外部中斷INT0允許位, EX0=1,允許INT0中斷; EX0= 0,禁止INT0中斷。 說(shuō)明: IT0和IT1為外中斷INT0 和INT1中斷觸發(fā)方式選擇,若選下降沿觸發(fā)則相應(yīng)位置1;若選低電平觸發(fā) ,IT相應(yīng)位置0。 某中斷源有中斷請(qǐng)求,該中斷標(biāo)志置1,無(wú)中斷請(qǐng)求,該中斷標(biāo)志置0 TR0 和 TR1 為定時(shí)器T0和T1 工作啟動(dòng)和停止控制。 TF1 TR1TF0 TR0 IE1IT1 IE0IT0T1 請(qǐng)求有/無(wú) T1工作啟/停 T0 請(qǐng)求有/無(wú) T0 工作啟/停 INT1 請(qǐng)求有/無(wú) INT1方式下沿/ 低電平 INT0請(qǐng)求有/無(wú) INT0方式下沿/低電平 (2)中斷請(qǐng)求標(biāo)志及外部中斷

34、方式選擇寄存器TCON(3)中斷優(yōu)先級(jí)管理寄存器IP 五個(gè)中斷源的優(yōu)先級(jí)別由IP寄存器管理,相應(yīng)位置1,則該中斷源優(yōu)先級(jí)別高,置0的優(yōu)先級(jí) 別低。 -PT2PSPT1PX1PT0PX0無(wú)用位無(wú)用位T2高/低串行 口高/低 T1高/低 INT1高/低 T0高/低 INT0高/低 T0INT0INT1T1串行口 當(dāng) 某幾個(gè)中斷源在IP寄存器相應(yīng)位同為1或同為零時(shí),由內(nèi)部查詢確定優(yōu)先級(jí),查詢的順序是:CPU優(yōu)先響應(yīng) 先查詢的中斷請(qǐng)求T2MCS_51系列單片機(jī)的中斷結(jié)構(gòu)可以用圖6.1示。 4.2.2 中斷響應(yīng)過(guò)程 一、中斷處理過(guò)程 中斷處理過(guò)程分為四個(gè)階段:中斷請(qǐng)求,中斷響應(yīng),中斷處理、中斷返回。MC

35、S51系列單 片機(jī)的中斷過(guò)程流程如圖6.2所示。 NNYYYN執(zhí) 行 指 令中斷標(biāo)志1?(中斷請(qǐng)求?) 指令最后一個(gè)T周期?EA=1?允 許 位 = 1?CPU 判 別優(yōu) 先權(quán) ,響 應(yīng)優(yōu) 先權(quán)高 的中斷斷點(diǎn)的PC進(jìn)棧, 中斷服務(wù)入口地址送PC撤 除 中 斷 標(biāo) 志中 斷 服 務(wù)中 斷 返 回, 斷 點(diǎn) 出 棧 送 PC 中斷請(qǐng)求.中斷響應(yīng)中斷服務(wù)中斷返回中斷請(qǐng)求、中斷響應(yīng)過(guò)程由硬件完成。中斷服務(wù)程序應(yīng)根據(jù)需要進(jìn)行編寫。程序中要注意保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。中斷返回是通過(guò)執(zhí)行一條RETI中斷返回指令,使堆棧中被壓入的斷 點(diǎn)地址送PC,從而返回主程序的斷點(diǎn)繼續(xù)執(zhí)行主程序。另外RETI還有恢復(fù)優(yōu)先級(jí)狀態(tài)

36、觸發(fā)器 的作用,因此不能以RET指令代替“RETI”指令。 若某個(gè)中斷源通過(guò)編程設(shè)置,處于被打開的狀態(tài),并滿足中斷響應(yīng)的條件,然而下面三種情 況單片機(jī)不響應(yīng)此中斷:當(dāng)前正在執(zhí)行的那條指令沒執(zhí)行完;當(dāng)前響應(yīng)了同級(jí)或高級(jí)中斷;正在操作IE、IP中斷控制寄存器或執(zhí)行RETI指令。 在正常的情況下,從中斷請(qǐng)求信號(hào)有效開始, 到中斷得到響應(yīng),通常需要3個(gè)機(jī)器周期到8個(gè) 機(jī) 器周期。二、中斷請(qǐng)求的撤除 CPU響應(yīng)中斷后,應(yīng)撤除該中斷請(qǐng)求標(biāo)志,否則 對(duì)電平觸發(fā)的外部中斷,CPU在響應(yīng)中斷時(shí)也不會(huì)自動(dòng)清除中斷標(biāo)志,因此,在CPU響應(yīng)中斷后應(yīng)立即撤除INT1或INT0的低電平信號(hào)。 會(huì)再次中斷。 對(duì)定時(shí)計(jì)數(shù)器T

37、0、T1的溢出中斷,CPU響應(yīng)中斷后,硬件自動(dòng)清除中斷請(qǐng)求標(biāo)志TF0 TF1。 對(duì)邊沿觸發(fā)的外部中斷INT1和INT0,CPU響應(yīng)中斷后硬件自動(dòng)清除中斷請(qǐng)求標(biāo)志IE0和IE1。 對(duì)于串行口中斷,CPU響應(yīng)中斷后,沒有用硬件清除中斷請(qǐng)求標(biāo)志TI、RI,即這些中斷標(biāo)志 不會(huì)自動(dòng)清除,必須用軟件清除,這是在編串行通信中斷服務(wù)中應(yīng)該注意的。4.2.3 中斷的匯編語(yǔ)言程序和C語(yǔ)言程序設(shè)計(jì) 用戶對(duì)中斷的控制和管理,實(shí)際是對(duì)4個(gè)與中斷有關(guān)的寄存器IE、TCON、IP、SCON進(jìn)行控制 或管理。這幾個(gè)寄存器在單片機(jī)復(fù)位時(shí)是清零的,因此必須根據(jù)需要對(duì)這幾個(gè)寄存器的有關(guān) 位進(jìn)行預(yù)置。在中斷程序的編制中應(yīng)注意:開中

38、斷總控開關(guān)EA,置位中斷源的中斷允許位。對(duì)外部中斷INT0、INT1應(yīng)選擇中斷觸發(fā)方式編寫中斷服務(wù)程序,并注意用保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng),以免中斷返回時(shí),丟失原寄存器、累加器中的信息。多個(gè)中斷源中斷,應(yīng)設(shè)定中斷優(yōu)先級(jí),預(yù)置IP。 若要在執(zhí)行當(dāng)前中斷程序時(shí)禁止更高優(yōu)先級(jí)中斷,可以采用軟件關(guān)CPU中斷或禁止某中斷源中斷,在中斷返回前再開放中斷。 匯編語(yǔ)言的中斷服務(wù)程序按規(guī)定的中斷矢量地址存入,由于五個(gè)中斷矢量地址0003H、000BH 、0013H、001BH、0023H之間相距很近,往往裝不下一個(gè)中斷服務(wù)程序,通常將中斷服務(wù)程 序安排在程序存貯器的其他地址空間,而在矢量地址的單元中安排一條轉(zhuǎn)移指令。4

39、.2.3 中斷程序的設(shè)計(jì) 例1. 在圖6.3中P1.4P1.7接有四個(gè)發(fā)光二極管,P1.0P1.3接有四個(gè)開關(guān),消抖電路用于 產(chǎn)生中斷請(qǐng)求信號(hào),當(dāng)消抖電路的開關(guān)來(lái)回拔動(dòng)一次將產(chǎn)生一個(gè)下降沿信號(hào),通過(guò)INT0向CPU申請(qǐng)中斷,要求:初時(shí)發(fā)光二極管全黑,每中斷一次,P1.0P1.3所接的 開關(guān)狀態(tài)反映到發(fā)光二極管上,且要求開關(guān)斷開的對(duì)應(yīng)發(fā)光二極管亮,電路和現(xiàn)象如下: 、 ORG 0000H AJMP MAIN ORG 0003H ;INT0中斷入口 AJMP WBI ; 轉(zhuǎn)中斷服務(wù)程序 ORG 0030H ;主程序 MAIN: MOV P1,#0FH ;全燈滅,低四位輸入 SETB IT0 ; 邊

40、沿觸發(fā)中斷 SETB EX0 ;允許外中斷0中斷 SETB EA ;開中斷開關(guān) SJMP $ WBI: MOV P1,#0FH ;P1先寫入“1”且燈滅 MOV A,P1 ;輸入開關(guān)狀態(tài) SWAP A MOV P1,A ;輸出到P1高4位 RETI END#includevoid main( )EX0=1;/允許外部中斷0中斷IT0=1;/選邊沿觸發(fā)方式EA=1;/CPU開中斷while (1);/等待中斷void int0_int(void) interrupt 0 unsignedchardatad;P1=0 xf0;/設(shè)P1.4P1.7為輸入d=P1;/取開關(guān)數(shù)P1=(d4); /驅(qū)動(dòng)L

41、ED發(fā)光 此例的執(zhí)行現(xiàn)象是,每重置一次四個(gè)開關(guān)的開、合狀態(tài),四個(gè)發(fā)光二極管維持原來(lái)的亮、滅 狀態(tài),僅當(dāng)來(lái)回拔動(dòng)消抖電路開關(guān)后,產(chǎn)生了中斷,發(fā)光二極管才反映新置的開關(guān)狀態(tài)。 例2. 89C51的P1口接一個(gè)共陰極的數(shù)碼管,利用消抖開關(guān)產(chǎn)生中斷請(qǐng)求信號(hào),每來(lái)回拔動(dòng)一 次開關(guān),產(chǎn)生一次中斷,用數(shù)碼管顯示中斷的次數(shù)(最多不超過(guò)15次)。 ORG 0000H AJMP MAIN ORG 0013H ;INT1中斷入口 AJMP INT1 ;轉(zhuǎn)中斷服務(wù)程序 ORG 0030H ;主程序MAIN: SETB IT1 ;邊沿觸發(fā)中斷 SETB EX1 ;允許INT1中斷 SETB EA ;開中斷開關(guān) MOV

42、R0,#0 ;計(jì)數(shù)初值為0 MOV A,#3FH ;“0”的字形碼送AAL1: MOV P1,A ;顯示數(shù)碼AL2: CJNE R0,#0FH,AL1 ;沒滿15次循環(huán)顯示 MOV R7,#0FFH ;滿15次,顯F,延時(shí) DJNZ R7, MOV P1,#0 ;關(guān)顯示 CLR EA ;關(guān)中斷 SJMP ;結(jié)束INT1: INC R0 ;中斷次數(shù)加1 MOV A,R0 MOV DPTR,TAB ;DPTR指向字形碼表首址 MOVC A,A+DPTR ;查表 POP DPH POP DPL ;彈出斷點(diǎn) MOV DPTR,#AL1 PUSH DPL PUSH DPH ;修改中斷返回點(diǎn),AL1壓入堆棧 RETI ;從堆棧AL1地址PC,返主程序AL處 TAB: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論