版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第五章單片機(jī)內(nèi)的功能模塊第一頁,共九十四頁,2022年,8月28日P0~P3口的每一位口鎖存器都是一個D觸發(fā)器,復(fù)位以后的初態(tài)為1。CPU通過內(nèi)部總線把數(shù)據(jù)寫入口鎖存器。CPU對口的讀操作有兩種:一種是讀-修改-寫指令(例如ANLP1,#0FEH),讀口鎖存器的狀態(tài),此時口鎖存器的狀態(tài)由Q端通過上面的三態(tài)輸入緩沖器送到內(nèi)部總線,一種是讀指令(例如MOVA,P1),CPU讀取口引腳上的外部輸入信息,這時引腳狀態(tài)通過下面的三態(tài)輸入緩沖器傳送到內(nèi)部總線。 P1、P2和P3口內(nèi)部有拉高電路,稱為準(zhǔn)雙向口。P0口是開漏輸出的,內(nèi)部沒有拉高電路,是三態(tài)雙向I/O口。
第二頁,共九十四頁,2022年,8月28日P1口為準(zhǔn)雙向口,它的每一位可以分別定義為輸入線或輸出線,即用戶可以把P1口的某些位作為輸出線使用,另外的一些位作為輸入線使用。5.1.1P1口一、P1口特性P1口的某一位作為輸出線時,將“1”寫入P1口的某一位口鎖存器,則Q端上的輸出場效應(yīng)管T截止,該位的輸出引腳由內(nèi)部的拉高電路拉成高電平,輸出“1”;將“0”寫入口鎖存器,輸出場效應(yīng)管T導(dǎo)通,引腳輸出低電平,即輸出“0”。內(nèi)部總線讀鎖存器寫鎖存器讀引腳VCC內(nèi)部提升P1.XPINDCLQQ第三頁,共九十四頁,2022年,8月28日二、P1口的操作P1口的字節(jié)地址為90H,位地址為90H~97H。對P1口的操作,可以采用字節(jié)操作,也可以采用位操作。復(fù)位以后,口鎖存器為1。對于作為輸入的口線,相應(yīng)位的口鎖存器不能寫入0。P1口的某一位作為輸入線時,該位的口鎖存器必須保持“1”,使輸出場效應(yīng)管T截止,這時該位引腳由內(nèi)部拉高電路拉成高電平,也可以由外部的電路拉成低電平,CPU讀P1引腳狀態(tài)時實(shí)際上就是讀出外部電路的輸入信息。P1口作為輸入時,可以被任何TTL電路和MOS電路所驅(qū)動,由于內(nèi)部具有提升電路,也可以被集電極開路或漏極開路的電路所驅(qū)動。 第四頁,共九十四頁,2022年,8月28日
例1的子程序采用字節(jié)操作指令將開關(guān)狀態(tài)送指示燈顯示,Ki閉合,Li亮。KLA:MOV A,P1SWAP AORL A,#0F0H;保持P1.4~P1.7口鎖存器為1MOV P1,ARET第五頁,共九十四頁,2022年,8月28日例2KLB:MOV C,P1.4 MOV P1.0,C MOV C,P1.5 MOV P1.1,C MOV C,P1.6 MOV P1.2,C MOV C,P1.7 MOV P1.3,C RET例2用位操作指令實(shí)現(xiàn)同樣的功能。第六頁,共九十四頁,2022年,8月28日 一、P3口特性 P3口為多功能口,它的第一功能為準(zhǔn)雙向口,其特性和P1口相似,可以作為通用I/O口使用。它的第二功能為特殊輸入/輸出線,P3口的第二功能定義如下:5.1.2P3口P3.0 RXD(串行輸入線)P3.1 TXD(串行輸出線)P3.2 INT0(外部中斷0輸入線)P3.3 INT1(外部中斷1輸入線)P3.4 T0(定時器T0外部計(jì)數(shù)脈沖輸入線)P3.5 T1(定時器T1外部計(jì)數(shù)脈沖輸入線)P3.6 WR(外部數(shù)據(jù)存儲器寫脈沖輸出線)P3.7 RD(外部數(shù)據(jù)存儲器讀脈沖輸出線)第七頁,共九十四頁,2022年,8月28日
二、P3口的操作
例3 ANL P3,#0DFH ;0P3.5 CLR P3.5 ;0P3.5
ORL P3,#20H
;1
P3.5 SETB P3.5 ;1
P3.5 XRL P3,#20H ;P3.5取反 CPL P3.5 ;P3.5取反第八頁,共九十四頁,2022年,8月28日
一、P2口特性 P2口也有兩種功能:對于內(nèi)部有程序存貯器的單片機(jī),P2口可以作為輸入口或輸出口使用,直接連接輸入/輸出設(shè)備;也可以作為系統(tǒng)擴(kuò)展的地址總線口,輸出高8位地址A8~A15。對于內(nèi)部沒有程序存貯器的單片機(jī),必須外接程序存貯器,P2口只能作為系統(tǒng)擴(kuò)展的高8位地址總線口,而不能作為外部設(shè)備的輸入/輸出口。5.1.3P2口第九頁,共九十四頁,2022年,8月28日
(1)對于內(nèi)部有程序存貯器的單片機(jī)所構(gòu)成的基本系統(tǒng),既不擴(kuò)展程序存貯器,也不擴(kuò)展RAM/IO口,這時P2口作為通用I/O口使用,和P1口一樣,是一個準(zhǔn)雙向口,對P2口操作可以采用字節(jié)操作,也可以采用位操作。
例4 XRL P2,#1;P2.0取反 CPL P2.0;P2.0取反
(2)對于只擴(kuò)展少量外部RAM/IO口,其地址范圍在0~255之間,P2口也可以作為I/O口使用。對外部RAM/IO口操作,只能使用R0或R1作地址指針,不能用DPTR作址址指針。二、P2口操作第十頁,共九十四頁,2022年,8月28日
例5將33H寫入外部RAM的50H單元,CPU執(zhí)行下面的程序段不影響P2口輸出狀態(tài),因而是正確的: MOV R0,#50H MOV A,#33H MOVX @R0,A CPU執(zhí)行下面的程序段將影響P2口的輸出狀態(tài),因而是錯誤的; MOV DPTR,#50H MOV A,#33H MOVX @DTPR,A (3)對于既擴(kuò)展程序存貯器,又?jǐn)U展外部RAM/IO口的系統(tǒng),P2口不能作為I/O口使用,對外部RAM/IO口操作則可以用DPTR、P2R0、P2R1三個16位地址指針。
第十一頁,共九十四頁,2022年,8月28日
例6將33H寫入外部RAM的8200H,下面的程序段都是正確的: (1) MOV P2,#82H MOV R0,#0 MOV A,#33H MOVX @R0,A (2) MOV P2,#82H MOV R1,#0 MOV A,#33H MOVX @R1,A (3) MOV DPTR,#8200H MOV A,#33H MOVX @DPTR,A第十二頁,共九十四頁,2022年,8月28日5.1.5P0口
一、P0口特性
P0口為三態(tài)雙向I/O口。對于內(nèi)部有程序存貯器的單片機(jī),P0口可以作為輸入/輸出口使用,直接連外部的輸入/輸出設(shè)備;也可以作為系統(tǒng)擴(kuò)展的地址/數(shù)據(jù)總線口。對于內(nèi)部沒有程序存貯器的單片機(jī)(如8031),P0口只能作為地址/數(shù)據(jù)總線口使用。P0作為輸入/輸出口時應(yīng)外接10kΩ拉高電阻。當(dāng)輸出驅(qū)動器轉(zhuǎn)接至地扯/數(shù)據(jù)時,P0口作為地址/數(shù)據(jù)總線口使用,分時輸出外部存貯器的低8位地址A0~A7和傳送數(shù)據(jù)D0~D7。低8位地址先由地址允許鎖存信號ALE鎖存到外部的地址鎖存器中,接著P0口便輸入/輸出數(shù)據(jù)信息。P0口輸出的低8位地址來源于PCL、DPL、R0、R1等。第十三頁,共九十四頁,2022年,8月28日P0口為三態(tài)雙向I/O口,當(dāng)用作輸入口時,一般接10kΩ左右的拉高電阻。圖5-3所示的8751基本系統(tǒng)中,將一個開關(guān)K0接至P1.0和P0.0的電路有所差別,其原因是P1口內(nèi)部具有拉高電阻,P0.0必須外接拉高電阻,才能使開關(guān)K0閉合時讀P0.0引腳為0,K0斷開時讀P0.0引腳為1。二、P0口使用方法第十四頁,共九十四頁,2022年,8月28日 如前所述,MCS-51的P0口和P2口可以作為并行擴(kuò)展總線,可以擴(kuò)展64K字節(jié)程序存貯器和64K字節(jié)RAM/IO口,并行擴(kuò)展總線結(jié)構(gòu)如圖5-4所示。P2口輸出高8位地址A8~A15,P0口為復(fù)用口,先輸出低8位地址A0~A7,用ALE信號的負(fù)跳變將A0~A7送入地址鎖存器鎖存,P2口和地址鎖存器輸出作為地址總線,輸出地址A0~A15。在ALE將A0~A7送入地址鎖存器鎖存以后,接著P0口作為數(shù)據(jù)總線使用來傳送數(shù)據(jù)。在擴(kuò)展系統(tǒng)中,P3.6、P3.7作為外部RAM/IO口的讀/寫選通信號WR、RD,PSEN作為外部程序存貯器的讀選通信號。正是由于外部程序存貯器和RAM/IO口使用不同的讀選通信號,才使CPU通過16位地址總線訪問64K字節(jié)程序存貯器和64K字節(jié)RAM/IO口。
5.1.5MCS-51的并行擴(kuò)展總線第十五頁,共九十四頁,2022年,8月28日P2ALEP0WRRDPSEN地址鎖存器A8~A15A0~A7D0~D7(控制總線)(數(shù)據(jù)總線)(地址總線)MCS-51
5.1.5MCS-51的并行擴(kuò)展總線第十六頁,共九十四頁,2022年,8月28日
5.1.6MCS-51并行口電路小結(jié) 前面講述了MCS-51的并行口電路的邏輯和功能,下面把這些并行口在使用中的一些問題總結(jié)一下: 1.P0、P1、P2、P3都是并行I/O口,都可用于數(shù)據(jù)的輸入/輸出傳送,但P0和P2口除了可進(jìn)行數(shù)據(jù)的輸入/輸出外,通常是用來構(gòu)建系統(tǒng)的數(shù)據(jù)總線和地址總線。所以在口電路邏輯中有一個多路開關(guān),以便進(jìn)行兩種用途的轉(zhuǎn)換。而P1和P3口沒有構(gòu)建數(shù)據(jù)和地址總線的功能,因此在口電路邏輯中沒有多路開關(guān)。由于P0口可作為地址/數(shù)據(jù)復(fù)用線使用,輸送系統(tǒng)的低8位地址和8位數(shù)據(jù),因此多路開關(guān)的一個輸入端為“地址/數(shù)據(jù)”信號。而P2口僅作為高位地址線使用,不涉及數(shù)據(jù),所以多路開關(guān)的一個輸入信號為“地址”。第十七頁,共九十四頁,2022年,8月28日 2.在4個口中只有P0一個口是真正的雙向口,而其余的3個口都是準(zhǔn)雙向口。原因是在應(yīng)用系統(tǒng)中P0口作為系統(tǒng)的數(shù)據(jù)總線使用時,為了保證正確的數(shù)據(jù)傳送,需要解決芯片內(nèi)外的隔離問題,即只有在數(shù)據(jù)傳送時芯片內(nèi)外才接通;不進(jìn)行數(shù)據(jù)傳送時,芯片內(nèi)外應(yīng)處于隔離狀態(tài)。為此就要求P0口的輸出驅(qū)動器是一個三態(tài)門。在P0中輸出三態(tài)門是由兩個場效應(yīng)管(FET)組成的,所以說它是一個真正的的雙向口。而其它3個口中,上拉電阻代替了P0口中的場效應(yīng)管,輸出驅(qū)動器不是三態(tài)的,因此不是真正的雙向口,而只稱其為準(zhǔn)雙向口。 3.P3口的口線具有第二功能,為系統(tǒng)提供一些控制信號。因此在P3口電路中增加了第二功能控制邏輯。這是P3口與其它各不同之處。
第十八頁,共九十四頁,2022年,8月28日ALE:地址鎖存允許信號線,配合P0口引腳的第二功能使用。在訪問外部存儲器時,CPU在P0.7~P0.0引腳線上輸出外部RAM存貯器低8位地址的同時,還在ALE線上輸出一個高電位脈沖,用于把這個外部RAM存貯器低8位地址鎖存到外部專用地址鎖存器,以便空出P0.7~P0.0引腳線去傳送隨后而來的外部RAM存貯器讀寫數(shù)據(jù)。在不訪問外部存儲器時,自動在ALE上輸出頻率為fosc/6的脈沖序列,該脈沖序列可用作外部時鐘源或作定時脈沖使用。
PSEN:外部ROM讀選通信號線,在執(zhí)行訪問外部ROM的指令(MOVC)時,CPU自動在PSEN線上產(chǎn)生一個負(fù)脈沖,用于實(shí)現(xiàn)外部ROM芯片的選通。其他情況下,PSEN線均為高電平封鎖狀態(tài)。第十九頁,共九十四頁,2022年,8月28日定時器可以實(shí)現(xiàn)下列功能:
(1)定時操作:產(chǎn)生定時中斷,實(shí)現(xiàn)定時采樣輸入信號,定時掃描鍵盤、顯示器等定時操作;
(2)測量外部輸入信號:對輸入信號累加統(tǒng)計(jì)或測量輸入信號的周期等參數(shù);
(3)定時輸出:定時觸發(fā)輸出引腳的電平,使輸出脈沖的寬度、占空比、周期達(dá)到預(yù)定值,其精度不受程序狀態(tài)影響; (4)監(jiān)視系統(tǒng)正常工作:一旦系統(tǒng)工作異常時自動復(fù)位,重新啟動系統(tǒng)正常工作。(監(jiān)視定時器watchdog);5.2定時器第二十頁,共九十四頁,2022年,8月28日內(nèi)部時鐘外部時鐘N位計(jì)數(shù)器TF中斷電子開關(guān)方式控制計(jì)數(shù)控制溢出標(biāo)志5.2.1定時器的結(jié)構(gòu)和工作原理一、定時方式對于一個N位的加1計(jì)數(shù)器,若計(jì)數(shù)時鐘的頻率f已知,則從初值a開始加1計(jì)數(shù)至溢出所占用的時間為:T=1/f*(2N-a)第二十一頁,共九十四頁,2022年,8月28日5.2.2定時器/計(jì)數(shù)器T0和T1MCS-51系列的單片機(jī)內(nèi),共有兩個可編程的定時器/計(jì)數(shù)器,分別稱為定時器/計(jì)數(shù)器T0和T1。它們都是16位加法計(jì)數(shù)結(jié)構(gòu),直接與T0、T1有關(guān)的特殊功能寄存器有以下幾個:TH0、TL0、TH1、TL1、TMOD、TCON,另外還有中斷控制寄存器IE、IP。TH0、TL0為T0的16位計(jì)數(shù)器的高8位和低8位,TH1、TL1為T1的16位計(jì)數(shù)器的高8位和低8位,TMOD為T0、T1的方式寄存器,TCON為T0、T1的狀態(tài)和控制寄存器,存放T0、T1的運(yùn)行控制位和溢出中斷標(biāo)志位。
第二十二頁,共九十四頁,2022年,8月28日有關(guān)的寄存器TCON狀態(tài)和控制寄存器中斷允許寄存器IED7D6D5D4D3D2D1D0EA--ESET1EX1ET0EX0中斷優(yōu)先級控制器IPD7D6D5D4D3D2D1D0---PSPT1PX1PT0PX0D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0TMOD方式控制寄存器第二十三頁,共九十四頁,2022年,8月28日
一、方式寄存器TMOD 特殊功能寄存器TMOD為T0、T1的工作方式寄存器,其格式如下:
D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0
TMOD的低4位為T0的方式字段,高4位為T1的方式字段。1、工作方式選擇位M1、M0(方式0~3)2、C/T=0為定時方式;C/T=1為外部事件計(jì)數(shù)方式。3、門控位GATE,當(dāng)GATE=1受外部引腳控制,為0不受外部控制5.2.1定時器/計(jì)數(shù)器T0和T1第二十四頁,共九十四頁,2022年,8月28日特殊功能寄存器TCON的高4位為定時器的運(yùn)行控制位和溢出標(biāo)志位,低4位為外部中斷的觸發(fā)方式控制位和鎖存外部中斷請求源(見中斷一節(jié))。TCON格式如下:
D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0二、控制寄存器TCON第二十五頁,共九十四頁,2022年,8月28日1.定時器T0運(yùn)行控制位TR0TR0由軟件置位和清“0”。門控位GATE為0時,T0的計(jì)數(shù)僅由TR0控制,TR0=1時允許計(jì)數(shù),TR0=0時禁止計(jì)數(shù);門控位GATE為1時,僅當(dāng)TR0等于1且INT0(P3.2)輸入為高電平時T0才計(jì)數(shù),TR0為0或INT0輸入低電平時都禁止T0計(jì)數(shù)。2.定時器T0溢出標(biāo)志位TF0當(dāng)T0被允許計(jì)數(shù)以后,T0從初值開始加“1”計(jì)數(shù),最高位產(chǎn)生溢出時TF0置“1”。TF0可以由程序查詢和清“0”。TF0也是中斷請求源,當(dāng)CPU響應(yīng)T0中斷時由硬件對TF0清“0”。第二十六頁,共九十四頁,2022年,8月28日
3.定時器T1運(yùn)行控制位TR1
TR1由軟件置位和清“0”。門控位GATE為0時,T1的計(jì)數(shù)僅由TR1控制,TR1為“1”時允許T1計(jì)數(shù),TR1為“0”時禁止T1計(jì)數(shù);門控位GATE為1時,僅當(dāng)TR1為1且INT1(P3.3)輸入為高電平時T1才計(jì)數(shù),TR1為0或INT1輸入低電平時都將禁止T1計(jì)數(shù)。
4.定時器T1溢出標(biāo)志位TF1
當(dāng)T1被允許計(jì)數(shù)以后,T1從初值開始加“1”計(jì)數(shù),最高位產(chǎn)生溢出時置“1”TF1。TF1可以由程序查詢和清“0”,TF1也是中斷請求源,當(dāng)CPU響應(yīng)T1中斷時由硬件清“0”TF1。第二十七頁,共九十四頁,2022年,8月28日定時器T0有四種工作方式:方式0、方式1、方式2、方式3;定時器T1有三種工作方式:方式0、方式1、方式2。不同的工作方式計(jì)數(shù)器的結(jié)構(gòu)不同,功能上也有差別,下面以T0為例說明各種工作方式的結(jié)構(gòu)和工作原理。1.方式0當(dāng)M1M0為00時定時器工作于方式0。方式0為13位的計(jì)數(shù)器,由TL0的低5位和TH0的8位組成,TL0低5位計(jì)數(shù)溢出時向TH0進(jìn)位,TH0計(jì)數(shù)溢出時置“1”溢出標(biāo)志TF0。三、T0、T1的工作方式和計(jì)數(shù)器結(jié)構(gòu)第二十八頁,共九十四頁,2022年,8月28日fosc÷12TL0(5位)TH0(8位)TF0中斷控制C/T=0C/T=1T0腳(P3.4)INT0腳GATETR0定時時間設(shè)定:第二十九頁,共九十四頁,2022年,8月28日TH0TL0例7已知晶振頻率fOSC=6MHz,若使用T0方式0產(chǎn)生10ms定時中斷,試對T0進(jìn)行初始化編程。INIT0:MOVTH0,#63H MOVTL0,#18H SETTR0 ;允許T0計(jì)數(shù) MOVIE,#82H ;EA=1,CPU開放中斷RET ;ET0=1,允許T0中斷二進(jìn)制為:第三十頁,共九十四頁,2022年,8月28日INIT0:MOVTH0,#63HMOVTL0,#18HSETBTR0 ;允許T0計(jì)數(shù)MOVIE,#82H ;EA=1,CPU開放中斷RET ;ET0=1,允許T0中斷第三十一頁,共九十四頁,2022年,8月28日2.方式1方式1和方式0的差別僅僅在于計(jì)數(shù)器的位數(shù)不同,方式1為16位的定時器/計(jì)數(shù)器。T0工作于方式1時,由TH0作為高8位,TL0作為低8位,構(gòu)成一個16位計(jì)數(shù)器。若T0工作于方式1定時,計(jì)數(shù)初值為a,fosc=12MHz,則T0從計(jì)數(shù)初值加1計(jì)數(shù)到溢出的定時時間為:T=fosc÷12TL0(8位)TH0(8位)TF0中斷控制C/T=0C/T=1T0腳(P3.4)INT0腳GATETR0第三十二頁,共九十四頁,2022年,8月28日例8設(shè)fosc=12MHz,T0工作于方式1,產(chǎn)生50ms定時中斷,TF0為高級中斷源。試編寫主程序中的初始化程序和中斷服務(wù)程序,使P1.0產(chǎn)生周期為1秒的方波。根據(jù)公式:則得化為16進(jìn)制數(shù):a=3CB0H因此TH0初值為3CH,TL0初值為0B0H。第三十三頁,共九十四頁,2022年,8月28日 主程序:MAIN: MOVSP,#6FH ;棧指針初始化 MOVTH0,#3CH ;T0初始化 MOVTL0,#0B0H MOVTMOD,#1 ;T0工作于方式0,定時 MOVIP,#2 ;PT0=1,T0中斷定義為高 ;優(yōu)先級中斷 MOVIE,#82H ;中斷初始化 SETBTR0 MOV30H,#0AH ;工作單元初始化每10次 ;中斷(0.5秒) ;P1.0求反,用30H作中斷 ;次數(shù)計(jì)數(shù)器單元。第三十四頁,共九十四頁,2022年,8月28日T0中斷服務(wù)程序:PTF0:ORL TL0,#0B0H ;恢復(fù)T0初值MOV TH0,#3CHDJNE30H,PTF0R ;判斷中斷次數(shù)=10否?MOV 30H,#0AH ;恢復(fù)中斷次數(shù)存貯單元值CPL P1.0 ;P1.0求反PTF0R:RETI第三十五頁,共九十四頁,2022年,8月28日M1M0=10時,T0工作于方式2方式2為自動恢復(fù)初值的8位計(jì)數(shù)器,TL0作為作為8位計(jì)數(shù)器,TH0作為計(jì)數(shù)初值寄存器,當(dāng)TL0計(jì)數(shù)溢出時,一方面置“1”溢出標(biāo)志TF0,向CPU請求中斷,同時將TH0內(nèi)容送到TL0,使TL0從初值開始重新加1計(jì)數(shù)。因此,T0工作于方式2定時,定時精度比較高,但定時時間小, T=3.方式2GATEINT0腳fosc÷12TL0(8位)TH0(8位)TF0中斷控制C/T=0C/T=1T0腳(P3.4)TR0第三十六頁,共九十四頁,2022年,8月28日 例9設(shè)fosc=12MHz,T0工作方式2,產(chǎn)生250μs定時中斷(高級),試編寫主程序中的初始化程序和中斷程序,每1秒使時鐘顯示緩沖器30H~32H實(shí)時計(jì)數(shù),緩沖器分配如下30H十個31H十個32H十個時分秒 根據(jù)公式:
計(jì)算得: a=6在一秒內(nèi)產(chǎn)生4000次中斷。第三十七頁,共九十四頁,2022年,8月28日 主程序: MAIN:MOV SP,#6FH LCALLINICLK;調(diào)用時鐘初值設(shè)置子程序, ;通過鍵盤輸入初值,本例中略 MOV 36H,#0FH ;4000→中斷次數(shù)計(jì)數(shù)單元 MOV 37H,#0A0H MOV TMOD,#2 MOV TL0,#6 MOV TH0,#6 SETB TR0 MOV IE,#82H MOV IP,#2PTFO:PUSH PSW ;保護(hù)現(xiàn)場 PUSH ACC
MOV PSW,#8 ;選工作寄存器1區(qū)
第三十八頁,共九十四頁,2022年,8月28日DJNE37H,PTF0R;判中斷次數(shù)計(jì)數(shù)單元減1是否為0DJNE36H,PTF0R
MOV36H,#0FH;4000→中斷次數(shù)計(jì)數(shù)單元MOV37H,#0A0HMOVR0,#32H ;秒加1MOVA,@R0ADD A,#1DAAMOV @R0,ACJNEA,#60H,PTF0RMOV@R0,#0 ;秒清“0”DECR0MOVA,@R0ADDA,#1 ;分加1DA AMOV@R0,A第三十九頁,共九十四頁,2022年,8月28日
CJNE A,#60H,PTF0R
MOV @R0,#0 ;分清“0” DEC R0 MOV A,@R0 ADD A,#1 ;時加1 DA A MOV @R0,A
CJNE A,#24H,PTF0R
MOV @R0,#0PTF0R:POP ACC POP PSW RETI第四十頁,共九十四頁,2022年,8月28日
4.方式3
前三種工作方式下,對兩個定時器/計(jì)數(shù)器的設(shè)置和使用是完全相同的。但是在工作方式3下,兩個定時器/計(jì)數(shù)器的設(shè)置和使用卻是不同的。
1)工作方式3下的定時器/計(jì)數(shù)器T0
方式3只適用于T0,若T1被設(shè)置為工作方式3時,則使T1停止工作。T0方式字段中的M1M0為11時,T0被設(shè)置為方式3,此時T0的邏輯結(jié)構(gòu)如圖5-12所示,T0被分為兩個獨(dú)立的8位計(jì)數(shù)器TL0和TH0。TL0使用T0的所有狀態(tài)控制位GATE、TR0、INT0(P3.2)、T0(P3.4)、TF0等,TL0即可以作為8位定時器使用,又可以作為外部事件計(jì)數(shù)器使用。TL0計(jì)數(shù)溢出時置“1”溢出標(biāo)志TF0,TL0計(jì)數(shù)初值必須由軟件每次設(shè)定。其功能和操作與方式0或方式1完全相同,而且邏輯結(jié)構(gòu)也極其類似。與TL0的情況相反,TH0只能作為一個8位定時器使用。而且由于T0的所有狀態(tài)控制位已被TL0獨(dú)占,因此TH0只好借用T1的狀態(tài)控制位TR1、TF1。即當(dāng)TR1為1時,允許TH0計(jì)數(shù),當(dāng)TH0計(jì)數(shù)溢出時置“1”溢出標(biāo)志TF1。第四十一頁,共九十四頁,2022年,8月28日 由于TL0既能作定時器使用也能作計(jì)數(shù)器使用,而TH0只能作為定時器使用卻不能作為計(jì)數(shù)器使用,因此在工作方式3下,T0可以構(gòu)成兩個定時器或一個定時器一個計(jì)數(shù)器。 2)工作方式3下的定時器/計(jì)數(shù)器T1
如果T0已工作在方式3,則T1只能工作在方式0、方式1或方式2下,因?yàn)樗倪\(yùn)行控制位TR1及計(jì)數(shù)溢出標(biāo)志位TF1已被T0借用。 在這種情況下,T1通常是作為串行口的波特率發(fā)生器使用,以確定串行通信的速率。因?yàn)橐褯]有計(jì)數(shù)溢出標(biāo)志位TF1可供使用,因此只能把計(jì)數(shù)溢出直接送給串行口。 當(dāng)作為波特率發(fā)生器使用時,只需設(shè)置好工作方式,便可自動運(yùn)行。如要停止工作,只需送入一個把它設(shè)置為方式3的方式控制字就可以了。因?yàn)門1不能在方式3下使用,如果硬把它設(shè)置為方式3,就停止工作。第四十二頁,共九十四頁,2022年,8月28日 中央處理器CPU和外界的信息交換(或數(shù)據(jù)傳送)稱為通信,通常有并行和串行兩種通信方式,數(shù)據(jù)的各位同時傳送的稱為并行通信,數(shù)據(jù)一位一位串行地順序傳送的稱為串行通信。
并行通信的特點(diǎn)是:各數(shù)據(jù)位同時傳送,傳送速度快、效率高。但并行數(shù)據(jù)傳送有多少數(shù)據(jù)位就需多少根數(shù)據(jù)線,因此傳送成本高。并行數(shù)據(jù)傳送的距離通常小于30米,在計(jì)算機(jī)內(nèi)部的數(shù)據(jù)傳送都是并行的。
串行通信的特點(diǎn)是:數(shù)據(jù)傳送按位順序進(jìn)行,最少只需一根傳輸線即可完成,成本低但速度慢。計(jì)算機(jī)與外界的數(shù)據(jù)傳送大多數(shù)是串行的,其傳送的距離可以從幾米到幾千公里。串行通信是通過串行口來實(shí)現(xiàn)的,MCS-51有一個全雙工(數(shù)據(jù)的傳送是雙向的,可以同時發(fā)送和接收)的異步串行接口可以用于串行數(shù)據(jù)通信。 串行通信有兩種基本方式:異步通信和同步通信方式。5.3串行接口第四十三頁,共九十四頁,2022年,8月28日
一、異步通信方式是以字符(或字節(jié))為單位組成字符幀傳送的。字符幀由發(fā)送端一幀一幀地發(fā)送,通過傳輸線為接收設(shè)備一幀一幀地接收。 那么,究竟發(fā)送端和接收端依靠什么來協(xié)調(diào)數(shù)據(jù)的發(fā)送和接收呢?也就是說,接收端怎么會知道發(fā)送端何時開始發(fā)送和何時結(jié)束發(fā)送呢?這是由字符幀格式規(guī)定的。平時,發(fā)送線為高電平(邏輯“1”),每當(dāng)接收端檢測到傳輸線上發(fā)送過來的低電平邏輯“0”(字符幀中起始位)時就知道發(fā)送端已開始發(fā)送,每當(dāng)接收端接收到字符幀中的停止位時就知道一幀字符信息已發(fā)送完畢。 典型的異步通信數(shù)據(jù)格式如下。 起始位D0D1D2D3D4D5D6D7停止位第四十四頁,共九十四頁,2022年,8月28日
1.字符幀:字符幀也叫數(shù)據(jù)幀,由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位等四部分組成。如上圖。
2.起始位:位于字符幀開頭,只占一位,始終為邏輯“0”,用于向接收設(shè)備表示發(fā)送端開始發(fā)送一幀數(shù)據(jù)。3.數(shù)據(jù)位:緊跟起始位之后,用戶根據(jù)情況可取5位、6位、7位或8位,低位在前高位在后。若所傳數(shù)據(jù)為ASCⅡ字符,則常取7位。
4.奇偶校驗(yàn)位:位于數(shù)據(jù)位之后,僅占一位。用于對字符傳送作正確性檢查,因此,奇偶校驗(yàn)位是可選擇的,采用奇校驗(yàn)還是偶校驗(yàn),由用戶根據(jù)需要決定。
5.停止位:位于字符幀末尾,為邏輯“1”高電平,通常可取1位、1.5位或2位,用于向接收端表示一幀字符信息已發(fā)送完畢,也為下一幀字符作準(zhǔn)備。6.波特率:串行通信中每秒傳送的數(shù)據(jù)位樹稱為波特率對異步通信數(shù)據(jù)格式作如下說明:第四十五頁,共九十四頁,2022年,8月28日
同步通信是按數(shù)據(jù)塊傳送的,把傳送的字符順序地連接起來,組成數(shù)據(jù)塊(見圖5-23),在數(shù)據(jù)塊前面加上特殊的同步字符(有1—2個),作為數(shù)據(jù)塊的起始符號(接收端不斷對傳輸線采樣,并把采樣到的字符和雙方約定的同步字符比較,只有比較成功后才會把后面接收到的字符加以存儲)。數(shù)據(jù)字符在同步字符之后,個數(shù)不受限制,由所需傳輸?shù)臄?shù)據(jù)塊長度決定;在數(shù)據(jù)塊的后面加上校驗(yàn)字符(有1—2個),位于數(shù)據(jù)末尾,用于接收端對接收到的數(shù)據(jù)字符的正確性校驗(yàn)。在同步通信中字符之間沒有間隔的,通信效率比較高。同步字符1同步字符2N個數(shù)據(jù)字節(jié)校驗(yàn)字符1校驗(yàn)字符2二、同步通信方式第四十六頁,共九十四頁,2022年,8月28日 MCS-51的串行口是一個全雙工的異步串行通信接口,可以同時發(fā)送和接收數(shù)據(jù)。 串行口的內(nèi)部有數(shù)據(jù)接收緩沖器和數(shù)據(jù)發(fā)送緩沖器。數(shù)據(jù)接收緩沖器只能讀出不能寫入,數(shù)據(jù)發(fā)送緩沖器只能寫入不能讀出,這兩個數(shù)據(jù)緩沖器都用符號SBUF來表示,地址都是99H。CPU對特殊功能寄存器SBUF執(zhí)行寫操作,就是將數(shù)據(jù)寫入數(shù)據(jù)發(fā)送緩沖器;對SBUF執(zhí)行讀操作,就是讀出數(shù)據(jù)接收緩沖器的內(nèi)容。 與串行通信有關(guān)的特殊功能寄存器共有4個:特殊功能寄存器SCON存放串行口的控制和狀態(tài)信息。串行口用定時器T1或T2(8052等)作為波特率發(fā)生器(發(fā)送接收時鐘)。特殊功能寄存器PCON的最高位SMOD為串行口波特率的倍率控制位。中斷允許寄存器IE的D4位ES為串行中斷允許位。中斷優(yōu)先級控制寄存器IP的D4位PS為串行口優(yōu)先級控制位。
5.3.1串行接口的組成和特性第四十七頁,共九十四頁,2022年,8月28日串行口控制寄存器SCON是一個特殊功能寄存器,地址為98H,具有位尋址功能。SCON的格式如下:一、串行口控制寄存器SCONSM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D01.SM0、SM1:串行口的工作方式選擇位。SM0SM1方式功能說明000擴(kuò)展移位寄存器方式,移位波特率fosc/120118位UART,波特率可變(T1溢出率/n)1029位UART,波特率fosc/64或fosc/321139位UART,波特率可變(T1溢出率/n)第四十八頁,共九十四頁,2022年,8月28日
2.SM2:多機(jī)通信控制位。 因多機(jī)通信是在方式2和方式3下進(jìn)行,因此SM2位主要用于方式2和方式3。當(dāng)串行口以方式2或方式3接收時,如SM2置為1,則只有接收到的第9位數(shù)據(jù)(RB8)為“1”,才將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI產(chǎn)生中斷請求;否則,將接收到的前8位數(shù)據(jù)丟棄,不置位RI。而當(dāng)SM2置為0時,則不論第9位數(shù)據(jù)為“0”還是為“1”,都將前8位數(shù)據(jù)裝入SBUF中,并置位RI產(chǎn)生中斷請求。對于方式1,如SM2=1,則只有接收到有效的停止位才會激活RI。對于方式0,SM2應(yīng)該為0。
3.REN:允許串行接收位。由軟件置位或清零 REN位用于對串行數(shù)據(jù)的接收進(jìn)行控制。由軟件置位以允許接收。由軟件清“0”來禁止接收。即REN=0,禁止接收;REN=1,允許接收。一、串行口控制寄存器SCON第四十九頁,共九十四頁,2022年,8月28日4.TB8:對于方式2和方式3,TB8的內(nèi)容是要發(fā)送的第9位數(shù)據(jù),需要時其值由用戶通過軟件置位或復(fù)位。5.RB8:對于方式2和方式3,RB8存放接收到的第9位數(shù)據(jù)。對于方式1,如SM2=0,RB8是接收到的停止位。對于方式0,不使用RB8。6.TI:發(fā)送中斷標(biāo)志。在方式0下,串行發(fā)送完第8位數(shù)據(jù)后,該位由硬件置位。在其它方式下,于串行發(fā)送停止位的開始時,由硬件置位。TI必須由軟件清“0”。發(fā)送完一幀數(shù)據(jù)后由硬件置位。TI=1,表示幀發(fā)送結(jié)束,其狀態(tài)既可供軟件查詢使用,也可請求中斷。一、串行口控制寄存器SCON第五十頁,共九十四頁,2022年,8月28日 7.RI:接收中斷標(biāo)志。 在方式0下,接收完第8位數(shù)據(jù)后,該位由硬件置位。在其它方式接收到停止位的中間時置位,RI既可供CPU查詢,以決定CPU是否可以從“SBUF(接收)”中提取接收到的字符或數(shù)據(jù)。也可以請求中斷。RI必須由軟件清“0”。
SMODD7D6D5D4D3D2D1D0PCON的最高位SMOD是串行口波特率系數(shù)控制位,當(dāng)SMOD為1時使波特率加倍。PCON的其它位為掉電方式控制位(僅對CHMOS型單片機(jī)80C51等有效)二、特殊功能寄存器PCON第五十一頁,共九十四頁,2022年,8月28日 MCS-51串行接口具有四種工作方式,它們是由SCON中的SM0,SM1這兩位定義的。
一、方式0
方式0是外擴(kuò)移位寄存器的工作方式,以串行擴(kuò)展I/O接口。輸出時:將發(fā)送數(shù)據(jù)緩沖器中的內(nèi)容串行地移到外部的移位寄存器,輸入時:將外部移位寄存器的內(nèi)容串行地移入內(nèi)部的輸入移位寄存器,然后寫入內(nèi)部的接收數(shù)據(jù)緩沖器。在以方式0工作時,數(shù)據(jù)由RXD端串行地輸入/輸出,TXD端輸出移位脈沖,使外部的移位寄存器移位。波特率固定為振蕩器頻率的十二分之一。5.3.2串行接口的工作方式第五十二頁,共九十四頁,2022年,8月28日1.方式0輸出方式0輸出時,串行口上外接74LS164(串行輸入并行輸出移位寄存器)的接口邏輯如圖所示。在TXD端輸出的移位脈沖控制下,RXD端輸出的數(shù)據(jù)將被逐位移入74LS164。(經(jīng)過8個機(jī)器周期)88031D1D2CLK74LS164345610111213D7……D0+5VRXDTXD80518751121497第五十三頁,共九十四頁,2022年,8月28日例圖5-25中,串行口外接兩個74LS164,74LS164的輸出接指示燈L0~L15,欲使L0~L3、L8、L10、L12、L14燈亮,其余燈暗。LSUBO:MOV SBUF,#0FHJNB TI,$CLR TIMOV SBUF,#055HJNB TI,$CLR TIRET+5VRXDTXD12CLK74LS164345610111213CRVccVss12CLK74LS164345610111213CRVccVssL7L6L5L4L3L2L1L0L15L9L8第五十四頁,共九十四頁,2022年,8月28日
2.方式0輸入
方式0輸入時,RXD作為串行數(shù)據(jù)輸入線,TXD作為移位脈沖輸出線,串行口與外接的并行輸入串行輸出的移位寄存器74LS166的接口邏輯如圖5-26所示803174LS166345610111213RXDTXD80518751INT0137156外部數(shù)據(jù)打入信號在REN=1,RI=0時啟動串行口接收,TXD端輸出的移位脈沖頻率為fosc/12,若fosc=12MHz,移位速率為1μs/位,經(jīng)過8次移位,外部移位寄存器內(nèi)容移入內(nèi)部移位寄存器,并寫入SBUF,置位RI,停止移位,完成一個字節(jié)的輸入,CPU讀SBUF的內(nèi)容便得到輸入結(jié)果。第五十五頁,共九十四頁,2022年,8月28日二、方式1串行口定義為方式1時,它是一個8位異步串行通信口,TXD為數(shù)據(jù)輸出線,RXD為數(shù)據(jù)輸入線。傳送一幀信息的數(shù)據(jù)格式如下所示。一幀為10位:1位起始位,8位數(shù)據(jù)位(先低位后高位),1位停止位。
起始位D0D1D2D3D4D5D6D7停止位第五十六頁,共九十四頁,2022年,8月28日CPU向串行口數(shù)據(jù)發(fā)送緩沖器SBUF寫入一個數(shù)據(jù),然后發(fā)送電路就自動在8位發(fā)送字符前后分別添加1位起始位“0”和1位停止位“1”,啟動串行口發(fā)送,在串行口內(nèi)部一個十六分頻計(jì)數(shù)器的同步移位脈沖控制下,在TXD端輸出一幀信息,先發(fā)送起始位0,接著從低位開始依次輸出8位數(shù)據(jù),最后輸出停止位1,并置“1”發(fā)送中斷標(biāo)志TI,串行口輸出完一個字符后停止工作。CPU執(zhí)行程序判斷TI=1后清“0”TI,再向SBUF寫入數(shù)據(jù),啟動串行口發(fā)送下一個字符。1.方式1輸出第五十七頁,共九十四頁,2022年,8月28日
REN置“1”以后,就允許接收器接收。接收器以所選波特率的16倍的速率采樣RXD端的電平。當(dāng)檢測到RXD端輸入電平發(fā)生負(fù)跳變(從“1”到“0”)時,復(fù)位內(nèi)部的十六分頻計(jì)數(shù)器。計(jì)數(shù)器的16個狀態(tài)把傳送一位數(shù)據(jù)的時間分為16等分,在每位中心,即7、8、9這三個計(jì)數(shù)狀態(tài),位檢測器采樣RXD的輸入電平,接收的值是三次采樣中至少是兩次相同的值,這樣處理可以防止干擾。如果在第1位時間接收到的值(起始位)不是0,則起始位無效,復(fù)位接收電路,重新搜索RXD端上的負(fù)跳變。如果起始位有效,則開始接收本幀其余部分的信息。接收到停止位為1時,將接收到的8位數(shù)據(jù)裝入接收數(shù)據(jù)緩沖器SBUF,直到接收到停止位1之后,把停止位送入RB8中,置位RI,表示串行口接收到有效的一幀信息,向CPU請求中斷。接著串行口輸入控制電路重新搜索RXD端上負(fù)跳變,接收下一個數(shù)據(jù)。
2.方式1輸入第五十八頁,共九十四頁,2022年,8月28日串行口定義為方式2或方式3時,它是一個9位異步串行通信接口,TXD為數(shù)據(jù)發(fā)送端,RXD為數(shù)據(jù)接收端。方式2的波特率固定為振蕩器頻率的1/64或1/32,而方式3的波特率由定時器T1或T2(8052)的溢出率所確定,故方式3的波特率是可調(diào)的。在方式2和方式3中,一幀信息為11位:1位起始,8位數(shù)據(jù)位(先低位后高位),1位附加的第9位數(shù)據(jù)(發(fā)送時為SCON中的TB8,接收時第9位數(shù)據(jù)為SCON中的RB8),1位停止位,數(shù)據(jù)的格式如圖三、方式2和方式3起始位D0D1D2D3D4D5D6D7停止位D8第五十九頁,共九十四頁,2022年,8月28日方式2和方式3的發(fā)送過程類似于方式1輸出,所不同的是:方式2和方式3有9位有效數(shù)據(jù)位。發(fā)送時,CPU除要把發(fā)送字符寫入數(shù)據(jù)發(fā)送緩沖器“SBUF”外,還要把第9數(shù)據(jù)位預(yù)先寫入SCON的TB8中。第9數(shù)據(jù)位可由用戶安排,可以是奇偶校驗(yàn)位,也可以是其他控制位。第9數(shù)據(jù)位的寫入可以用如下指令中的一條來完成: SETB TB8 CLR TB8第9數(shù)據(jù)位的值寫入TB8后,CPU向數(shù)據(jù)發(fā)送緩沖器“SBUF”寫入發(fā)送數(shù)據(jù)就啟動串行口發(fā)送。先發(fā)送起始位0,接著從低位開始依次發(fā)送SBUF中的8位數(shù)據(jù),再發(fā)送SCON中TB8,最后發(fā)送停止位,置“1”發(fā)送中斷標(biāo)志TI,CPU判斷TI=1以后清“0”TI,可以再向TB8和SBUF寫入新的數(shù)據(jù),再次啟動串行口發(fā)送。1.方式2和方式3輸出第六十頁,共九十四頁,2022年,8月28日 方式2和方式3的接收過程也和方式1輸入類似,所不同的是:方式1時RB8中存放的是停止位,方式2或方式3時RB8中存放的是第9數(shù)據(jù)位。 ※(REN置“1”以后,接收器就以所選波特率的16倍的速率采樣RXD端的輸入電平。當(dāng)檢測到RXD上輸入電平發(fā)生負(fù)跳變時,復(fù)位內(nèi)部的十六分頻計(jì)數(shù)器。計(jì)數(shù)器的16個狀態(tài)把一位數(shù)據(jù)的時間分成16等分,在一位中心,即7、8、9這三個計(jì)數(shù)狀態(tài),位檢測器采樣RXD的輸入電平,接收的值是三次采樣中至少是兩次相同的值。如果在第1位時間接收到的值不是0,則起始位無效,復(fù)位接收電路,重新搜索RXD上的負(fù)跳變。如果起始位有效,則開始接收本幀其余位信息。)
2.方式2和方式3輸入第六十一頁,共九十四頁,2022年,8月28日REN置“1”以后,就允許接收器接收。在此前提下,串行口采樣RXD端,當(dāng)采樣到從“1”向“0”的狀態(tài)跳變時,就認(rèn)定是接收到起始位。隨后在移位脈沖的控制下,先從低位開始接收8位數(shù)據(jù),再接收第9位數(shù)據(jù),在RI=0,SM2=0或接收到的第9位數(shù)據(jù)為1時,接收的數(shù)據(jù)裝入SBUF和RB8,置位RI;如果條件不滿足,把數(shù)據(jù)丟失,并不置位RI。一位時間以后又開始搜索RXD上的負(fù)跳變,接收下一個數(shù)據(jù)。2.方式2和方式3輸入第六十二頁,共九十四頁,2022年,8月28日
一、方式0波特率 串行口方式0的波特率由振蕩器的頻率所確定: 方式0波特率=振蕩器頻率/12
二、方式2波特率串行口方式2的波特率由振蕩器的頻率和SMOD(PCON.7)所確定: 方式2波特率=×振蕩器頻率/64 SMOD=0時,波特率=振蕩器頻率/64; SMOD=1時,波特率=振蕩器頻率/32。
三、方式1和方式3的波特率 串行口方式1和方式3的波特率由定時器T1或T2(8052等單片機(jī))的溢出率和SMOD所確定。T1和T2是可編程的,可以選擇的波特率范圍比較大,因此串行口方式1和方式3是最常用的工作方式。
5.3.3波特率第六十三頁,共九十四頁,2022年,8月28日 當(dāng)定時器T1作為串行口的波特率發(fā)生器時,串行口方式1和方式3的波特率由下式確定:
方式1和方式3波特率
=2SMOD×(T1溢出率)/32 SMOD為0時,波特率等于T1溢出率的三十二分之一; SMOD為1時,波特率等于T1溢出率的十六分之一。定時器T1作波特率發(fā)生器時,應(yīng)禁止T1中斷。通常T1工作于定時方式(C/T=0),計(jì)數(shù)脈沖為振蕩器的十二分頻信號。T1的溢出率又和它的工作方式有關(guān),一般選方式2定時,此時波特率的計(jì)算公式為:
方式1和方式3波特率
=2SMOD×振蕩器頻率/[32×12(256-(TH1))]
1.用定時器T1產(chǎn)生波特率第六十四頁,共九十四頁,2022年,8月28日
※2.用定時器T2產(chǎn)生波特率 8052等單片機(jī)內(nèi)的定時器T2也可以作為串行口的波特率發(fā)生器,置位T2CON中的TCLK和RCLK位,T2就工作于串行口的波特率發(fā)生器方式,這時T2的邏輯結(jié)構(gòu)框圖5-29所示。 T2的波特率發(fā)生器方式和計(jì)數(shù)初值常數(shù)自動再裝入方式相似,若C/T2=0,以振蕩器的二分頻信號作為T2的計(jì)數(shù)脈沖,C/T2=1時,計(jì)數(shù)脈沖是外部引腳T2(P1.0)上的輸入信號。T2作為波特率發(fā)生器時,當(dāng)T2計(jì)數(shù)溢出時,將RCAP2H和RCAP2L中的常數(shù)(由軟件設(shè)置)自動裝入TH2、TL2使T2從這個初值開始計(jì)數(shù),但是并不置“1”TF2,RCAP2H和RCAP2L中的常數(shù)由軟件設(shè)定后,T2的溢出率是嚴(yán)格不變的,因而使串行口方式1和平的波特率非常穩(wěn)定,其值為: 方式1和方式3波特率=振蕩器/32[65536-(RCAP2H)(RCAP21)] T2工作于波特率發(fā)生器方式時,計(jì)數(shù)溢出時不會置“1”TF2,不向CPU請示中斷,因此可以不必禁止T2的中斷。如果EXEN2為1,當(dāng)T2EX(P1.1)上輸入電平發(fā)生“1”至“0”負(fù)跳變時,也不會引起RCAP2H和RCAP2L中的常數(shù)裝入TH2、TL2,僅僅置位EXF2,第六十五頁,共九十四頁,2022年,8月28日向CPU請求中斷,因此T2EX可以作為一個外部中斷源使用。在T2計(jì)數(shù)過程中(TR2=1)不應(yīng)該對TH2、TL2進(jìn)行讀/寫。如果讀,則讀出結(jié)果不會精確(因?yàn)槊總€狀態(tài)加1);如果寫,則會影響T2的溢出率使波特率不穩(wěn)定。在T2計(jì)數(shù)過程中可以對RCAP2H和RCAP2L進(jìn)行讀但不能寫,如果寫也將使波特率不穩(wěn)定。因此,在初始化中,應(yīng)先對TH2、TL2、RCAP2H、RCAP2L初始化編程以后才置“1”TR2,啟動T2計(jì)數(shù)?!诹?,共九十四頁,2022年,8月28日
多機(jī)通信是指兩臺以上計(jì)算機(jī)之間的數(shù)據(jù)傳輸,主從式多機(jī)通信是多機(jī)通信系統(tǒng)中最簡單的一種,應(yīng)用也最為廣泛?,F(xiàn)以它為例加以討論。串行口控制寄存器SCON中的SM2為多機(jī)通信控制位。串行口以方式2或方式3接收時,若SM2為1,則僅當(dāng)接收到的第9位數(shù)據(jù)RB8為1時,數(shù)據(jù)才裝入SBUF,置位RI,請求CPU對數(shù)據(jù)進(jìn)行處理;如果接收到的第9位數(shù)據(jù)RB8為0,則不產(chǎn)生中斷標(biāo)志RI,信息丟失,CPU不作任何處理。當(dāng)SM2為0時,則接收到一個數(shù)據(jù)后,不管第9位數(shù)據(jù)RB8是1還是0,都將數(shù)據(jù)裝入接收緩沖器SBUF,置位中斷標(biāo)志RI,請求CPU處理,應(yīng)用這個特性,便可以實(shí)現(xiàn)MCS-51的主從式多機(jī)通信。5.3.4多機(jī)通信原理第六十七頁,共九十四頁,2022年,8月28日 在主從式多機(jī)系統(tǒng)中,只有一臺主機(jī),但從機(jī)可以有多臺。主機(jī)發(fā)送的信息可以傳送到各個從機(jī)或指定從機(jī),而從機(jī)發(fā)送的信息只能為主機(jī)所接收,各從機(jī)之間不能直接通信。主機(jī)通常由系統(tǒng)機(jī)(例如:IBM-PC/386)充任,也可以由單片機(jī)擔(dān)當(dāng);從機(jī)通常為單片機(jī)。 在圖示的一個主從式多機(jī)系統(tǒng)中,有一個8031系統(tǒng)作為主機(jī),有三個8031單片機(jī)作為從機(jī),并假設(shè)它們被安裝在同一塊印板之內(nèi),以TTL電平通信。TXDRXD80310#從機(jī)TXDRXD80310#從機(jī)TXDRXD8031主機(jī)80310#從機(jī)TXDRXDMCS-51多機(jī)通信系統(tǒng)結(jié)構(gòu)框圖第六十八頁,共九十四頁,2022年,8月28日MCS-51用于多機(jī)通信時必須在方式2或方式3下工作,作主機(jī)的8031的SM2應(yīng)設(shè)定為0,作從機(jī)的8031的SM2應(yīng)設(shè)定為1。主機(jī)發(fā)送并為從機(jī)接收的信息有兩類:一類是地址,用于指示需要和主機(jī)通信的從機(jī)地址,由串行數(shù)據(jù)第9位為“1”標(biāo)志;一類是數(shù)據(jù)或命令,由串行數(shù)據(jù)第9位為“0”標(biāo)志。由于所有從機(jī)的SM2=1,故每個從機(jī)在接收到主機(jī)發(fā)來的地址(串行數(shù)據(jù)第9位為“1”)后,都置位RI,并進(jìn)入各自的中斷服務(wù)程序。在中斷服務(wù)程序中,每臺從機(jī)把接收到的地址和它的本機(jī)地址(系統(tǒng)設(shè)計(jì)時所分配)進(jìn)行比較。所有比較不相等的從機(jī)均從各自的中斷服務(wù)程序中退出(SM2仍為1),只有比較成功的從機(jī)才是被主機(jī)尋址通信的從機(jī)。被尋址的從機(jī)在程序中使SM2=0,以便接收主機(jī)隨之而來發(fā)送的數(shù)據(jù)或命令(RB8=0),并作相應(yīng)處理。第六十九頁,共九十四頁,2022年,8月28日其它的從機(jī)由于SM2保持1,對主機(jī)發(fā)送的數(shù)據(jù)或命令不作任何處理。于是。這樣便實(shí)現(xiàn)主機(jī)和從機(jī)之間的一對一通信。當(dāng)一次通信結(jié)束以后,從機(jī)的SM2恢復(fù)1,主機(jī)可以發(fā)送新的地址,以便和另一個從機(jī)進(jìn)行通信。
第七十頁,共九十四頁,2022年,8月28日上述過程進(jìn)一步歸納如下:(1)主機(jī)的SM2=0;所有從機(jī)的SM2=1,以便接收主機(jī)發(fā)來的地址。(2)主機(jī)給從機(jī)發(fā)送地址時,第9數(shù)據(jù)位上發(fā)送1,以指示從機(jī)接收這個地址。(3)所有從機(jī)在SM2=1、RB8=1和RI=0時,接收主機(jī)發(fā)來的從機(jī)地址,進(jìn)入相應(yīng)中斷服務(wù)程序,并和本機(jī)地址比較以確定是否為被尋址從機(jī)。(4)未被尋址從機(jī)保持SM2=1,并退出各自中斷服務(wù)程序。被尋址從機(jī)通過指令清零SM2,以正常接收主機(jī)隨之而來發(fā)送的數(shù)據(jù)或命令,并作相應(yīng)處理,同時向主機(jī)發(fā)回接收到的從機(jī)地址,供主機(jī)核對。(5)完成主機(jī)和被尋址從機(jī)之間的數(shù)據(jù)通信,被尋址從機(jī)在通信完成后重新使SM2=1,并退出中斷服務(wù)程序,等待下一次通信。第七十一頁,共九十四頁,2022年,8月28日5.3.5串行口的應(yīng)用和編程
一、串行口應(yīng)用 在同一塊印板內(nèi)兩個單片機(jī)的串行口可以直接相連,以TTL電平(大于0.8V為1,小于0.3V為0)直接串行通信,串行口可工作于方式1、2、3。一般用一個外部脈沖源作為單片機(jī)的時鐘,結(jié)構(gòu)框圖如圖5-31所示。在單片機(jī)應(yīng)用中,常把單片機(jī)作為PC機(jī)的前置機(jī),利用串行口和PC機(jī)通信,單片機(jī)完成數(shù)據(jù)的采樣,PC機(jī)完成數(shù)據(jù)的處理,達(dá)到很高的性能,如IC卡讀/寫機(jī)、變電站中使用的遠(yuǎn)程終端RTV等。PC機(jī)的串行口(COM1或COM2)是RS232電平(+12V為1,-12V為0),單片機(jī)的串行口是TTL電平,必須通過電平轉(zhuǎn)換器(如1488發(fā)送器,1489接收器或TC232接收發(fā)送器)變成RS232電平以后才能和PC機(jī)的串行口相連,其結(jié)構(gòu)如圖5-32所示。第七十二頁,共九十四頁,2022年,8月28日一、串行口的應(yīng)用1、兩個單片機(jī)之間的TTL電平串行通信XTAL2TXD8031 RXDXTAL1XTAL2RXD8031 TXDXTAL11M74HC474HC0411.0592MHz30p30p串行口的應(yīng)用第七十三頁,共九十四頁,2022年,8月28日2、單片機(jī)和PC機(jī)的串行接口連接TXD8031RXDVSSRXDTXDPC機(jī)GND電平轉(zhuǎn)換器第七十四頁,共九十四頁,2022年,8月28日1、分立元件電平轉(zhuǎn)換電路+5VTTL(B)TTL(C)4.7K4.7K4.7K4.7KT1T2+5V1.8K10uRS-232C(A)RS-232C(D)二、RS-232電平與TTL電平的轉(zhuǎn)換RS-232C的邏輯0電平(+12V)RS-232C的邏輯1電平(–12V)第七十五頁,共九十四頁,2022年,8月28日2、集成電路電平轉(zhuǎn)換器TC2321615141312111098765432110u10u10u10u+5V地RS-232電平+5V地RS-232電平TTL電平第七十六頁,共九十四頁,2022年,8月28日串行口編程包括編寫串行口的初始化程序和串行口的輸入/輸出程序。串行口初始化程序的功能是選擇串行口的工作方式,串行口的波特率以及允許串行口中斷,就是對SCON、PCON、TMOD、TH1、TL1、IE、IP、SBUF編程。輸入/輸出程序的功能是在確定的工作方式下實(shí)現(xiàn)數(shù)據(jù)的串行輸入/輸出。二、串行口編程第七十七頁,共九十四頁,2022年,8月28日
例11試編寫一個程序,其功能是對串行口初始化為方式1輸入/輸出,fosc=11.0592MHz,波特率為9600,首先在串行口上輸出字符串‘MCS-51Microcomputer’,接著讀串行口上輸入的字符,又將該字符從串行口上輸出。MAIN:MOV TMOD,#20H ;對T1初始化為方式2MOV TH1,#0FDH;送時間常數(shù)決定波特率MOV TL1,#0FDHSETB TR1 ;允許T1計(jì)數(shù)MOV SCON,#52H;選串行口方式1,允許接收,
;初態(tài)TI=1,以便循環(huán)程序的編寫
MOV R4,#0 ;R4作字符串表指針MOV DPTR,#TSABMLP1:MOV A,R4 MOV A,@A+DPTR JZ MLP6 ;(A=0則轉(zhuǎn)移) ;字符串以0表示結(jié)束 第七十八頁,共九十四頁,2022年,8月28日MLP3:JBC TI,MLP2 ;尋址位為1則轉(zhuǎn)移,并清0SJMP MLP3MLP2:MOV SBUF,AINC R4SJMP MLP1MLP6:JBC RI,MLP5SJMP MLP6MLP5:MOV A,SBUFMLP8:JBC TI,MLP7SJMP MLP8MLP7:MOV SBUF,A SJMP MLP6TSAB:DB ‘MCS-51Micromputer’DB 0AH,0DH,0第七十九頁,共九十四頁,2022年,8月28日
※
例12在一個MCS-51應(yīng)用系統(tǒng)中,fosc=11.0592MHz,利用串行口和PC機(jī)通信,試編寫一個程序,其功能為對串行口初始化為方式3,波特率為19200,TB8、RB8作為奇偶校驗(yàn)位,先向PC機(jī)輸出‘MCS-51READY’,然后以中斷控制方式接收PC機(jī)的命令(每個命令不一個ASCII字符,合法命令字符為A~F),收到命令后置位標(biāo)志MCMD,主程序查詢到MCMD=1作為相應(yīng)的命令處理。MCMD EQU0 ;定義收到主機(jī)命令標(biāo)志位ESO EQU1 ;定義允許串行口輸出標(biāo)志ESI EQU2 ;定義允許串行口輸入標(biāo)志SBFR EQU30H ;串行口輸入輸出數(shù)據(jù)緩沖區(qū)SCOT EQU2FH ;串行口數(shù)據(jù)緩沖器有效長度≤16SPOT EQU 2EH ;串行口數(shù)據(jù)緩沖器指針MAIN: MOVTMOD,#20H;波特率19200 MOVTH1,#0FDH MOVTL1,#0FDH第八十頁,共九十四頁,2022年,8月28日 ORL PCON,#80H ;1→SMOD SETBTR1 MOV SCON,#52H MOVR4,#11HMLP1:MOVA,R4 MOVCA,@A+PC JZMLP4 ;(2個字節(jié))MLP2:JBCTI,MLP3 ;(3個字節(jié)) SJMPMLP2 ;(2個字節(jié))MLP3:MOVC,P ;奇偶位→TB8(2個字節(jié)) MOVCTB8,C ;(2個字節(jié)) MOV SBUF,A;寫SBUF,啟動發(fā)送(2個字節(jié)) INCR4 ;(2個字節(jié)) SJMPMLP1 ;(2個字節(jié))第八十一頁,共九十四頁,2022年,8月28日 ASAB:DB ‘MCS-51READY’ DB 0DH0AH,0 ALP4: CLR ESO ;禁止對串行口輸出 SETBESI ;允許串行口輸入 MOV IE,#90H ;允許串行口中斷 LP0: JNBMCMD,LP1 CLRMCMD LJMPPMCMD LP1:… ;其它事務(wù)處理
LJMP LP0PMCMD:MOVA,SBFR ;命令處理程序 CJNEA,#‘A’,$+3 ;判收到字符為A~F? JCMCDE第八十二頁,共九十四頁,2022年,8月28日 CJNE A,#‘G’,$+3 JNCMCDE CLR C SUBBA,#‘A’ MOV B,#3 MUL AB MOV DPTR,#PMAB JMP@A+DPTRMCDE:MOV SBFR,#‘E’;錯誤命令處理 MOV SBFR+1,#‘r’ MOV SBFR+2,#‘r’ MOV S,#3 MOVSPOT,#SBFR SETBESO CLEESI第八十三頁,共九十四頁,2022年,8月28日 SETBTI LJMP LP0PMAB:LJMP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市股權(quán)轉(zhuǎn)讓協(xié)議
- 農(nóng)村集體土地租賃合同范本
- 店面房租租賃合同
- 獨(dú)家經(jīng)銷產(chǎn)品協(xié)議范本
- 2025年全球及中國高壓試驗(yàn)臺行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國微光顯微鏡(EMMI)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球無機(jī)瓷釉涂料行業(yè)調(diào)研及趨勢分析報(bào)告
- 二零二四微商區(qū)域代理商權(quán)益保護(hù)合同3篇
- 休閑會所裝修施工協(xié)議范本
- 棉花收購站運(yùn)輸協(xié)議模板
- 人教版數(shù)學(xué)四年級下冊核心素養(yǎng)目標(biāo)全冊教學(xué)設(shè)計(jì)
- JJG 692-2010無創(chuàng)自動測量血壓計(jì)
- 三年級下冊口算天天100題(A4打印版)
- 徐州市2023-2024學(xué)年八年級上學(xué)期期末地理試卷(含答案解析)
- CSSD職業(yè)暴露與防護(hù)
- 飲料對人體的危害1
- 數(shù)字經(jīng)濟(jì)學(xué)導(dǎo)論-全套課件
- 移動商務(wù)內(nèi)容運(yùn)營(吳洪貴)項(xiàng)目三 移動商務(wù)運(yùn)營內(nèi)容的策劃和生產(chǎn)
- 中考記敘文閱讀
- 產(chǎn)科溝通模板
- 2023-2024學(xué)年四川省成都市小學(xué)數(shù)學(xué)一年級下冊期末提升試題
評論
0/150
提交評論