第4章并行接口P0~P3和單片機的中斷系統(tǒng)hzh_第1頁
第4章并行接口P0~P3和單片機的中斷系統(tǒng)hzh_第2頁
第4章并行接口P0~P3和單片機的中斷系統(tǒng)hzh_第3頁
第4章并行接口P0~P3和單片機的中斷系統(tǒng)hzh_第4頁
第4章并行接口P0~P3和單片機的中斷系統(tǒng)hzh_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 并行接口P0P3和單片機的中斷(zhngdun)系統(tǒng)單片機原理、接口(ji ku)及應用共一百頁單片機的并行接口P0P3 POP3端口的功能和內部結構 POP3端口的編程 用并行口設計LED數碼顯示和鍵盤電路 并行接口小結MCS-51單片機的中斷系統(tǒng)(xtng) 中斷的基本概念 中斷的系統(tǒng)結構 中斷的響應過程 中斷的的應用編程小結內容提要(ni rn t yo)共一百頁4.1單片機的并行接口接口P0P3 MCS-51單片機有P0、P1、P2、P3四個8位雙向I/O口,每個端口可以按字節(jié)輸入或輸出,也可以按位進行輸入或輸出,四個口共32根口線,用作位控制十分方便(fngbin)。P0口為

2、三態(tài)雙向口,能帶8個TTL電路(P0口是推挽輸出,輸出能力大些,需外加上拉電阻) ;P1、P2、P3口為準雙向口(弱上拉),負載能力為4個TTL電路。4.1.1 POP3端口的功能和內部結構 4.1.1.1 POP3接口功能 大多數口線都有雙重功能,具體介紹如下:共一百頁PO口1.作為輸入/輸出口。 2.作為地址/數據總線 ,接外圍芯片時PO口分時輸出低 8 位地址與數據信號。P1口1.作為輸入/輸出口。 2.在增強型(52系列)和ISP型(在系統(tǒng)編程型)中有如下(rxi)功能: P1.0 T2引腳,定時/計數器2外部計數脈沖輸入 P1.1 T2EX引腳,定時/計數器2觸發(fā)和方向(fngxin

3、g)控制 P1.5 MOSI引腳,在系統(tǒng)編程數據輸入 P1.6 MISO引腳,在系統(tǒng)編程數據輸出 P1.7 SCK引腳,在系統(tǒng)編程時鐘輸入共一百頁P2口1.作為輸入/輸出(shch)口。 2.作為高8位地址總線。 P3口P3口為雙功能 1.作第一功能使用時,其功能為輸入/輸出口。 2.作第二功能使用時,每一位功能定義如下表所示: 共一百頁RD (外部數據存儲器讀選通信(tng xn)號輸入) P3.7 WR (外部數據(shj)存儲器寫選通信號輸入)P3.6 T1 (定時器1外部計數脈沖輸入)P3.5 T0 (定時器0外部計數脈沖輸入)P3.4 P3.3 P3.2 TXD (串行輸出線)P3.

4、1 RXD (串行輸入線) P3.0 第 二 功 能 端口引腳 INT0(外部中斷0輸入線)INT1 (外部中斷1輸入線) 共一百頁 4.1.1.2 端口的內部結構 四個端口的一位結構見圖5.1,同一個端口的各位具有(jyu)相同的結構。由圖可見,四個端口的 結構有相同之處: 依據每個端口的不同功能(gngnng),內部結構亦有不同之處,以下重點介紹不同之處。 都有兩個輸入緩沖器,分別受內部讀鎖存器和讀引腳控制信號的控制。 都有鎖存器(即專用寄存器POP3) 都是場效應管輸出驅動。共一百頁多路開關功能:用于控制選通I/O方式還是(hi shi)地址/數據輸出方式方式控制:由內部控制信號產生輸出

5、(shch)鎖存器兩個輸入緩沖器(BUF1和BUF2)推拉式I/O驅動器1.PO口BUF2BUF15、P0R2為讀引腳信號,執(zhí)行“MOV A,P0”時該信號有效6、讀引腳(端口)時,輸出鎖存器應為“1”。即當作輸入端口使用時,應先對該口寫入“1”說明:1、當控制信號為0時,P0口做雙向I/O口,為漏極開路(高阻狀態(tài),適用于輸入/輸出,需外接上拉電阻,使輸出呈現(xiàn)三態(tài)之高阻態(tài) )2、控制信號為1時,P0口為地址/數據復用總線(用于口擴展)3、P0W為端口輸出寫信號,用于鎖存輸出狀態(tài)4、P0R1為讀鎖存器信號,執(zhí)行“ANL P0,#0FH”時該信號有效QQDCVcc控制AD0P0R1 P0R2D0P

6、0W圖1、P0口內部結構讀鎖存器讀引腳鎖存器內部總線寫鎖存器地址/數據P00多路開關10共一百頁2.P1口 P1口的結構(jigu)見下圖P1口內部結構如圖2所示輸出部分有內部上拉電阻(dinz)R*約為20K。其他部分與P0端口使用相類似。寫數據讀端口在執(zhí)行輸入操作時,如果鎖存器原來寄存的數據Q=0,則由于 /Q=1將使V1導通,引腳被始終鉗拉在低電平,不可能輸入高電平。因此,用作輸入前,必須先用輸出指令置Q=1,使V1截止。 單片機復位后,P1口的狀態(tài)都是高電平,可以直接用作輸入注意:端口操作時,采用“讀-修改-寫”三部完成。通過輸入三態(tài)緩沖器讀鎖存器的輸出狀態(tài)Q,而非從引腳讀入。共一百頁

7、3.P2口 P2口的位結構比P1多了一個轉換控制部分(b fen),當P2口作通用I/O口時,多路開關MUX倒向左;共一百頁 當擴展片外存貯器時,MUX開關打向右,P2口作高八位地址線輸出高八位地址信號(xnho)。 其MUX的的倒向是受CPU內部控制的。 應當注意:當P2口的幾位作地址線使用時,剩下的P2口線不能作I /O口線使用。共一百頁 4.P3口 P3口 P3口為雙功能I/O口,內部結構中增加(zngji)了第二輸入/輸出功能。共一百頁 當作為普通I/O口使用時,第二輸出(shch)功能端保持“1”,打開與非門3,用法同P1口。 當作第二功能輸出時,鎖存器輸出為“1”打開與非門3,第二

8、功能內容通過與非門3和T送至引腳。 輸入時,引腳的第二功能信號通過三態(tài)緩沖器4進入第二輸入功能端。兩種功能的引腳輸入都應使T截止,此時第 二輸出功能端和鎖存器輸出端Q均為高電平。 P3的各位如不設定為第二功能則自動處于第一功能,在更多情況下,根據需要, 把幾條口線設為第二功能,剩下的口線可作第一功能(I/O)使用,此時,宜采用位操作形式 。 共一百頁歸納四個并行口使用的注意事項如下:1.如果單片機內部有程序存貯器,不需要擴展外部存貯器和I/O接口,單片機的四個口均可作I/O口使用。2.四個口在作輸入口使用時,均應先對其寫“1”,以避免誤讀。3.P0口作I/O口使用時應外接10K的上拉電阻(di

9、nz),其它口則可不必。4.P2可某幾根線作地址使用時,剩下的線不能作I/O口線使用。5.P3口的某些口線作第二功能時,剩下的口線可以單獨作I/O口線使用。共一百頁4.1.2 編程舉例(j l) 下面舉例說明端口的輸入、輸出功能,其他功能的應用(yngyng)實例在后面章節(jié)說明。 例4-1.設計一電路,監(jiān)視某開關K,用發(fā)光二極管LED顯示開關狀態(tài),如果開關合上,LED 亮、 開關打開,LED熄滅。 分析:設計電路如圖5. 3如示。 開關接在P1.1口線,LED接P1.0口線,當開關斷開時,P1.1為+5V,對應數字量為“1”,開 關合上時P1.1電平為0V,對應數字量為“0”,這樣就可以用JB

10、指令對開關狀態(tài)進行檢測 。共一百頁 LED正偏時才能發(fā)亮(f lin),按電路接法,當P1.0輸出“1”,LED正偏而發(fā)亮,當P1.0 輸出“0” ,LED 的兩端電壓為 0 而熄滅。 LED+5VVcc-EARST10uF 1KP1.089S51P1.11K30P30PXTAL1XTAL2GND89C51+5VVcc-EARST10uF 1KP1.089S51+5VP1.11K30P30PXTAL1XTAL2GND89C51K共一百頁編程如下(rxi): CLR P1.0 ;使發(fā)光二極管滅AGA:SETB P1.1 ;先對P1口寫入“1” JB P1.1,LIG ;開關開,轉LIG SETB

11、 P1.0 ;開關合上,二極管亮 SJMP AGALIG: CLR P1.0 ;開關開,二極管滅 SJMP AGA開關K控制(kngzh)LED顯示開關狀態(tài)開關K控制(kngzh)LED顯示開關狀態(tài).DSN開關K控制LED顯示開關狀態(tài)開關K控制LED顯示開關狀態(tài)_asm共一百頁#includesbit key=P11;sbit led=P10; /*定義(dngy)位變量*/void main()led=0;while(1)key=1;if(key=0) led=1;else led=0;共一百頁+5VP1.0LED 在上述電路圖中二極管亮度不夠,按下面兩種電路接法,增加了驅動能力,二極管更亮

12、些。接成灌電流(dinli)形式:P1.0+5VLED1加驅動(q dn)電路:共一百頁 例.在圖5-4中P1.4P1.7接四個發(fā)光二極管LED,P1.0P1.3接四個開關,編程將開關的狀態(tài)(zhungti)反映到發(fā)光二極管上。 89C51/89S51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7+5V+5V1K43304圖5-4 例5-2圖EA共一百頁 上述程序中每次讀開關之前,輸入位都先置“1”,保證了開關狀態(tài)的正確讀入。要求調試完成 編程如下: ORG 0000H MOV P1, #0FFH ;高四位全滅,低四位送“1” ABC: MOV A, P1 ;讀P1口引腳開關

13、狀態(tài)至A SWAP A ;低四位開關狀態(tài)轉換(zhunhun)到高四位 ANL A,#0F0H ;保留高四位MOV P1,A ;從P1口輸出ORL P1, #0FH ;高四位不變,低四位送“1”,準備下一輪讀開關 SJMP ABC ;循環(huán)演示一個簡單的例子:開關(kigun)控制LED開關(kigun)控制LED.DSN 開關控制LED開關控制LED.asm共一百頁開關(kigun)控制LED開關(kigun)控制LED.c 上述程序中每次讀開關之前,輸入(shr)位都先置“1”,保證了開關狀態(tài)的正確讀入。 用C語言編程如下:sfr P1=0 x90; main() P1=0 xff; /*P

14、1低四位置“1”,高四位燈全滅*/ while(1) P1=P14; /*讀入P1引腳狀態(tài),左移四位后再從P1口輸出*/ P1=P1|0 x0f; /*P1高四位不變,低四位置“1”,準備 下一輪讀 開 關*/ 共一百頁 例5-3.用P1.0輸出(shch)1KHz和500Hz的音頻信號驅動揚聲器,作報警信號,要求1KHz信號響100ms ,500Hz信號響200ms,交替進行,P1.7接一開關進行控制,當開關合上響報警信號,當開關斷開告警信號停止,編出程序。 分析:500Hz信號(xnho)周期為2ms,信號(xnho)電平為每1ms變反1次。1KHz的信號(xnho)周期為1ms,信號(x

15、nho)電平 每500S變反1次,編一個延時500S子程序,延時1ms只需調用2次。用R2控制音響時間長短,A作音響頻率的交換控制的標志。A=FF時產生1KHz信號(xnho),A=0時產生500Hz信號(xnho)。 共一百頁 P1.0 波 形 圖 1ms 1ms100個T (變反200次即200ms)。500S500S100個T (變反200次即100ms)。TT共一百頁 ORG 0000H CLR A ;A作1KHz,500Hz 轉換控制BEG: JNB P1.7, ;檢測P1.7的開關(kigun)狀態(tài) MOV R2, #200 ;開關閉合報警,R2控制音響時間DV: CPL P1.0

16、 CJNE A, #0FFH, N1 ;AFFH,延時500S ACALL D500 ;A=FFH ; 延時1ms P1.0變反N1: ACALL D500 DJNZ R2,DV CPL A SJMP BEGD500: MOV R7, #250 ;延時500 S子程序 DJNZ R7, RET END相關(xinggun)動作演示:開關控制報警器源程序開關控制報警器.DSN共一百頁#include#define uchar unsigned charsbit p17=P17;sbit p10=P10;void main()uchar i,j;while(1)p17=1;while(p17=1)

17、;for(i=0;i100;i+)p10=p10;for(j=0;j50;j+);for(i=0;i150;i+)p10=p10;for(j=0;j100;j+);共一百頁5.3 用并行口設計LED數碼顯示器和鍵盤(jinpn)電路 鍵盤和顯示器是單片機應用系統(tǒng)中常用的輸入輸出裝置。LED數碼顯示器是常用的顯示器之一,下面(xi mian)介紹用單片機并行口設計LED數碼顯示電路和鍵盤電路的方法。 共一百頁5.3.1用并行口設計LED顯示電路1. LED顯示器及其原理 LED有著顯示亮度高,響應速度快的特點(tdin),最常用的是七段式LED顯示器,又稱數碼管。 七段LED顯示器內部由七個條形

18、發(fā)光二極管和一個小圓點發(fā)光二極管組成,根據各管的亮暗組合成字符。常見LED的管腳排列見圖4(a)。其中COM為公共點,根據內部發(fā)光二極管的接線 形式,可分成共陰極型圖4(b)和共陽極型圖4(c)。 共一百頁abcdefgdp(a)(b)共陰極(c)cdedp12345678910abfgcomcomabcefabcdefgdpcomcom圖4共一百頁 LED數碼管的ga七個發(fā)光二極管因加正電壓(diny)而發(fā)亮,因加零電壓(diny)而不能發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,顯然共陽極和共陰極的字形碼是不同的 ,其字形碼見下表。LED數碼管每段需1020mA的驅動電流

19、,可用TTL或CMOS器件驅動。 字形碼的控制輸出可采用硬件譯碼方式,如采用BCD 7段譯碼/驅動器74LS48、74LS49、CD4511(共陰極)或74LS46、74LS47、CD4513 (其陽極) 也可用軟件查表方式輸出。 共一百頁0 0 1 1 1 1 1 1 3fh x g f e d c b a abcdefgdpcdedp12345678910abfgcomcomabcefcomg LED數碼管的ga七個發(fā)光二極管因加正電壓而發(fā)亮(f lin),因加零電壓而不能發(fā)亮(f lin),不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼(段碼),如顯示”0”,字形碼為3fh.d共

20、一百頁abcdefgdp12345678910abfgcomcomabcefgx g f e d c b a 0 0 0 0 0 1 1 0 06h 顯示(xinsh)”1”,字形碼為06h.d共一百頁顯示(xinsh)”2”,字形碼為5bh.dpcomabcdefgdpcde12345678910comcomabcefgx g f e d c b a 0 1 0 1 1 0 1 1 5bh d共一百頁顯示字符段 符 號十六進制代碼dpgfedcba共陰共陽0123456789ABCDEFHP000000000000000001001111101111011111100011101111101

21、1111010001010111111111011011011011110001101111111110100001111100111100100011011011111101011113FH06H5BH4FH66H6DH7DH07H7FH6FH77H7CH39H5EH79H71H76HF3HC0F9A4B0999282F880908883C6A18684FFBF共一百頁2.LED數碼管的接口 數碼管的接口有靜態(tài)接口和動態(tài)接口。 靜態(tài)接口為固定顯示方式,無閃爍,其電路可采用一個并行口接一個數據管,數碼管的公共端,按共陰或共陽分別接地或Vcc。這種接法占用接口多,如果PO口和P2口要用作數據線和

22、地址線,僅用單片機的并行口就只能接二個數碼管。也可以用串行接口的方法(fngf)接多個數碼管, 使之靜態(tài)顯示. (可演示具體例子) 動態(tài)接口采用各數碼管循環(huán)輪流顯示的方法,當循環(huán)顯示頻率較高時,利用人眼的暫留特性 ,看不出閃爍顯示現(xiàn)象,這種顯示需要一個接口完成字形碼的輸出(字形選擇),另一接口完 成各數碼管的輪流點亮(數位選擇)。 共一百頁1211111+5VVcc/EARSTP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0P3.1P3.2P3.3P3.4XTAL1XTAL2GND89C51Q0Q6/OED0D6G373ag圖5-8 接五個共陰極數碼管的動態(tài)顯示接口+5

23、V共一百頁(1)編程使在最右邊的數碼管上顯示 “P”。匯編語言程序:ORG 0000HMOV P1, #73H;P1口輸出“P”的段碼MOC P3,#10H;最右邊的數碼管亮SJMP $C語言程序:#includeMain() P1 = 0 x73; P3 = 0 x10; 如果(rgu)不對P1和P3重新輸出新的數據,最右邊的數碼管將一直顯示“P”。思考一下為什么。共一百頁(2)要求(yoqi)在中間的數碼管上循環(huán)顯示“0” “3”。分析:中間的數碼管的陰極受P3.2控制,P3.2輸出1,P1口循環(huán)送出“0” “3”的段碼,數碼變化多,采用查表方式會使程序簡潔,每亮一個數碼都要延時,保證它的

24、導通時間,才能保證數碼管發(fā)亮。C語言編程如下:共一百頁#include#define uchar unsigned charcode uchar table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x76,0 x73;delay(int x)int i,j;int y=100;for(i=0;ix;i+)for(j=0;jy;j+); 你能編出匯編語言(hu bin y yn)程序嗎? void main()uchar coun=0;whi

25、le(1)P1=tablecoun;P3=0 x04;delay(200);coun+;if(coun=16) coun=0;共一百頁org 0000hljmp 0200horg 0200hstart:mov dptr,#tableloop:mov r0,#0next1:mov a,r0movc a,a+dptrmov P1,amov P3,#04hacall delayinc r0cjne r0,#04,next1ajmp looptable:db 3fh,06h,5bh,4fhdelay:mov r7,#0ffhdel:mov r6,#0ffhdel1:nopnopdjnz r6,del1

26、djnz r7,delretend 共一百頁(3)當P3.0P3.4輪流(lnli)輸出1時,五個數碼管輪流(lnli)顯示。P1.7接開關,當開關打向位置“1”時, 顯示“12345” ,當開關打向“2”時,顯示“HELLO” 樣,如下圖:共一百頁共一百頁C語言 只顯示(xinsh)12345的情況,延時不同?#include#define uchar unsigned charcode uchar table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d;delay(int x)int i,j;int y=100;for(i=0;ix;i+)for(j=0;jy;

27、j+);void main()while(1)uchar i,coun=0;uchar shift=0 x01;for(i=0;i5;i+)P1=tablecoun+1;P3=shift;delay(3);P3=0 x00;/這句話在仿真(fn zhn)的時候很重要coun+;shift=shift1;共一百頁C語言 顯示(xinsh)12345和hello,判斷P1.7#include#define uchar unsigned charcode uchar table=0 x06,0 x5b,0 x4f,0 x66,0 x6d;/12345,為何和教材(jioci)不一致?code uch

28、ar hello=0 x76,0 x79,0 x38,0 x38,0 x3F;/hellosbit P17=P17;void main()uchar I,shift;P17=1;while(1)shift=0 x01;for(i=0;i5;i+)if(P17=0) P1=tablei;else P1=helloi;P3=shift;delay(3);P3=0 x00;/消隱shift=shift1;共一百頁 用匯編語言編程 ORG 0000H MOV P3,#0 ;清顯示(xinsh)TEST:SETB P1.7 JB P1.7,DIR1 ;檢測開關 MOV DPTR,#TAB 1 ; 開關置

29、于1,12345字形表頭地址 SJMP DIRDIR1: MOV DPTR,#TAB2 ; 開關置于2,“HELLO”字形表頭DIR: MOV R0,#0 ;R0存字形表偏移量 MOV R1,#01 ;R1置數碼表位選代碼NEXT:MOV A,R0 MOVC A,A+DPTR ; 查字形碼表1 MOV P1,A ;送P1口輸出 共一百頁 MOV A,R1 MOV P3,A ;輸出(shch)位選碼 ACALL DAY ;延時 INC R0 ;指向下一位字形 RL A ;指向下一位 MOV R1,A CJNE R1,#20H,NEXT ;五個 數碼管顯示完? SJMP TESTDAY:MOV R

30、6,#20 ; 延時20ms子程序DL2: MOV R7,#7DHDL1: NOP NOP共一百頁 DJNZ R7,DL1 DJNZ R6,DL2 RETTAB1:db 06H,5BH,4FH,66H,6DH ; “15”的字形碼TAB2:db 76H,79H,38H,38H,3FH ; “HELLO”的字形碼 END相關動作演示(ynsh):5只數碼管滾動顯示數字串.DSNText9.asm共一百頁4.1.3.2用并行口設計鍵盤電路 鍵盤是計算機系統(tǒng)中不可缺少的輸入設備,當按鍵少時可接成線性鍵盤(P76,圖5.3中的按鍵 ),當按鍵較多時,這樣的接法占用口線較多。將按鍵接成矩陣的形式,可以節(jié)

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

32、查表,查出該鍵的功能。也可由硬件編碼器完成鍵的編碼。共一百頁 下圖中,用8XX51的并行口P1接44矩陣鍵盤,以P1.0P1.3作輸出線,以P1.4P1.7作輸入線,鍵盤掃描程序(chngx)的流程如圖5.7所示。共一百頁 鍵碼為: EE DE BE 7E ED DD BD 7D EB DB BB 7B E7 D7 B7 77負邏輯表示-行列線數據求反組合,上例中的各鍵值分別為: 11 21 41 81 12 22 42 82 14 24 44 84 18 28 48 88 01234812演示(ynsh):數碼管顯示44矩陣按鍵.DSN Text10.asm共一百頁開發(fā)板上的鍵值編碼(bin

33、 m) 鍵碼為: 0 1 2 3 EE ED EB E7 4 5 6 7 DE DD DB D7 BE BD BB B7 7E 7D 7B 77 共一百頁N輸出(shch)鍵編碼P0讀P1.3P1.4值置行掃描(somio)初值掃描位從P1口輸出行首鍵號和列號相加得鍵編碼掃到最后一行?YN(有鍵按下)N開始P1.0P1.3輸出0延時去抖動P1.4P1.7全為1?P1.4P1.7全為1?YYY(無鍵按下)共一百頁 對鍵盤的程序流程圖5.7說明如下: 當P1.0P1.3輸出0時,如無鍵按下,P1.4P1.7的輸入值均為“1”,如果其中有一個不是 “1”,說明有鍵按下,再使P1.0P1.3逐個輸出零

34、(行掃描),檢查P1.4P1.7的輸入值有 無零,從而查出是哪行哪列的鍵按下。在判按鍵時,按鍵有抖動,可采用延時后再重讀以跳 過抖動時段(也可用R-S觸發(fā)器閂鎖電路(dinl)硬件消抖,但這樣電路(dinl)復雜,在矩陣鍵盤中不采用)。數碼管顯示44矩陣按鍵(n jin).DSN4x4鍵盤例程44鍵盤.c4x4鍵盤例程44鍵盤.Uv2共一百頁程序清單如下(rxi): ORG 0000HLJMP START ORG 0100HSTART: MOV P0,#00TEST: MOV P1,#0F0H MOV A,P1 ANL A,#0F0H CJNE A,#0F0H,HAVE SJMP TESTHA

35、VE:ACALL TM12S MOV P1,#0F0H MOV A,P1 ANL A,#0F0H CJNE A,#0F0H,LK2 SJMP TESTLK2: MOV R2,#0FEH;P1.0先置零 MOV R4,#00H ;置首行鍵值的首鍵號LK4: MOV A,R2 MOV P1,A MOV A,P1 JB ACC.4,CONE MOV A,#0 AJMP LKPCONE: JB ACC.5,CTWO MOV A,#1 AJMP LKPCTWO: JB ACC.6,CTHR MOV A,#2 AJMP LKPCTHR:JB ACC.7,NEXT MOV A,#3LKP: ADD A,R4

36、 MOV DPTR,#TAB MOVC A,A+DPTR CPL A MOV P0,A ACALL TM12S SJMP KND 共一百頁 NEXT: MOV A,R4 ADD A,#04H ;置下一行(yxng)鍵值的首鍵號 MOV R4,A MOV A,R2 JNB ACC.3,KND ;判斷是否掃描到第四行 RL A ; P1.1置零,掃描第二行 MOV R2,A AJMP LK4KND: AJMP TESTTM12S:MOV R7,#18H TM: MOV R6,#0FFHTM6: DJNZ R6,TM6 DJNZ R7,TM RETTAB: DB 0C0H,0F9H,0A4H,0B0

37、H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,00END共一百頁共一百頁4.1.4 并行接口小結(xioji) 1. 四個并行口均可作為輸入輸出接口使用,但又有各自(gz)的特點。因PO口是數據線和低八位的 地址線,因此不用它作輸入/輸出接口,而是用它傳輸數據和低八位的地址信息,除非在不 接其他外圍芯片的情況下才作I/O接口使用,此時由于內部漏極開路,需外接上拉電阻。四個口的使用特點是本章的重點。 并行接口是單片機用得最多的部分,可直接接外部設備(要注意電平的匹配)。本章以最簡單 的實驗室最容易實現(xiàn)的外部設備開關和發(fā)光二極管為例說明并

38、行口的應用設計,其他外設 的測控原理與其一樣。共一百頁3. 在應用設計中應理解,計算機內由數字電路組成只存在(cnzi)兩種TTL電平,高電平3.55V和低 電平0V,對應著的數字為“1”和“0”。 外設的狀態(tài)要通過電路轉換成高、低電平,計算機才能識別(如開關電路)。 計算機輸出數據“1”即輸出3.5V5V,輸出數據“0”即輸出0V,根據外設需要的電平要求 輸出“1”或“0”數據,這就是程序控制外設的本質。 2. 當并行口作為輸入口使用時,應對所用的口線寫“1”,使其內部的驅動場效應管截止 ,防止誤讀。寫“1”以后不影響(yngxing)讀引腳指令,因為讀入的信息是經緩沖器2(見圖4.1)進入

39、C PU的,而不是讀的鎖存器。共一百頁4.2.1 8XX51中斷系統(tǒng)結構 在CPU和外設交換信息時,存在著快速CPU和慢速外設間的矛盾,機器內部有時也可能出現(xiàn)突發(fā)事件,為此,計算機中通常采用中斷技術。中斷 CPU和外設并行工作,當外設數據準備好( 或有某種突發(fā)事件發(fā)生)時向CPU提出請求,CPU暫停正在(zhngzi)執(zhí)行的程序轉而為該外設服務(或處 理緊急事件),處理完畢再回到原斷點繼續(xù)執(zhí)行原程序。中斷源 引起中斷的原因,中斷申請的來源,中斷源可以是I/O設備、故障、時鐘、調試中人為設置。4.2 MCS51單片機的中斷(zhngdun)系統(tǒng)共一百頁 中斷優(yōu)先級 當有多個中斷源同時 向CPU申

40、請中斷時,CPU優(yōu)先響應最需緊急處理的中斷請求,處理完畢再響應優(yōu)先級別較低的 ,這種預先安排的響應次序。 中斷的嵌套 在中斷系統(tǒng)中,高優(yōu)先級的 中斷請求能中斷正在進行的較低級的中斷源處理, 本章將討論(toln)MCS51系列單片機的中斷系統(tǒng)。 共一百頁中斷請求是在執(zhí)行程序的過程中的隨機發(fā)生的,中斷系統(tǒng)要解決的問題是:1)CPU在不斷的執(zhí)行指令中,是如何檢測到隨機發(fā)生的中斷請求?2)如何使中斷的雙方(CPU方和中斷源方)均能人為控制,允許中斷或禁止中斷。3)由于中斷產生的隨機性,不可能在程序中安排(npi)調子程序指令或轉移指令,那么如何實現(xiàn)正確的轉移,以便為該中斷源服務呢?4)中斷源有多個,

41、而CPU只有一個,當有多個中斷源同時有中斷請求時,用戶怎么控制 CPU 按照自己的需要安排響應次序?5)中斷服務完畢,如何正確地返回到原斷點處?共一百頁 8XX51有5個中斷源,3個在片內,2個在片外,它們在程序(chngx)存貯器中有固定的中斷入口地址, 當CPU響應中斷時,硬件自動形成這些地址,由此進入中斷服務程序(chngx);5個中斷源有兩級中斷優(yōu)先級,可形成中斷嵌套;4.2.2.1 中斷源 8XX51有5個中斷源,其符號、名稱、產生條件(tiojin)及中斷服務程序的入口地址如下表。共一百頁符號 名 稱 中 斷 引 起 原 因 中斷服務程序入口INT0 外部中斷0 P3.2引腳的低電

42、平或下降沿信號 0003HINT1 外部中斷1P3.3引腳的低電平或下降沿信號 0013HT0定時器0中斷 定時計數器0計數回零溢出 000BHT1定時器1中斷 定時計數器1計數回零溢出 001BHTI/RI 串行口中斷 串行通信完成一幀數據發(fā)送或接收引起中斷 0023H共一百頁4.2.2.2 中斷控制(kngzh)的有關寄存器(1)中斷的允許和禁止中斷控制寄存器IE IE寄存器的各位對應相應的中斷源,如果(rgu)允許該中斷源中斷則該位置1,禁止中斷則該位置0 。EA - - ES ETI EX1 ET0 EX0中斷總控允/禁 不 用 不用 串行口允/禁 T1允/禁 INT1允/禁 T0允/

43、禁 INT0允/禁 共一百頁EA:中斷總控開關,是CPU是否響應中斷的前提。 EA=1,CPU開中斷; EA=0, CPU關中斷。ES: 串行口中斷允許位, ES=1,允許串行口發(fā)送/接收中斷; ES=0,禁止串行口中斷。ET1:定時器T1中斷允許位, ET1=1,允許T1計數(j sh)溢出中斷; ET1=0,禁止T1中斷。共一百頁ET0: 定時器T0中斷允許位, ET0=1,允許T1計數溢出(y ch)中斷; ET0=0,禁止T0中斷。EX1: 外部中斷INT1允許位, EX1=1,允許INT1中斷; EX1= 0,禁止INT1中斷。EX0: 外部中斷INT0允許位, EX0=1,允許IN

44、T0中斷; EX0= 0,禁止INT0中斷。 共一百頁說明: IT0和IT1為外中斷INT0 和INT1中斷觸發(fā)方式選擇(xunz),若選下降沿觸發(fā)則相應位置1;若選低電平觸發(fā) ,IT相應位置0。 IE0、 IE1, TF0、 TF1,某中斷源有中斷請求,該中斷標志置1,無中斷請求,該中斷標志置0 。這是中斷請求標記TR0 和 TR1 為定時器T0和T1 工作啟動和停止控制。 TF1 TR1TF0 TR0 IE1IT1 IE0IT0T1 請求有/無 T1工作啟/停 T0 請求有/無 T0 工作啟/停 INT1 請求有/無 INT1方式下沿/ 低電平 INT0請求有/無 INT0方式下沿/低電平

45、 (2)中斷(zhngdun)請求標志及外部中斷(zhngdun)方式選擇寄存器TCON共一百頁(3)中斷(zhngdun)優(yōu)先級管理寄存器IP -PSPT1PX1PT0PX0無用位無用位無用位串行 口高/低 T1高/低 INT1高/低 T0高/低 INT0高/低 T0INT0INT1T1串行口 當 某幾個中斷源在IP寄存器相應位同為1或同為零時,由內部(nib)查詢確定優(yōu)先級,查詢的順序是:CPU優(yōu)先響應 先查詢的中斷請求五個中斷源的優(yōu)先級別由IP寄存器管理,相應位置1,則該中斷源優(yōu)先級別高,置0的優(yōu)先級 別低。共一百頁MCS_51系列單片機的中斷(zhngdun)結構如圖所示。 共一百頁4

46、.2.2 中斷(zhngdun)響應過程 一、中斷處理過程 中斷處理過程分為(fn wi)四個階段:中斷請求,中斷響應,中斷處理、中斷返回。MCS51系列單 片機的中斷過程流程如圖所示。 共一百頁NNYYYN執(zhí) 行 指 令中斷(zhngdun)標志1?(中斷請求?) 指令最后(zuhu)一個T周期?EA=1?允 許 位 = 1?CPU 判 別優(yōu) 先權 ,響 應優(yōu) 先權高 的中斷斷點的PC進棧, 中斷服務入口地址送PC撤 除 中 斷 標 志中 斷 服 務中 斷 返 回, 斷 點 出 棧 送 PC 中斷請求.中斷響應中斷服務中斷返回共一百頁中斷請求、中斷響應過程由硬件完成。中斷服務程序應根據需要進

47、行編寫。程序中要注意保護現(xiàn)場和恢復現(xiàn)場。中斷返回是通過執(zhí)行一條RETI中斷返回指令,使堆棧中被壓入的斷 點地址送PC,從而返回主程序的斷點繼續(xù)執(zhí)行主程序。另外RETI還有恢復優(yōu)先級狀態(tài)(zhungti)觸發(fā)器 的作用,因此不能以RET指令代替“RETI”指令。 共一百頁 若某個(mu )中斷源通過編程設置,處于被打開的狀態(tài),并滿足中斷響應的條件,然而下面三種情 況單片機不響應此中斷:當前正在執(zhí)行的那條指令沒執(zhí)行完;當前響應了同級或高級中斷;正在操作IE、IP中斷控制寄存器或執(zhí)行RETI指令。 在正常的情況下,從中斷請求信號有效開始,到中斷得到響應,通常需要3個機器周期到8個機器周期。二、中斷請

48、求的撤除 CPU響應中斷后,應撤除該中斷請求標志,否則(fuz)會再次中斷。共一百頁 對電平觸發(fā)的外部中斷,CPU在響應中斷時也不會自動清除(qngch)中斷標志,因此,在CPU響應中斷后應立即撤除INT1或INT0的低電平信號(注意這是硬件電路的設計問題)。 對定時計數器T0、T1的溢出中斷,CPU響應(xingyng)中斷后,硬件自動清除中斷請求標志TF0和TF1。 對邊沿觸發(fā)的外部中斷INT1和INT0,CPU響應中斷后硬件自動清除中斷請求標志IE0和IE1。 對于串行口中斷,CPU響應中斷后,沒有用硬件清除中斷請求標志TI、RI,即這些中斷標志 不會自動清除,必須用軟件清除,這是在編串

49、行通信中斷服務中應該注意的。共一百頁4.2.3 中斷(zhngdun)的程序設計 用戶對中斷的控制和管理,實際是對4個與中斷有關的寄存器IE、TCON、IP、SCON進行控制 或管理。這幾個(j )寄存器在單片機復位時是清零的,因此必須根據需要對這幾個(j )寄存器的有關 位進行預置。在中斷程序的編制中應注意:開中斷總控開關EA,置位中斷源的中斷允許位。對外部中斷INT0、INT1應選擇中斷觸發(fā)方式。編寫中斷服務程序,并注意用保護現(xiàn)場和恢復現(xiàn)場,以免中斷返回時,丟失原寄存器、累加器中的信息。多個中斷源中斷,應設定中斷優(yōu)先級,預置IP。 若要在執(zhí)行當前中斷程序時禁止更高優(yōu)先級中斷,可以采 用軟件

50、關CPU中斷或禁止某中斷源中斷,在中斷返回前再開放中斷。共一百頁 匯編語言的中斷服務程序按規(guī)定的中斷矢量地址存入,由于五個中斷矢量地址0003H、000BH 、0013H、001BH、0023H之間相距很近,往往裝不下一個中斷服務程序,通常將中斷服務程 序安排在程序存貯器的其他(qt)地址空間,而在矢量地址的單元中安排一條轉移指令。一、匯編語言中斷程序(chngx)的設計共一百頁 例1. 在圖6.3中P1.4P1.7接有四個發(fā)光二極管,P1.0P1.3接有四個開關,消抖電路(dinl)用于 產生中斷請求信號,當消抖電路(dinl)的開關來回拔動一次將產生一個下降沿信號,通過INT0向CPU申請

51、中斷,要求:初時發(fā)光二極管全黑,每中斷一次,P1.0P1.3所接的 開關狀態(tài)反映到發(fā)光二極管上,且要求開關斷開的對應發(fā)光二極管亮,編程如下: 共一百頁、中斷控制(kngzh) 開關和LED.DSN共一百頁 ORG 0000H AJMP MAIN ORG 0003H ;INT0中斷入口 AJMP WBI ; 轉中斷服務程序 ORG 0030H ;主程序 MAIN: MOV P1,#0FH ;全燈滅,低四位輸入 SETB IT0 ; 邊沿觸發(fā)(chf)中斷 SETB EX0 ;允許外中斷0中斷 SETB EA ;開中斷開關 SJMP $ WBI: MOV P1,#0FH ;P1先寫入“1”且燈滅

52、MOV A,P1 ;輸入開關狀態(tài) SWAP A MOV P1,A ;輸出到P1高4位 RETI END共一百頁 此例的執(zhí)行現(xiàn)象是,每重置一次四個開關的開、合狀態(tài),四個發(fā)光(f un)二極管維持原來的亮、滅 狀態(tài),僅當來回拔動消抖電路開關后,產生了中斷,發(fā)光(f un)二極管才反映新置的開關狀態(tài)。 例2. 89C51的P1口接一個共陰極的數碼管,利用消抖開關產生中斷請求信號,每來回拔動一 次開關,產生一次中斷,用數碼管顯示中斷的次數(csh)(最多不超過15次)。INT0中斷計數.DSN 共一百頁P1.189C51P1.0P1.2P1.4P1.3P1.5P1.6&1K 2INT0驅動器+5Vag

53、圖6.EA共一百頁 ORG 0000H AJMP MAIN ORG 0013H ;INT1中斷入口 AJMP INT1 ;轉中斷服務程序 ORG 0030H ;主程序MAIN: SETB IT0 ;邊沿觸發(fā)中斷 SETB EX0 ;允許INT0中斷 SETB EA ;開中斷開關(kigun) MOV R0,#0 ;計數初值為0 MOV A,#3FH ;“0”的字形碼送AAL1: MOV P1,A ;顯示數碼AL2: CJNE R0,#0FH,AL1 ;沒滿15次循環(huán)顯示 MOV R7,#0FFH ;滿15次,顯F,延時 Text11_1.asm共一百頁 DJNZ R7, MOV P1,#0 ;

54、關顯示 CLR EA ;關中斷 SJMP ;結束INT1: INC R0 ;中斷次數(csh)加1 MOV A,R0 MOV DPTR,TAB ;DPTR指向字形碼表首址 MOVC A,A+DPTR ;查表 POP DPH POP DPL ;彈出斷點 MOV DPTR,#AL1 PUSH DPL PUSH DPH ;修改中斷返回點,AL1壓入堆棧 RETI ;從堆棧AL1地址PC,返主程序AL1處 共一百頁 TAB: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,79H,71H ;段碼表(字形碼) END 上面

55、程序(chngx)每中斷一次,執(zhí)行一次中斷服務程序(chngx)INT0。在中斷服務程序中,累計中斷次數并 查字形表,返回到主程序AL1地址執(zhí)行顯示。共一百頁 以上中斷在AL1或AL2兩指令處發(fā)生,究竟是哪一指令處中斷是隨機的,為保證返回到AL1顯示F ,這里采用修改中斷返回點的辦法, 即先從棧中彈出中斷響應時壓入的 斷點彈到DPTR中,修改DPTR為用戶需要的返回點,并將其壓 入堆棧,再通過執(zhí)行RETI指令彈出棧中內容到PC、彈出的即為修改后的地址,從而返回到主 程序中用所希望的地址執(zhí)行。 上例中中斷次數在主程序判斷,目的是使讀者了解修改中斷返回點的方法,如果改在中斷服 務程序中判斷,編程簡

56、潔(jinji)些,下面僅介紹和上例中的不同部分的程序。 共一百頁 MOV R0, #0 ;計數初值為0 MOV P1, #3FH ;顯示0 MOV DPTR,#TAB ;指向字形碼表AGA: SJMP ;等待中斷(zhngdun)INT1:INC R0 ;中斷次數加1 MOV A, R0 MOVC A, A+DPTR ;查字形碼表 MOV P1, A ;顯示 CJNE R0, #0FH, RE ; 15次中斷未到轉RE CLR EA ;15次到關中斷RE: RETI ;返回主程序的AGA處TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,7

57、7H,7CH,39H,5EH,79H,71HText11_2.asm共一百頁共一百頁 C51使用戶能編寫高效的中斷服務(fw)程序,編譯器在規(guī)定的中斷源的矢量地址中放入無條件轉移指令,使CPU響應中斷后自動地從矢量地址跳轉到中斷服務(fw)程序的實際地址,而無需用戶去安排。中斷服務(fw)程序定義為函數,函數的完整定義如下。 其中interrupt n 表示將函數聲明為中斷服務函數,n 為中斷源編號,可以是031間的整數 ,不允許是帶運算符的表達式,n 通常(tngchng)取以下值:返回值 函數名(參數)模式再入interrupt nusing m6.3.2 C51中斷程序的設計共一百頁 0 外部中斷0; 1 定時器/計數器0溢出中斷 2 外部中斷1; 3 定時器/計數器1溢出中斷 4 串行口發(fā)送與接收中斷 Using m 定義函數使用的工作寄存器組,m的取值范圍為03,可缺省,它 對目標(mbio)代碼的影響是:函數入口處將當前寄存器保存,使用m指定的寄存器組,函數退出時原寄存器組恢復。選不同的工作寄存器組,可方便實現(xiàn)寄存器組的現(xiàn)場保護。 共一百頁 再入: 屬性關鍵字reentrant將函數定義(dngy)為再入的,在C51中,普通函數(非再入的)不能遞歸調用, 只有再入函數才可被遞歸調用。 中斷服務

溫馨提示

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

評論

0/150

提交評論