版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章51系列單片機(jī)的功能模塊及應(yīng)用主要掌握并行口、串行口、定時(shí)器的結(jié)構(gòu)、工作原理及應(yīng)用1§4-1并行口及其應(yīng)用51系列單片機(jī)的并行口,按特性可分類為:?jiǎn)我坏臏?zhǔn)雙向口(如89C52的P1.2~P1.7)多功能復(fù)用的準(zhǔn)雙向口(如89C52的P1.0、P1.1,P3.0~P3.7)可作地址總線輸出口的準(zhǔn)雙向口(P2)可作地址/數(shù)據(jù)總線口的三態(tài)雙向口(P0)2每個(gè)I/O線均由鎖存器,輸出電路和輸入緩沖器組成。每一條口線可獨(dú)立用作輸入和輸出。作輸出時(shí)可鎖存數(shù)據(jù),輸入時(shí)可緩沖數(shù)據(jù)。CPU對(duì)口的讀操作有兩種:①讀—修改—寫操作(讀口鎖存器狀態(tài))例:ANLP0,A ;(P0)←(P0)∧(A)ORLP0,#data;(P0)←(P0)∨dataDECP0;(P0)←(P0)-1②讀引腳操作(讀口引腳上外部輸入信息)例MOVA,P134§4-1-1P0口
P0口是一個(gè)三態(tài)雙向口,可作為地址/數(shù)據(jù)分時(shí)復(fù)用口,也可作為通用I/O接口。其1位的結(jié)構(gòu)原理如下圖所示。P0口由8個(gè)這樣的電路組成。5P0口1位結(jié)構(gòu)圖起輸出鎖存作用,8個(gè)鎖存器構(gòu)成了SFR—P0V1、V2組成輸出驅(qū)動(dòng)器,以增大帶負(fù)載能力三態(tài)門1是引腳輸入緩沖器讀鎖存器端口6
2.地址/數(shù)據(jù)分時(shí)復(fù)用功能
當(dāng)P0口作為地址/數(shù)據(jù)分時(shí)復(fù)用總線時(shí),可分為兩種情況:一種是從P0口輸出地址或數(shù)據(jù),另一種是從P0口輸入數(shù)據(jù)。
7在訪問(wèn)片外存儲(chǔ)器而需從P0口輸出地址或數(shù)據(jù)信號(hào)時(shí),控制信號(hào)應(yīng)為高電平“1”,使轉(zhuǎn)換開關(guān)MUX把反相器4的輸出端與V1接通,同時(shí)把與門3打開。1)當(dāng)?shù)刂坊驍?shù)據(jù)為“1”時(shí),經(jīng)反相器4使V1截止,而經(jīng)與門3使V2導(dǎo)通,P0.x引腳上出現(xiàn)相應(yīng)的高電平“1”;
2)當(dāng)?shù)刂坊驍?shù)據(jù)為"0"時(shí),經(jīng)反相器4使V1導(dǎo)通而V2截止,引腳上出現(xiàn)相應(yīng)的低電平"0"。這樣就將地址/數(shù)據(jù)的信號(hào)輸出。83.通用I/O接口功能
當(dāng)P0口作為通用I/O口使用,在CPU向端口輸出數(shù)據(jù)時(shí),對(duì)應(yīng)的控制信號(hào)為0,轉(zhuǎn)換開關(guān)把輸出級(jí)與鎖存器Q端接通,同時(shí)因與門3輸出為0使V2截止,此時(shí),輸出級(jí)是漏極開路電路。當(dāng)寫脈沖加在鎖存器時(shí)鐘端CLK上時(shí),與內(nèi)部總線相連的D端數(shù)據(jù)取反后出現(xiàn)在Q端,又經(jīng)輸出V1反相,在P0引腳上出現(xiàn)的數(shù)據(jù)正好是內(nèi)部總線的數(shù)據(jù)。當(dāng)要從P0口輸入數(shù)據(jù)時(shí),引腳信息仍經(jīng)輸入緩沖器進(jìn)入內(nèi)部總線。9總之:一P0口作為一般I/O口使用
1P0口用作輸出口:必須外接上拉電阻,才有高電平輸出。2P0口作輸入口:先向端口鎖存器寫入“1”。二P0口作為地址/數(shù)據(jù)總線使用1以P0口引腳輸出低8位地址或數(shù)據(jù)信息2由P0口輸入數(shù)據(jù)三P0口可驅(qū)動(dòng)8個(gè)LSTTL電路10§4-1-2P1口(準(zhǔn)雙向口)11①P1.0、P1.1為多功能雙向口,P1.2~P1.7為單一功能準(zhǔn)雙向口。
②P1口的第一功能是準(zhǔn)雙向口,每一位可分別定義為輸入線或輸出線。
③輸出驅(qū)動(dòng)部分由場(chǎng)效應(yīng)管V1與內(nèi)部上拉電阻組成。當(dāng)其某位輸出高電平時(shí),可以提供上拉電流負(fù)載。12④P1的某一位作為輸入線時(shí),該位的口鎖存器必須保持“1”。使輸出場(chǎng)效應(yīng)管截止。該引腳才可由內(nèi)部拉高電路拉成高電平,或由外部電路拉成低電平。
⑤P1口具有驅(qū)動(dòng)4個(gè)LSTTL負(fù)載的能力。1314§4-1-3P2口(準(zhǔn)雙向口)15當(dāng)作為準(zhǔn)雙向通用I/O口使用時(shí):控制信號(hào)使轉(zhuǎn)換開關(guān)接向左側(cè),鎖存器Q端經(jīng)反相器3接V1,其工作原理與P1相同,也具有輸入、輸出、端口操作三種工作方式,負(fù)載能力也與P1相同。
161系統(tǒng)中外接程序存儲(chǔ)器時(shí):P2口輸出程序存儲(chǔ)器的高8位地址,不作I/O口使用。2系統(tǒng)中無(wú)外接程序存儲(chǔ)器,而擴(kuò)展有片外RAM的系統(tǒng)中:①片外RAM的容量<256B:P2口仍做輸入/輸出口使用。使用R0或R1作地址指針。②片外RAM的容量>256B:P2口不能做輸入/輸出口,而做系統(tǒng)擴(kuò)展的高8位地址總線口使用。使用DPTR、P2R0、P2R1作地址指針。17§4-1-4P3口(準(zhǔn)雙向口)18
P3口是一多功能口,既做準(zhǔn)雙向口又做特殊輸入輸出口。1做通用I/O口使用:
P3口做輸入使用,應(yīng)由軟件向口鎖存器寫“1”。192做第二功能使用:某位做第二功能使用該位D鎖存器Q應(yīng)被硬件自動(dòng)置“1”。
P3.0RXDP3.5T1P3.1TXD(出)P3.6WR(出)P3.2INT0P3.7RD(出)P3.3INT1P3.4T03P3口具有驅(qū)動(dòng)4個(gè)LSTTL負(fù)載的能力。20I/O端口的操作方式:(1)輸出數(shù)據(jù)方式:CPU通過(guò)一條數(shù)據(jù)傳送指令就可以把輸出數(shù)據(jù)寫入P0~P3的端口鎖存器,然后通過(guò)輸出驅(qū)動(dòng)器送到端口引腳線。例如,下面的指令均可在P0口輸出數(shù)據(jù)。
MOVP0,AANLP0,#dataORLP0,A(2)讀端口數(shù)據(jù)方式:
CPU讀入的這個(gè)數(shù)據(jù)并非端口引腳線上的數(shù)據(jù)。讀端口數(shù)據(jù)可以直接讀端口。例如,下面的指令均可以從P1口輸入數(shù)據(jù)。
MOVA,P1MOV20H,P1MOVR0,P1MOV@R0,P121(3)讀端口引腳方式:讀端口引腳方式可以從端口引腳上讀入信息。在這種方式下,CPU首先必須使欲讀端口引腳所對(duì)應(yīng)的鎖存器置1,然后才能讀端口引腳。因此,用戶在讀引腳時(shí)必須先置位鎖存器后讀,連續(xù)使用兩條指令。例如,下面的程序可以讀P1引腳上的低4位信號(hào)。
MOVP1,#0FH;置位P1引腳的低4位
MOVA,P1;讀P1引腳上的低4位信號(hào)送累加器A22§4-1-5并行口的應(yīng)用1外接蜂鳴器2利用可控硅控制加熱電路3BCD碼撥碼盤的接口
BCD碼撥碼盤構(gòu)造——一個(gè)撥碼盤可以輸入1位十進(jìn)制數(shù)據(jù)。撥碼盤撥到某個(gè)位置時(shí),控制線分別與4位數(shù)據(jù)線中某幾位接通。接通線定義為“1”,不通的線定義為“0”。23§4-2定時(shí)器及其應(yīng)用定時(shí)器功能:
1定時(shí)操作
2測(cè)量外部輸入信號(hào)
3定時(shí)輸出
4監(jiān)視系統(tǒng)正常工作24§4-2-1定時(shí)器的結(jié)構(gòu)和工作原理
1定時(shí)器由一個(gè)N位計(jì)數(shù)器、計(jì)數(shù)時(shí)鐘源控制電路、狀態(tài)和控制寄存器等組成。2計(jì)數(shù)脈沖有兩個(gè)來(lái)源:①外部的脈沖源②系統(tǒng)的時(shí)鐘振蕩器。內(nèi)部時(shí)鐘外部時(shí)鐘↗N位計(jì)數(shù)器TFTMODTCON中斷253用作定時(shí)器時(shí),每經(jīng)過(guò)一個(gè)機(jī)器周期,計(jì)數(shù)器自動(dòng)加1,直到計(jì)數(shù)溢出;用作計(jì)數(shù)器時(shí),外部時(shí)鐘脈沖加在定時(shí)器的外輸入端T0(P3.4)或T1(P3.5),每出現(xiàn)一次負(fù)跳變,計(jì)數(shù)器加1。4兩個(gè)模擬開關(guān),左邊決定定時(shí)/計(jì)數(shù)器的工作狀態(tài),右邊決定脈沖源是否加在計(jì)數(shù)器的輸入端。516位的計(jì)數(shù)器由兩個(gè)8位SFRTH和TL組成。6定時(shí)器工作不占用CPU時(shí)間,除非定時(shí)器/計(jì)數(shù)器溢出,才能中斷CPU的當(dāng)前操作。26定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)框圖27§4-2-2定時(shí)器/計(jì)數(shù)器T0和T1一方式寄存器TMOD(89H)1不能進(jìn)行位尋址,只能用字節(jié)尋址。復(fù)位時(shí),TMOD所有位為0熟悉各位功能T1方式字段T0方式字段GATEC/TM1M0GATEC/TM1M028①GATE——門控位“1”:定時(shí)器的計(jì)數(shù)受外部引腳輸入電平的控制“0”:定時(shí)器的計(jì)數(shù)不受外部引腳輸入電平的控制②C/T——功能選擇位“1”:計(jì)數(shù)功能“0”:定時(shí)功能③M1M0——工作方式選擇位29
適于T0,兩個(gè)8位計(jì)數(shù)器M1M0工作方式方式說(shuō)明00013位定時(shí)器/計(jì)數(shù)器01116位定時(shí)器/計(jì)數(shù)器102具有自動(dòng)重裝初值的8位定時(shí)器/計(jì)數(shù)器113
30二控制寄存器TCON(88H)1既可字節(jié)尋址又可位尋址。復(fù)位時(shí),TCON各位為0例:SETBTR1;啟動(dòng)定時(shí)器T1工作熟悉各位功能D7D6D5D4D3D2D1D08FH8EH8DH8CH8BH8AH89H88HTF1TR1TF0TR0IE1IT1IE0IT031TF1——定時(shí)器/計(jì)數(shù)器T1的溢出標(biāo)志位TR1——定時(shí)器/計(jì)數(shù)器T1的運(yùn)行控制位TF0——定時(shí)器/計(jì)數(shù)器T0的溢出標(biāo)志位TR0——定時(shí)器/計(jì)數(shù)器T0的運(yùn)行控制位IE1——外部中斷1下降沿觸發(fā)標(biāo)志位IE0——外部中斷0下降沿觸發(fā)標(biāo)志位IT1——外部中斷1觸發(fā)類型選擇位IT0——外部中斷0觸發(fā)類型選擇位32三定時(shí)器/計(jì)數(shù)器的初始化初始化即將控制字寫入定時(shí)器/計(jì)數(shù)器的過(guò)程。初始化一般步驟:1寫入初值TH0、TL0或TH1、TL12對(duì)TMOD賦值3對(duì)IE賦值(有中斷產(chǎn)生時(shí))4①若用軟件啟動(dòng),則僅把TR0或TR1置“1”;②若用外中斷引腳電平啟動(dòng),則還需給外引腳加啟動(dòng)電平。33四定時(shí)器/計(jì)數(shù)器的4種工作方式1方式034
方式0是一個(gè)13位的定時(shí)器/計(jì)數(shù)器,由TL0的低5位和TH0的8位組成。定時(shí)時(shí)間為T=12*(213-a)/foscs最大定時(shí)時(shí)間:M=213=8192T35例7:已知晶振頻率fosc=6MHZ,若使用T0方式0產(chǎn)生10ms定時(shí)中斷,試對(duì)T0進(jìn)行初始化編程。
MOVTH0,#63HMOVTL0,#18HSETBTR0MOVIE,#82HRET36例:T0工作于方式0,要求在P1.0引腳上產(chǎn)生周期為2ms的方波輸出(fosc=6MHZ)
ORG0000HAJMPMAINORG000BHAJMPINQPORG0030HMAIN:MOVTMOD,#00HMOVTH0,#0F0HMOVTL0,#0CHSETBTR0;啟動(dòng)T0SETBET0;允許T0中斷
SETBEA;開放CPU中斷
AJMP$;定時(shí)中斷等待37
ORG4000H;中斷服務(wù)程序INQP:MOVTH0,#0F0H;重寫定時(shí)常數(shù)
MOVTL0,#0CHCPLP1.0;P1.0變反輸出
RETI
382方式1
方式1是一個(gè)16位定時(shí)器/計(jì)數(shù)器,結(jié)構(gòu)和操作方式與方式0基本相同。定時(shí)時(shí)間為T=12*(216-a)/foscs最大定時(shí)時(shí)間:M=216=65536T39例:設(shè)fosc=12MHz,T0工作于方式1,產(chǎn)生50ms定時(shí)中斷,TF0為高級(jí)中斷源。試編寫主程序中的初試化程序和中斷服務(wù)程序,使P1.0產(chǎn)生周期為1秒的方波。MAIN:MOVSP,
#EFHMOVTH0,
#3CHMOVTL0,
#0B0HMOVTMOD,#1MOVIP,#240
MOVIE,#82HSETBTR0MOV30H,#0AHPTF0:ORLTL0,#0B0H;中斷服務(wù)程序
MOVTH0,#3CHDJNZ30H,PTF0RMOV30H,#0AHCPLP1.0PTF0R:RETI41用查詢法:
MOV30H,#0AHMOVTH0,#3CHMOVTL0,#0B0HMOVTMOD,#1SETBTR0L2:JBCTF0,L1SJMPL2L1:MOVTH0,#3CHMOVTL0,#0B0H42
DJNZ30H,L2MOV30H,#0AHCPLP1.0SJMPL2433方式2
方式2是能重置初值的8位定時(shí)器/計(jì)數(shù)器,TL0作為8位計(jì)數(shù)器,TH0作為計(jì)數(shù)初值寄存器。適于用做較精確的定時(shí)脈沖信號(hào)發(fā)生器。定時(shí)時(shí)間T=12*(28-a)/foscs
最大定時(shí)時(shí)間:M=28=256T44定時(shí)器/計(jì)數(shù)器方式2的邏輯結(jié)構(gòu)45
MOVTMOD,#60H;設(shè)置T1為方式2計(jì)數(shù)
MOVTH1,#9CH;賦初值
MOVTL1,#9CHSETBTR1DE:JBCTF1,RE;查詢計(jì)數(shù)溢出
AJMPDERE:CPLP1.0AJMPDE例:用定時(shí)器1在方式2計(jì)數(shù),要求每計(jì)滿100次,將P1.0端取反。外部計(jì)數(shù)信號(hào)由P3.5引入,每跳變一次計(jì)數(shù)器加1100=28-a;a=156=9CH46保護(hù)現(xiàn)場(chǎng)賦計(jì)數(shù)初值到1s?(32H)加1(32H)=60?(32H)清0(31H)加1(31H)=60?(31H)清0(30H)加1(30H)=24?(30H)清0恢復(fù)現(xiàn)場(chǎng)返回例4.13(書111)aaNNNNYYYY圖
中斷服務(wù)程序流程圖47例:當(dāng)P3.4引腳上的電平發(fā)生負(fù)跳變時(shí),從P1.0輸出一個(gè)500μs的同步脈沖。請(qǐng)編程序?qū)崿F(xiàn)該功能。查詢方式,fosc=6MHz。48解:(1)模式選擇
選T0為模式2,外部事件計(jì)數(shù)方式。當(dāng)P3.4引腳上的電平發(fā)生負(fù)跳變時(shí),T0計(jì)數(shù)器加1,溢出標(biāo)志TF0置1;然后改變T0為500μs定時(shí)工作方式,并使P1.0輸出由1變?yōu)?。T0定時(shí)到產(chǎn)生溢出,使P1.0輸出恢復(fù)高電平,T0又恢復(fù)外部事件計(jì)數(shù)方式。如圖所示。49(2)計(jì)算初值
T0工作在外部事件計(jì)數(shù)方式,當(dāng)計(jì)數(shù)到28時(shí),再加1計(jì)數(shù)器就會(huì)溢出。設(shè)計(jì)數(shù)初值為X,當(dāng)再出現(xiàn)一次外部事件時(shí),計(jì)數(shù)器溢出。則:X+1=28
X=28
-1=11111111B=0FFH
T0工作在定時(shí)工作方式,設(shè)晶振頻率為6MHz,500μs相當(dāng)于250個(gè)機(jī)器周期。因此,初值X為(28-X)×2μs=500μs
X=6=06H50(3)程序清單START:MOVTMOD,#06H;設(shè)置T0為模式2,外部計(jì)數(shù)方式
MOVTL0,#0FFH;T0計(jì)數(shù)器初值
MOVTH0,#0FFHSETBTR0;啟動(dòng)T0計(jì)數(shù)
LOOP1:JBCTF0,PTFO1;查詢T0溢出標(biāo)志,;TF0=1時(shí)轉(zhuǎn),且清TF0=0SJMPLOOP1;51
PTFO1:CLRTR0;停止計(jì)數(shù)
MOVTMOD,#02H;設(shè)置T0為模式2,定時(shí)方式
MOVTL0,#06H;送初值,定時(shí)500μsMOVTH0,#06HCLRP1.0;P1.0清0
SETBTR0;啟動(dòng)定時(shí)500μsLOOP2:JBCTF0,PTFO2;查詢T0溢出標(biāo)志,;TF0=1時(shí)轉(zhuǎn),且清TF0=0;(第一個(gè)500μs到否?)
SJMPLOOP2;等待
PTFO2:SETBP1.0;P1.0置1CLRTR0;停止計(jì)數(shù)
SJMPSTART52定時(shí)器/計(jì)數(shù)器方式3的邏輯結(jié)構(gòu)
4方式3TH053
方式3只適用于T0,T0分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。一般T1用作串行口波特率發(fā)生器。最大定時(shí)時(shí)間:M=28=256T5455例用定時(shí)器T0,分別產(chǎn)生兩個(gè)方波,一個(gè)周期為200s,另一個(gè)周期為400s,該單片機(jī)同時(shí)使用串行口,用定時(shí)器/計(jì)數(shù)器作為波特率發(fā)生器。(fosc=9.216MHZ)。56解:定時(shí)初值計(jì)算TL0=28-9.216*106*100*10-6/12=256-76.8=179.2
轉(zhuǎn)換十六進(jìn)制為0B3HTH0=28-9.216*106*200*10-6/12=256-153.6=102.4
轉(zhuǎn)換十六進(jìn)制為66H57
ORG0000HAJMPMAINORG000BH;TL0中斷入口
AJMPITL0ORG001BH;TH0中斷入口
AJMPITH0ORG0100HMAIN:MOVSP,#60HMOVTMOD,#23H
58
MOVTL0,#0B3HMOVTH0,#66HMOVTL1,#data;data是根據(jù)波特率;要求設(shè)置的常數(shù)(初值)
MOVTH1,#dataSETBTR0;啟動(dòng)TL0初值
SETBTR1;啟動(dòng)TH0初值
SETBET0;允許TL0中斷
SETBET1;允許TH0中斷
SETBEA;CPU中斷開放
AJMP$
59
ORG0200HITL0:MOVTL0,#0B3HCPLP1.0;輸出方波200sRETIITH0:MOVTH0,#66HCPLP1.1;輸出方波400sRETI60例:設(shè)某用戶系統(tǒng)已使用了兩個(gè)外部中斷源,并置定時(shí)器T1工作在模式2,作串行口波特率發(fā)生器用。現(xiàn)要求再增加一個(gè)外部中斷源,并由P1.0引腳輸出一個(gè)5kHz的方波。Fosc=12MHz.61解:(1)工作模式
可設(shè)置T0工作在模式3計(jì)數(shù)器方式,把T0的引腳作附加的外部中斷輸入端,TL0的計(jì)數(shù)初值為FFH,當(dāng)檢測(cè)到T0引腳電平出現(xiàn)由1至0的負(fù)跳變時(shí),TL0產(chǎn)生溢出,申請(qǐng)中斷,相當(dāng)于一個(gè)邊沿觸發(fā)的外部中斷源。
T0模式3下,TL0作計(jì)數(shù)用,而TH0用作8位的定時(shí)器,定時(shí)控制P1.0引腳輸出5kHz的方波信號(hào)。62(2)計(jì)算初值TL0的計(jì)數(shù)初值為FFH。TH0的計(jì)數(shù)初值X為:
P1.0方波周期T=1/(5kHz)=0.2ms=200μs
用TH0作定時(shí)100μs時(shí),
X=256-100×12/12=15663(3)程序清單
MOVTMOD,#27H;T0為模式3,計(jì)數(shù)方式
;T1為模式2,定時(shí)方式
MOVTL0,#0FFH;TL0計(jì)數(shù)初值
MOVTH0,#156;TH0計(jì)數(shù)初值
MOVTL1,#data;data是根據(jù)波特率;要求設(shè)置的常數(shù)(初值)
MOVTH1,#dataMOVTCON,#55H;外中斷0,外中斷1邊沿觸發(fā),;啟動(dòng)T0,T1MOVIE,#9FH;開放全部中斷…64TL0溢出中斷服務(wù)程序(由000BH轉(zhuǎn)來(lái))TL0INT:MOVTL0,#0FFH;TL0重賦初值
……;(中斷處理)
RETI
TH0溢出中斷服務(wù)程序(由001BH轉(zhuǎn)來(lái))TH0INT:MOVTH0,#156;TH0重賦初值
CPLP1.0;P1.0取反輸出
RETI串行口及外部中斷0,外部中斷1的服務(wù)程序略。65設(shè)時(shí)鐘頻率為6MHz。編寫利用T0產(chǎn)生1s定時(shí)的程序。66五門控位的應(yīng)用GATE位是控制外部輸入脈沖對(duì)定時(shí)計(jì)數(shù)器的控制。當(dāng)為“1”時(shí),允許外部輸入電平控制啟、停定時(shí)器。利用這個(gè)特性可測(cè)量外部輸入脈沖的寬度。例:利用T0門控位測(cè)試INT0引腳上出現(xiàn)的正脈沖的寬度,將所測(cè)得值高位存入片內(nèi)71H單元,低位存入片內(nèi)70H單元。(fosc=12MHz)測(cè)試時(shí),應(yīng)在/INT0為低電平時(shí),設(shè)TR0為1;當(dāng)/INT0變高時(shí),啟動(dòng)計(jì)數(shù);當(dāng)/INT0再變低時(shí),停止計(jì)數(shù)。該計(jì)數(shù)值即被測(cè)正脈沖寬度。67MOVTMOD,#09H;T0定時(shí)器方式,GATE=1MOVTL0,#00HMOVTH0,#00HMOVR0,#70HJBP3.2,$;等待P3.2變低SETBTR0;啟動(dòng)T0準(zhǔn)備工作JNBP3.2,$;等待P3.2變高JBP3.2,$;等待P3.2再次變低CLRTR0;停止計(jì)數(shù)MOV@R0,TL0;存放計(jì)數(shù)低字節(jié)INCR0MOV@R0,TH0;存放計(jì)數(shù)高字節(jié)SJMP$68§4-3串行接口UART一兩種基本的通信方式(a)并行通信;(b)串行通信69二串行通信傳輸方式(a)單工方式;(b)半雙工方式;(c)全雙工方式70三串行通信兩種基本方式1異步通信①異步通信中數(shù)據(jù)或字符是一幀一幀傳送。②幀即為一個(gè)字符的完整通信格式,又稱幀格式。在幀格式中,一個(gè)字符由4部分組成:起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位。串行異步傳送的字符格式712同步通信
數(shù)據(jù)或字符開始處是由一同步字符來(lái)指示,并由時(shí)鐘實(shí)現(xiàn)發(fā)送端和接收端同步。四
波特率(Baudrate)①波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進(jìn)制位數(shù),單位為位/秒。②要求發(fā)送端與接收端的波特率必須一致。72§4-3-1串行接口的組成和特性
51系列單片機(jī)的串行口是全雙工異步串行通信接口。一串行口結(jié)構(gòu)1波特率發(fā)生器主要由T1、T2及內(nèi)部的一些控制開關(guān)和分頻器組成。提供串行口的時(shí)鐘信號(hào)即TCLK、RCLK。73串行口結(jié)構(gòu)框圖74注意:接收器是雙緩沖結(jié)構(gòu),在前一個(gè)字節(jié)被從接收緩沖器SBUF讀出之前,第二個(gè)字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個(gè)字節(jié)接收完畢而前一個(gè)字節(jié)CPU未讀取時(shí),會(huì)丟失前一個(gè)字節(jié).752串行口的內(nèi)部包含——①串行數(shù)據(jù)緩沖寄存器SBUF數(shù)據(jù)接收緩沖器(只讀出不寫入)和數(shù)據(jù)發(fā)送緩沖器(只寫入不讀出)。物理上隔離,共用一個(gè)地址(99H)。當(dāng)向SBUF發(fā)“寫”命令時(shí)(執(zhí)行MOVSBUF,A
),即從片內(nèi)總線向發(fā)送SBUF寫入數(shù)據(jù),并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完使TI=1。在滿足串行口接收中斷標(biāo)志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會(huì)接收一幀數(shù)據(jù)進(jìn)入移位寄存器,并裝載到接收SBUF中,同時(shí)使RI=1。當(dāng)發(fā)讀SBUF命令時(shí)(執(zhí)行MOVA,SBUF),便由接收SBUF取出信息通過(guò)內(nèi)部總線送CPU。76②串行口控制寄存器③串行數(shù)據(jù)輸入/輸出引腳接收方式下,串行數(shù)據(jù)從RXD(P3.0)輸入。串行口內(nèi)部在接收緩沖器之前還有移位寄存器,構(gòu)成串行接收雙緩沖結(jié)構(gòu)。避免數(shù)據(jù)接收重疊。發(fā)送方式下,串行數(shù)據(jù)從TXD(P3.1)輸出。④串行口控制邏輯77二串行口控制1串行口控制寄存器SCON(98H)
①SM0和SM1SM0SM1SM2RENTB8RB8TIRISM0SM1工作方式功能波特率00
0擴(kuò)展移位寄存器fosc/1201
18位UART由定時(shí)器控制10
29位UARTfosc/32fosc/6411
39位UART由定時(shí)器控制78②SM2方式2和方式3的多機(jī)通信控制位
方式0,SM2=0。方式1,若SM2=1,只有接收到有效停止位,接收中斷RI才置1。方式2和方式3中,如SM2=1,則接收到的第9位數(shù)據(jù)(RB8)為0時(shí)不啟動(dòng)接收中斷標(biāo)志RI(即RI=0),并且將接收到的前8位數(shù)據(jù)丟棄;RB8為1時(shí),才將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI,產(chǎn)生中斷請(qǐng)求。當(dāng)SM2=0時(shí),則不論第9位數(shù)據(jù)為0或1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中斷請(qǐng)求。該功能用于多機(jī)通信中。79③REN允許串行接收位
1—允許接收;0—禁止接收由軟件置1或清0,相當(dāng)于串行接收的開關(guān)。在串行通信接收控制過(guò)程中,如果滿足RI=0和REN=1(允許接收)的條件,就允許接收,一幀數(shù)據(jù)就裝載入接收SBUF中。④TB8發(fā)送數(shù)據(jù)D8位
在方式2和方式3時(shí),TB8為所要發(fā)送的第9位數(shù)據(jù)。在多機(jī)通信中,以TB8位的狀態(tài)表示主機(jī)發(fā)送的是地址還是數(shù)據(jù):TB8=0為數(shù)據(jù),TB8=1為地址;也可用作數(shù)據(jù)的奇偶校驗(yàn)位。該位由軟件置位或復(fù)位。在方式0或方式1中,該位未用80⑤RB8接收數(shù)據(jù)D8位在方式2和方式3時(shí),接收到的第9位數(shù)據(jù),可作為奇偶校驗(yàn)位或地址幀或數(shù)據(jù)幀的標(biāo)志。方式1時(shí),若SM2=0,則RB8是接收到的停止位。在方式0時(shí),不使用RB8位。⑥TI發(fā)送中斷標(biāo)志在方式0時(shí),當(dāng)發(fā)送數(shù)據(jù)第8位結(jié)束后,或在其它方式發(fā)送停止位后,由內(nèi)部硬件使TI置位,向CPU請(qǐng)求中斷。意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準(zhǔn)備發(fā)送下一幀數(shù)據(jù)。CPU在響應(yīng)中斷后,必須用軟件清零。此外,TI也可供查詢使用。81⑦RI接收中斷標(biāo)志位在方式0時(shí),當(dāng)接收數(shù)據(jù)的第8位結(jié)束后,或在其它方式接收到停止位的中間時(shí)由內(nèi)部硬件使RI置位,向CPU請(qǐng)求中斷。表示一幀數(shù)據(jù)接收結(jié)束,并已裝入接收SBUF中,要求CPU取走數(shù)據(jù)。在CPU響應(yīng)中斷后,也必須用軟件清零。RI也可供查詢使用。822特殊功能寄存器PCON
SMOD位是串行口波特率系數(shù)控制位,為1時(shí)使波特率加倍。其余位是掉電方式控制位,與串行口無(wú)關(guān)。SMOD83§4-3-2串行接口的工作原理一方式01方式0為同步移位寄存器輸入/輸出方式,常用于擴(kuò)展并行I/O口。2數(shù)據(jù)由RXD串行輸入/輸出,TXD輸出移位脈沖。3數(shù)據(jù)傳輸波特率固定為fosc/12。4接收/發(fā)送的是8位數(shù)據(jù),傳輸時(shí)低位在前。84輸出:當(dāng)執(zhí)行寫SBUF的指令時(shí)(MOVSBUF,A),啟動(dòng)串行數(shù)據(jù)發(fā)送。從低位開始串行輸出。當(dāng)完成一個(gè)字節(jié)的輸出后就停止移位,并置位TI。輸入:
在REN=1,RI=0時(shí)啟動(dòng)串行口接收。當(dāng)外部移位寄存器內(nèi)容移入內(nèi)部移位寄存器,并寫入SBUF,則置位RI,停止移位,完成一個(gè)字節(jié)的輸入。注意:每當(dāng)發(fā)送或接收完8位數(shù)據(jù)時(shí),由硬件將發(fā)送中斷TI或接收中斷RI標(biāo)志置“1”;CPU響應(yīng)TI或RI中斷請(qǐng)求時(shí),不會(huì)清除標(biāo)志,必須由軟件清“0”.85二方式11方式1時(shí),串行口為10位通用異步接口。2數(shù)據(jù)傳輸波特率由定時(shí)/計(jì)數(shù)器T1和T2的溢出決定,由程序設(shè)定。當(dāng)T2CON中RCLK和TCLK置位時(shí),由T2作接收/發(fā)送的波特率發(fā)生器;當(dāng)RCLK和TCLK都為0時(shí),由T1作接收/發(fā)送的波特率發(fā)生器。3數(shù)據(jù)從引腳TXD端輸出,從引腳RXD輸入。86發(fā)送當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器時(shí),啟動(dòng)發(fā)送器開始發(fā)送。8位數(shù)據(jù)發(fā)送完,置位TI=1,并申請(qǐng)中斷,通知CPU可發(fā)送下一個(gè)數(shù)據(jù)。接收在REN=1的前提下,確認(rèn)是真正起始位“0”后,開始接收一幀數(shù)據(jù)。當(dāng)RI=0且SM2=0時(shí),數(shù)據(jù)被有效接收。將接收到的數(shù)據(jù)裝入串行口的SBUF,并置位RI.87三方式2和方式31CPU向發(fā)送緩沖器寫入數(shù)據(jù)就啟動(dòng)串行口發(fā)送。發(fā)送完畢,使TI=1。2接收時(shí),先置REN為“1”,將RI清“0”。再根據(jù)SM2狀態(tài)和所接收到RB8狀態(tài)決定串口在信息到來(lái)后是否會(huì)使RI=1,申請(qǐng)中斷,接收數(shù)據(jù)。當(dāng)SM2=0,不管RB8狀態(tài),將RI置1—串口接收當(dāng)SM2=1,RB8=1時(shí),多機(jī)通信,接收信息為地址,將RI置1—串口接收
RB8=0時(shí),接收信息為數(shù)據(jù),但不發(fā)給本從機(jī),此時(shí)RI不置1—數(shù)據(jù)丟失88§4-3-3波特率一方式0:波特率=振蕩器頻率/12二方式2:波特率=2SMOD*振蕩器頻率/64三方式1、3(T1產(chǎn)生波特率):波特率=2SMOD*振蕩器頻率/[32*12(256-(TH1))]注:記住當(dāng)振蕩器頻率選用11.0592MHZ時(shí),對(duì)于常用波特率,能正確計(jì)算T1的初值。89§4-3-4多機(jī)通信原理在主從式多機(jī)系統(tǒng)中:
1主機(jī)發(fā)出的信息有兩類。一類為地址,用來(lái)確定需要和主機(jī)通信的從機(jī),特征是串行傳送的第9位數(shù)據(jù)為1;另一類是數(shù)據(jù),特征是串行傳送的第9位數(shù)據(jù)為0。2對(duì)從機(jī)來(lái)說(shuō),在接收時(shí),若RI=0,則只要SM2=0,接收總能實(shí)現(xiàn);而若SM2=1,則發(fā)送的第9位TB8必須為1接收才能進(jìn)行。901主機(jī)首先發(fā)出要求通信的從機(jī)地址信號(hào)。此時(shí),所有從機(jī)的SM2都為“1”,所有從機(jī)均收到地址信號(hào)。2從機(jī)判斷主機(jī)發(fā)出的地址信號(hào)是否與本從機(jī)號(hào)相符。相符的從機(jī)SM2“0”,反之為“1”。3主機(jī)發(fā)送數(shù)據(jù)幀。僅SM2=0的從機(jī)可收到。91§4-3-5串行口的應(yīng)用和編程一串行口應(yīng)用同一印板內(nèi),兩個(gè)單片機(jī)串行口可直接通信。單片機(jī)與PC機(jī)之間利用串行口通信,必須進(jìn)行電平轉(zhuǎn)換。二串行口編程串行口初始化編程:選擇串行口工作方式,波特率,允許串行口中斷。即對(duì)SCON、PCON、TMOD、TCON、TH1、TL1、IE、IP、SBUF編程。92例1:編寫程序,功能為對(duì)串行口初始化為方式1輸入/輸出,fosc=11.0592MHZ,波特率為9600,先在串行口上輸出字符串“MCS-51”,接著讀串行口上輸入的字符,又將該字符從串行口上輸出。
MOVTMOD,#20HMOVTH1,#0FDHMOVTL1,#0FDHSETBTR1MOVSCON,#52HMOVR4,#0MOVDPTR,#TSAB93LP1:MOVA,R4MOVCA,@A+DPTRJZLP6LP3:JBCTI,LP2SJMPLP3LP2:MOVSBUF,AINCR4SJMPLP1LP6:JBCRI,LP5SJMPLP6LP5:MOVA,SBUFLP8:JBCTI,LP7SJMPLP8LP7:MOVSBUF,ASJMPLP6TSAB:DB‘MCS-51’DB0AH,0DH,094例2:89C52串行口按雙工方式進(jìn)行數(shù)據(jù)收發(fā),要求波特率為1200,串口工作在方式1。編寫有關(guān)的通信程序。設(shè)發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為11.0592MHz。解:雙工通信要求收、發(fā)能同時(shí)進(jìn)行。實(shí)際上,收、發(fā)操作主要是在串行接口進(jìn)行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進(jìn)行,響應(yīng)中斷以后,通過(guò)檢測(cè)是RI置位還是TI置位來(lái)決定CPU是進(jìn)行發(fā)送操作還是接收操作。發(fā)送和接收都通過(guò)調(diào)用子程序來(lái)完成。95
主程序
MOVTMOD,#20H;T1設(shè)為模式2MOVTL1,#0E8H;MOVTH1,#0E8H;SETBTR1;啟動(dòng)定時(shí)器1MOVSCON,#50H;設(shè)置為方式1,REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址
MOVR1,#40H;接收數(shù)據(jù)區(qū)首址
ACALLSOUT;先輸出一個(gè)字符
SETBESSETBEA……
中斷服務(wù)程序
ORG0023H;串行口中斷入口
AJMPSBR1;轉(zhuǎn)至中斷服務(wù)程序
ORG0100HSBR1:JNBRI,SEND;TI=1,為發(fā)送中斷
ACALLSIN;RI=1,為接收中斷
SJMPNEXT;轉(zhuǎn)至統(tǒng)一的出口SEND:ACALLSOUT;調(diào)用發(fā)送子程序NEXT:RETI;中斷返回
96發(fā)送子程序SOUT:CLRTIMOVA,@R0;取發(fā)送數(shù)據(jù)到AINCR0;修改發(fā)送數(shù)據(jù)指針
MOVSBUF,A;發(fā)送
RET;返回接收子程序
SIN:CLRRIMOVA,SBUF;讀出接收緩沖區(qū)內(nèi)容
MOV@R1,A;讀入接收緩沖區(qū)
INCR1;修改接收數(shù)據(jù)指針
RET;返回97用串行口進(jìn)行雙機(jī)異步通信——
例3:將甲機(jī)片內(nèi)RAM50H—5FH單元中的數(shù)據(jù)塊從串行口輸出。定義在方式3下發(fā)送,TB8作奇偶校驗(yàn)位。采用定時(shí)器1方式2作波特率發(fā)生器,波特率為1200,fosc=11.0592MHz。
使乙機(jī)從甲機(jī)接收16個(gè)字節(jié)數(shù)據(jù)塊,并存入片外3000H—300FH單元。接收過(guò)程中要求判奇偶標(biāo)志RB8。若出錯(cuò)則置F0標(biāo)志為1,反之為0,然后返回。98甲機(jī)發(fā)送子程序——MOVTMOD,#20HMOVTL1,#0EBHMOVTH1,#0E8HSETBTR1MOVSCON,#0C0HMOVR0,#50HMOVR7,#10HTRS:MOVA,@R0MOVC,PMOVTB8,CMOVSBUF,AWAIT:JNBTI,$CLRTIINCR0DJNZR7,TRSRET99乙機(jī)接收子程序——
MOVTMOD,#20HMOVTL1,#0EBHMOVTH1,#0E8HSETBTR1MOVSCON,#0C0HMOVDPTR,#3000HMOVR7,#10HSETBRENWAIT:JNBRI,$CLRRIMOVA,SBUFJNBPSW.0,PZJNBRB8,ERRSJMPYESPZ:JBRB8,ERRYES:MOVX@DPTR,AINCDPTRDJNZR7,WAITCLRPSW.5RETERR:SETBPSW.5RET注意:雙機(jī)通信時(shí),兩機(jī)應(yīng)用相同的工作方式和波特率。100§4-3-6RS232C總線和電平轉(zhuǎn)換器RS-232C是由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)正式公布的,在異步串行通信中應(yīng)用最廣的標(biāo)準(zhǔn)總線(C表示此標(biāo)準(zhǔn)修改了三次)。它包括了按位串行傳輸?shù)碾姎夂蜋C(jī)械方面的規(guī)定,適用于短距離或帶調(diào)制解調(diào)器的通信場(chǎng)合。為了提高數(shù)據(jù)傳輸率和通信距離,EIA又公布了RS-422,RS-423和RS-485串行總線接口作準(zhǔn)。101
ELARS-232C是目前最常用的串行接口標(biāo)準(zhǔn),用于實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)之間、計(jì)算機(jī)與外設(shè)之間的數(shù)據(jù)通信。該標(biāo)準(zhǔn)的目的是定義數(shù)據(jù)終端設(shè)備(DTE)之間接口的電氣特性。一般
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校安全工作與應(yīng)急管理計(jì)劃
- 電視設(shè)備租賃合同三篇
- 數(shù)控板料折彎?rùn)C(jī)相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 亞硝酸鹽中毒解毒藥行業(yè)相關(guān)投資計(jì)劃提議
- 型材:異型鋼相關(guān)項(xiàng)目投資計(jì)劃書
- 《液壓與氣動(dòng)》課件 1齒輪泵的結(jié)構(gòu)和工作原理
- 市場(chǎng)管理服務(wù)相關(guān)項(xiàng)目投資計(jì)劃書
- 鐵路行業(yè)安全巡查的標(biāo)準(zhǔn)化計(jì)劃
- 《解除迷茫規(guī)劃人生》課件
- 普通話教程課件普通話水平測(cè)試
- 醫(yī)院培訓(xùn)課件:《一例腸造口患者的病例討論》
- CHT 9009.2-2010 基礎(chǔ)地理信息數(shù)字成果1:5 000 1:10 000 1:25 000 1:50 000 1:100 000數(shù)字高程模型
- A課堂懲罰游戲
- 中國(guó)畫基礎(chǔ)-梅蘭竹菊智慧樹知到期末考試答案章節(jié)答案2024年華僑大學(xué)
- 工作轉(zhuǎn)正答辯問(wèn)題
- 供應(yīng)鏈金融平臺(tái)設(shè)計(jì)方案
- 網(wǎng)絡(luò)安全技術(shù)知識(shí)競(jìng)賽考試題庫(kù)500題(含答案)
- 外墻水包水清工施工合同
- 2023年國(guó)家糧食和物資儲(chǔ)備局招聘考試真題及答案
- 《零件測(cè)繪》學(xué)業(yè)水平考試題庫(kù)(濃縮300題)
- 集美大學(xué)航海技術(shù)船舶避碰與值班教案2課件
評(píng)論
0/150
提交評(píng)論