第4章51系列單片機并行口的功能模塊及應用解析_第1頁
第4章51系列單片機并行口的功能模塊及應用解析_第2頁
第4章51系列單片機并行口的功能模塊及應用解析_第3頁
第4章51系列單片機并行口的功能模塊及應用解析_第4頁
第4章51系列單片機并行口的功能模塊及應用解析_第5頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章51系列單片機的功能模塊及應用主要掌握并行口、串行口、定時器的結構、工作原理及應用1§4-1并行口及其應用51系列單片機的并行口,按特性可分類為:單一的準雙向口(如89C52的P1.2~P1.7)多功能復用的準雙向口(如89C52的P1.0、P1.1,P3.0~P3.7)可作地址總線輸出口的準雙向口(P2)可作地址/數(shù)據(jù)總線口的三態(tài)雙向口(P0)2每個I/O線均由鎖存器,輸出電路和輸入緩沖器組成。每一條口線可獨立用作輸入和輸出。作輸出時可鎖存數(shù)據(jù),輸入時可緩沖數(shù)據(jù)。CPU對口的讀操作有兩種:①讀—修改—寫操作(讀口鎖存器狀態(tài))例:ANLP0,A ;(P0)←(P0)∧(A)ORLP0,#data;(P0)←(P0)∨dataDECP0;(P0)←(P0)-1②讀引腳操作(讀口引腳上外部輸入信息)例MOVA,P134§4-1-1P0口

P0口是一個三態(tài)雙向口,可作為地址/數(shù)據(jù)分時復用口,也可作為通用I/O接口。其1位的結構原理如下圖所示。P0口由8個這樣的電路組成。5P0口1位結構圖起輸出鎖存作用,8個鎖存器構成了SFR—P0V1、V2組成輸出驅動器,以增大帶負載能力三態(tài)門1是引腳輸入緩沖器讀鎖存器端口6

2.地址/數(shù)據(jù)分時復用功能

當P0口作為地址/數(shù)據(jù)分時復用總線時,可分為兩種情況:一種是從P0口輸出地址或數(shù)據(jù),另一種是從P0口輸入數(shù)據(jù)。

7在訪問片外存儲器而需從P0口輸出地址或數(shù)據(jù)信號時,控制信號應為高電平“1”,使轉換開關MUX把反相器4的輸出端與V1接通,同時把與門3打開。1)當?shù)刂坊驍?shù)據(jù)為“1”時,經反相器4使V1截止,而經與門3使V2導通,P0.x引腳上出現(xiàn)相應的高電平“1”;

2)當?shù)刂坊驍?shù)據(jù)為"0"時,經反相器4使V1導通而V2截止,引腳上出現(xiàn)相應的低電平"0"。這樣就將地址/數(shù)據(jù)的信號輸出。83.通用I/O接口功能

當P0口作為通用I/O口使用,在CPU向端口輸出數(shù)據(jù)時,對應的控制信號為0,轉換開關把輸出級與鎖存器Q端接通,同時因與門3輸出為0使V2截止,此時,輸出級是漏極開路電路。當寫脈沖加在鎖存器時鐘端CLK上時,與內部總線相連的D端數(shù)據(jù)取反后出現(xiàn)在Q端,又經輸出V1反相,在P0引腳上出現(xiàn)的數(shù)據(jù)正好是內部總線的數(shù)據(jù)。當要從P0口輸入數(shù)據(jù)時,引腳信息仍經輸入緩沖器進入內部總線。9總之:一P0口作為一般I/O口使用

1P0口用作輸出口:必須外接上拉電阻,才有高電平輸出。2P0口作輸入口:先向端口鎖存器寫入“1”。二P0口作為地址/數(shù)據(jù)總線使用1以P0口引腳輸出低8位地址或數(shù)據(jù)信息2由P0口輸入數(shù)據(jù)三P0口可驅動8個LSTTL電路10§4-1-2P1口(準雙向口)11①P1.0、P1.1為多功能雙向口,P1.2~P1.7為單一功能準雙向口。

②P1口的第一功能是準雙向口,每一位可分別定義為輸入線或輸出線。

③輸出驅動部分由場效應管V1與內部上拉電阻組成。當其某位輸出高電平時,可以提供上拉電流負載。12④P1的某一位作為輸入線時,該位的口鎖存器必須保持“1”。使輸出場效應管截止。該引腳才可由內部拉高電路拉成高電平,或由外部電路拉成低電平。

⑤P1口具有驅動4個LSTTL負載的能力。1314§4-1-3P2口(準雙向口)15當作為準雙向通用I/O口使用時:控制信號使轉換開關接向左側,鎖存器Q端經反相器3接V1,其工作原理與P1相同,也具有輸入、輸出、端口操作三種工作方式,負載能力也與P1相同。

161系統(tǒng)中外接程序存儲器時:P2口輸出程序存儲器的高8位地址,不作I/O口使用。2系統(tǒng)中無外接程序存儲器,而擴展有片外RAM的系統(tǒng)中:①片外RAM的容量<256B:P2口仍做輸入/輸出口使用。使用R0或R1作地址指針。②片外RAM的容量>256B:P2口不能做輸入/輸出口,而做系統(tǒng)擴展的高8位地址總線口使用。使用DPTR、P2R0、P2R1作地址指針。17§4-1-4P3口(準雙向口)18

P3口是一多功能口,既做準雙向口又做特殊輸入輸出口。1做通用I/O口使用:

P3口做輸入使用,應由軟件向口鎖存器寫“1”。192做第二功能使用:某位做第二功能使用該位D鎖存器Q應被硬件自動置“1”。

P3.0RXDP3.5T1P3.1TXD(出)P3.6WR(出)P3.2INT0P3.7RD(出)P3.3INT1P3.4T03P3口具有驅動4個LSTTL負載的能力。20I/O端口的操作方式:(1)輸出數(shù)據(jù)方式:CPU通過一條數(shù)據(jù)傳送指令就可以把輸出數(shù)據(jù)寫入P0~P3的端口鎖存器,然后通過輸出驅動器送到端口引腳線。例如,下面的指令均可在P0口輸出數(shù)據(jù)。

MOVP0,AANLP0,#dataORLP0,A(2)讀端口數(shù)據(jù)方式:

CPU讀入的這個數(shù)據(jù)并非端口引腳線上的數(shù)據(jù)。讀端口數(shù)據(jù)可以直接讀端口。例如,下面的指令均可以從P1口輸入數(shù)據(jù)。

MOVA,P1MOV20H,P1MOVR0,P1MOV@R0,P121(3)讀端口引腳方式:讀端口引腳方式可以從端口引腳上讀入信息。在這種方式下,CPU首先必須使欲讀端口引腳所對應的鎖存器置1,然后才能讀端口引腳。因此,用戶在讀引腳時必須先置位鎖存器后讀,連續(xù)使用兩條指令。例如,下面的程序可以讀P1引腳上的低4位信號。

MOVP1,#0FH;置位P1引腳的低4位

MOVA,P1;讀P1引腳上的低4位信號送累加器A22§4-1-5并行口的應用1外接蜂鳴器2利用可控硅控制加熱電路3BCD碼撥碼盤的接口

BCD碼撥碼盤構造——一個撥碼盤可以輸入1位十進制數(shù)據(jù)。撥碼盤撥到某個位置時,控制線分別與4位數(shù)據(jù)線中某幾位接通。接通線定義為“1”,不通的線定義為“0”。23§4-2定時器及其應用定時器功能:

1定時操作

2測量外部輸入信號

3定時輸出

4監(jiān)視系統(tǒng)正常工作24§4-2-1定時器的結構和工作原理

1定時器由一個N位計數(shù)器、計數(shù)時鐘源控制電路、狀態(tài)和控制寄存器等組成。2計數(shù)脈沖有兩個來源:①外部的脈沖源②系統(tǒng)的時鐘振蕩器。內部時鐘外部時鐘↗N位計數(shù)器TFTMODTCON中斷253用作定時器時,每經過一個機器周期,計數(shù)器自動加1,直到計數(shù)溢出;用作計數(shù)器時,外部時鐘脈沖加在定時器的外輸入端T0(P3.4)或T1(P3.5),每出現(xiàn)一次負跳變,計數(shù)器加1。4兩個模擬開關,左邊決定定時/計數(shù)器的工作狀態(tài),右邊決定脈沖源是否加在計數(shù)器的輸入端。516位的計數(shù)器由兩個8位SFRTH和TL組成。6定時器工作不占用CPU時間,除非定時器/計數(shù)器溢出,才能中斷CPU的當前操作。26定時器/計數(shù)器T0、T1的結構框圖27§4-2-2定時器/計數(shù)器T0和T1一方式寄存器TMOD(89H)1不能進行位尋址,只能用字節(jié)尋址。復位時,TMOD所有位為0熟悉各位功能T1方式字段T0方式字段GATEC/TM1M0GATEC/TM1M028①GATE——門控位“1”:定時器的計數(shù)受外部引腳輸入電平的控制“0”:定時器的計數(shù)不受外部引腳輸入電平的控制②C/T——功能選擇位“1”:計數(shù)功能“0”:定時功能③M1M0——工作方式選擇位29

適于T0,兩個8位計數(shù)器M1M0工作方式方式說明00013位定時器/計數(shù)器01116位定時器/計數(shù)器102具有自動重裝初值的8位定時器/計數(shù)器113

30二控制寄存器TCON(88H)1既可字節(jié)尋址又可位尋址。復位時,TCON各位為0例:SETBTR1;啟動定時器T1工作熟悉各位功能D7D6D5D4D3D2D1D08FH8EH8DH8CH8BH8AH89H88HTF1TR1TF0TR0IE1IT1IE0IT031TF1——定時器/計數(shù)器T1的溢出標志位TR1——定時器/計數(shù)器T1的運行控制位TF0——定時器/計數(shù)器T0的溢出標志位TR0——定時器/計數(shù)器T0的運行控制位IE1——外部中斷1下降沿觸發(fā)標志位IE0——外部中斷0下降沿觸發(fā)標志位IT1——外部中斷1觸發(fā)類型選擇位IT0——外部中斷0觸發(fā)類型選擇位32三定時器/計數(shù)器的初始化初始化即將控制字寫入定時器/計數(shù)器的過程。初始化一般步驟:1寫入初值TH0、TL0或TH1、TL12對TMOD賦值3對IE賦值(有中斷產生時)4①若用軟件啟動,則僅把TR0或TR1置“1”;②若用外中斷引腳電平啟動,則還需給外引腳加啟動電平。33四定時器/計數(shù)器的4種工作方式1方式034

方式0是一個13位的定時器/計數(shù)器,由TL0的低5位和TH0的8位組成。定時時間為T=12*(213-a)/foscs最大定時時間:M=213=8192T35例7:已知晶振頻率fosc=6MHZ,若使用T0方式0產生10ms定時中斷,試對T0進行初始化編程。

MOVTH0,#63HMOVTL0,#18HSETBTR0MOVIE,#82HRET36例:T0工作于方式0,要求在P1.0引腳上產生周期為2ms的方波輸出(fosc=6MHZ)

ORG0000HAJMPMAINORG000BHAJMPINQPORG0030HMAIN:MOVTMOD,#00HMOVTH0,#0F0HMOVTL0,#0CHSETBTR0;啟動T0SETBET0;允許T0中斷

SETBEA;開放CPU中斷

AJMP$;定時中斷等待37

ORG4000H;中斷服務程序INQP:MOVTH0,#0F0H;重寫定時常數(shù)

MOVTL0,#0CHCPLP1.0;P1.0變反輸出

RETI

382方式1

方式1是一個16位定時器/計數(shù)器,結構和操作方式與方式0基本相同。定時時間為T=12*(216-a)/foscs最大定時時間:M=216=65536T39例:設fosc=12MHz,T0工作于方式1,產生50ms定時中斷,TF0為高級中斷源。試編寫主程序中的初試化程序和中斷服務程序,使P1.0產生周期為1秒的方波。MAIN:MOVSP,

#EFHMOVTH0,

#3CHMOVTL0,

#0B0HMOVTMOD,#1MOVIP,#240

MOVIE,#82HSETBTR0MOV30H,#0AHPTF0:ORLTL0,#0B0H;中斷服務程序

MOVTH0,#3CHDJNZ30H,PTF0RMOV30H,#0AHCPLP1.0PTF0R:RETI41用查詢法:

MOV30H,#0AHMOVTH0,#3CHMOVTL0,#0B0HMOVTMOD,#1SETBTR0L2:JBCTF0,L1SJMPL2L1:MOVTH0,#3CHMOVTL0,#0B0H42

DJNZ30H,L2MOV30H,#0AHCPLP1.0SJMPL2433方式2

方式2是能重置初值的8位定時器/計數(shù)器,TL0作為8位計數(shù)器,TH0作為計數(shù)初值寄存器。適于用做較精確的定時脈沖信號發(fā)生器。定時時間T=12*(28-a)/foscs

最大定時時間:M=28=256T44定時器/計數(shù)器方式2的邏輯結構45

MOVTMOD,#60H;設置T1為方式2計數(shù)

MOVTH1,#9CH;賦初值

MOVTL1,#9CHSETBTR1DE:JBCTF1,RE;查詢計數(shù)溢出

AJMPDERE:CPLP1.0AJMPDE例:用定時器1在方式2計數(shù),要求每計滿100次,將P1.0端取反。外部計數(shù)信號由P3.5引入,每跳變一次計數(shù)器加1100=28-a;a=156=9CH46保護現(xiàn)場賦計數(shù)初值到1s?(32H)加1(32H)=60?(32H)清0(31H)加1(31H)=60?(31H)清0(30H)加1(30H)=24?(30H)清0恢復現(xiàn)場返回例4.13(書111)aaNNNNYYYY圖

中斷服務程序流程圖47例:當P3.4引腳上的電平發(fā)生負跳變時,從P1.0輸出一個500μs的同步脈沖。請編程序實現(xiàn)該功能。查詢方式,fosc=6MHz。48解:(1)模式選擇

選T0為模式2,外部事件計數(shù)方式。當P3.4引腳上的電平發(fā)生負跳變時,T0計數(shù)器加1,溢出標志TF0置1;然后改變T0為500μs定時工作方式,并使P1.0輸出由1變?yōu)?。T0定時到產生溢出,使P1.0輸出恢復高電平,T0又恢復外部事件計數(shù)方式。如圖所示。49(2)計算初值

T0工作在外部事件計數(shù)方式,當計數(shù)到28時,再加1計數(shù)器就會溢出。設計數(shù)初值為X,當再出現(xiàn)一次外部事件時,計數(shù)器溢出。則:X+1=28

X=28

-1=11111111B=0FFH

T0工作在定時工作方式,設晶振頻率為6MHz,500μs相當于250個機器周期。因此,初值X為(28-X)×2μs=500μs

X=6=06H50(3)程序清單START:MOVTMOD,#06H;設置T0為模式2,外部計數(shù)方式

MOVTL0,#0FFH;T0計數(shù)器初值

MOVTH0,#0FFHSETBTR0;啟動T0計數(shù)

LOOP1:JBCTF0,PTFO1;查詢T0溢出標志,;TF0=1時轉,且清TF0=0SJMPLOOP1;51

PTFO1:CLRTR0;停止計數(shù)

MOVTMOD,#02H;設置T0為模式2,定時方式

MOVTL0,#06H;送初值,定時500μsMOVTH0,#06HCLRP1.0;P1.0清0

SETBTR0;啟動定時500μsLOOP2:JBCTF0,PTFO2;查詢T0溢出標志,;TF0=1時轉,且清TF0=0;(第一個500μs到否?)

SJMPLOOP2;等待

PTFO2:SETBP1.0;P1.0置1CLRTR0;停止計數(shù)

SJMPSTART52定時器/計數(shù)器方式3的邏輯結構

4方式3TH053

方式3只適用于T0,T0分為兩個獨立的8位計數(shù)器TL0和TH0。一般T1用作串行口波特率發(fā)生器。最大定時時間:M=28=256T5455例用定時器T0,分別產生兩個方波,一個周期為200s,另一個周期為400s,該單片機同時使用串行口,用定時器/計數(shù)器作為波特率發(fā)生器。(fosc=9.216MHZ)。56解:定時初值計算TL0=28-9.216*106*100*10-6/12=256-76.8=179.2

轉換十六進制為0B3HTH0=28-9.216*106*200*10-6/12=256-153.6=102.4

轉換十六進制為66H57

ORG0000HAJMPMAINORG000BH;TL0中斷入口

AJMPITL0ORG001BH;TH0中斷入口

AJMPITH0ORG0100HMAIN:MOVSP,#60HMOVTMOD,#23H

58

MOVTL0,#0B3HMOVTH0,#66HMOVTL1,#data;data是根據(jù)波特率;要求設置的常數(shù)(初值)

MOVTH1,#dataSETBTR0;啟動TL0初值

SETBTR1;啟動TH0初值

SETBET0;允許TL0中斷

SETBET1;允許TH0中斷

SETBEA;CPU中斷開放

AJMP$

59

ORG0200HITL0:MOVTL0,#0B3HCPLP1.0;輸出方波200sRETIITH0:MOVTH0,#66HCPLP1.1;輸出方波400sRETI60例:設某用戶系統(tǒng)已使用了兩個外部中斷源,并置定時器T1工作在模式2,作串行口波特率發(fā)生器用。現(xiàn)要求再增加一個外部中斷源,并由P1.0引腳輸出一個5kHz的方波。Fosc=12MHz.61解:(1)工作模式

可設置T0工作在模式3計數(shù)器方式,把T0的引腳作附加的外部中斷輸入端,TL0的計數(shù)初值為FFH,當檢測到T0引腳電平出現(xiàn)由1至0的負跳變時,TL0產生溢出,申請中斷,相當于一個邊沿觸發(fā)的外部中斷源。

T0模式3下,TL0作計數(shù)用,而TH0用作8位的定時器,定時控制P1.0引腳輸出5kHz的方波信號。62(2)計算初值TL0的計數(shù)初值為FFH。TH0的計數(shù)初值X為:

P1.0方波周期T=1/(5kHz)=0.2ms=200μs

用TH0作定時100μs時,

X=256-100×12/12=15663(3)程序清單

MOVTMOD,#27H;T0為模式3,計數(shù)方式

;T1為模式2,定時方式

MOVTL0,#0FFH;TL0計數(shù)初值

MOVTH0,#156;TH0計數(shù)初值

MOVTL1,#data;data是根據(jù)波特率;要求設置的常數(shù)(初值)

MOVTH1,#dataMOVTCON,#55H;外中斷0,外中斷1邊沿觸發(fā),;啟動T0,T1MOVIE,#9FH;開放全部中斷…64TL0溢出中斷服務程序(由000BH轉來)TL0INT:MOVTL0,#0FFH;TL0重賦初值

……;(中斷處理)

RETI

TH0溢出中斷服務程序(由001BH轉來)TH0INT:MOVTH0,#156;TH0重賦初值

CPLP1.0;P1.0取反輸出

RETI串行口及外部中斷0,外部中斷1的服務程序略。65設時鐘頻率為6MHz。編寫利用T0產生1s定時的程序。66五門控位的應用GATE位是控制外部輸入脈沖對定時計數(shù)器的控制。當為“1”時,允許外部輸入電平控制啟、停定時器。利用這個特性可測量外部輸入脈沖的寬度。例:利用T0門控位測試INT0引腳上出現(xiàn)的正脈沖的寬度,將所測得值高位存入片內71H單元,低位存入片內70H單元。(fosc=12MHz)測試時,應在/INT0為低電平時,設TR0為1;當/INT0變高時,啟動計數(shù);當/INT0再變低時,停止計數(shù)。該計數(shù)值即被測正脈沖寬度。67MOVTMOD,#09H;T0定時器方式,GATE=1MOVTL0,#00HMOVTH0,#00HMOVR0,#70HJBP3.2,$;等待P3.2變低SETBTR0;啟動T0準備工作JNBP3.2,$;等待P3.2變高JBP3.2,$;等待P3.2再次變低CLRTR0;停止計數(shù)MOV@R0,TL0;存放計數(shù)低字節(jié)INCR0MOV@R0,TH0;存放計數(shù)高字節(jié)SJMP$68§4-3串行接口UART一兩種基本的通信方式(a)并行通信;(b)串行通信69二串行通信傳輸方式(a)單工方式;(b)半雙工方式;(c)全雙工方式70三串行通信兩種基本方式1異步通信①異步通信中數(shù)據(jù)或字符是一幀一幀傳送。②幀即為一個字符的完整通信格式,又稱幀格式。在幀格式中,一個字符由4部分組成:起始位、數(shù)據(jù)位、奇偶校驗位、停止位。串行異步傳送的字符格式712同步通信

數(shù)據(jù)或字符開始處是由一同步字符來指示,并由時鐘實現(xiàn)發(fā)送端和接收端同步。四

波特率(Baudrate)①波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進制位數(shù),單位為位/秒。②要求發(fā)送端與接收端的波特率必須一致。72§4-3-1串行接口的組成和特性

51系列單片機的串行口是全雙工異步串行通信接口。一串行口結構1波特率發(fā)生器主要由T1、T2及內部的一些控制開關和分頻器組成。提供串行口的時鐘信號即TCLK、RCLK。73串行口結構框圖74注意:接收器是雙緩沖結構,在前一個字節(jié)被從接收緩沖器SBUF讀出之前,第二個字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個字節(jié)接收完畢而前一個字節(jié)CPU未讀取時,會丟失前一個字節(jié).752串行口的內部包含——①串行數(shù)據(jù)緩沖寄存器SBUF數(shù)據(jù)接收緩沖器(只讀出不寫入)和數(shù)據(jù)發(fā)送緩沖器(只寫入不讀出)。物理上隔離,共用一個地址(99H)。當向SBUF發(fā)“寫”命令時(執(zhí)行MOVSBUF,A

),即從片內總線向發(fā)送SBUF寫入數(shù)據(jù),并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完使TI=1。在滿足串行口接收中斷標志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數(shù)據(jù)進入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當發(fā)讀SBUF命令時(執(zhí)行MOVA,SBUF),便由接收SBUF取出信息通過內部總線送CPU。76②串行口控制寄存器③串行數(shù)據(jù)輸入/輸出引腳接收方式下,串行數(shù)據(jù)從RXD(P3.0)輸入。串行口內部在接收緩沖器之前還有移位寄存器,構成串行接收雙緩沖結構。避免數(shù)據(jù)接收重疊。發(fā)送方式下,串行數(shù)據(jù)從TXD(P3.1)輸出。④串行口控制邏輯77二串行口控制1串行口控制寄存器SCON(98H)

①SM0和SM1SM0SM1SM2RENTB8RB8TIRISM0SM1工作方式功能波特率00

0擴展移位寄存器fosc/1201

18位UART由定時器控制10

29位UARTfosc/32fosc/6411

39位UART由定時器控制78②SM2方式2和方式3的多機通信控制位

方式0,SM2=0。方式1,若SM2=1,只有接收到有效停止位,接收中斷RI才置1。方式2和方式3中,如SM2=1,則接收到的第9位數(shù)據(jù)(RB8)為0時不啟動接收中斷標志RI(即RI=0),并且將接收到的前8位數(shù)據(jù)丟棄;RB8為1時,才將接收到的前8位數(shù)據(jù)送入SBUF,并置位RI,產生中斷請求。當SM2=0時,則不論第9位數(shù)據(jù)為0或1,都將前8位數(shù)據(jù)裝入SBUF中,并產生中斷請求。該功能用于多機通信中。79③REN允許串行接收位

1—允許接收;0—禁止接收由軟件置1或清0,相當于串行接收的開關。在串行通信接收控制過程中,如果滿足RI=0和REN=1(允許接收)的條件,就允許接收,一幀數(shù)據(jù)就裝載入接收SBUF中。④TB8發(fā)送數(shù)據(jù)D8位

在方式2和方式3時,TB8為所要發(fā)送的第9位數(shù)據(jù)。在多機通信中,以TB8位的狀態(tài)表示主機發(fā)送的是地址還是數(shù)據(jù):TB8=0為數(shù)據(jù),TB8=1為地址;也可用作數(shù)據(jù)的奇偶校驗位。該位由軟件置位或復位。在方式0或方式1中,該位未用80⑤RB8接收數(shù)據(jù)D8位在方式2和方式3時,接收到的第9位數(shù)據(jù),可作為奇偶校驗位或地址幀或數(shù)據(jù)幀的標志。方式1時,若SM2=0,則RB8是接收到的停止位。在方式0時,不使用RB8位。⑥TI發(fā)送中斷標志在方式0時,當發(fā)送數(shù)據(jù)第8位結束后,或在其它方式發(fā)送停止位后,由內部硬件使TI置位,向CPU請求中斷。意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準備發(fā)送下一幀數(shù)據(jù)。CPU在響應中斷后,必須用軟件清零。此外,TI也可供查詢使用。81⑦RI接收中斷標志位在方式0時,當接收數(shù)據(jù)的第8位結束后,或在其它方式接收到停止位的中間時由內部硬件使RI置位,向CPU請求中斷。表示一幀數(shù)據(jù)接收結束,并已裝入接收SBUF中,要求CPU取走數(shù)據(jù)。在CPU響應中斷后,也必須用軟件清零。RI也可供查詢使用。822特殊功能寄存器PCON

SMOD位是串行口波特率系數(shù)控制位,為1時使波特率加倍。其余位是掉電方式控制位,與串行口無關。SMOD83§4-3-2串行接口的工作原理一方式01方式0為同步移位寄存器輸入/輸出方式,常用于擴展并行I/O口。2數(shù)據(jù)由RXD串行輸入/輸出,TXD輸出移位脈沖。3數(shù)據(jù)傳輸波特率固定為fosc/12。4接收/發(fā)送的是8位數(shù)據(jù),傳輸時低位在前。84輸出:當執(zhí)行寫SBUF的指令時(MOVSBUF,A),啟動串行數(shù)據(jù)發(fā)送。從低位開始串行輸出。當完成一個字節(jié)的輸出后就停止移位,并置位TI。輸入:

在REN=1,RI=0時啟動串行口接收。當外部移位寄存器內容移入內部移位寄存器,并寫入SBUF,則置位RI,停止移位,完成一個字節(jié)的輸入。注意:每當發(fā)送或接收完8位數(shù)據(jù)時,由硬件將發(fā)送中斷TI或接收中斷RI標志置“1”;CPU響應TI或RI中斷請求時,不會清除標志,必須由軟件清“0”.85二方式11方式1時,串行口為10位通用異步接口。2數(shù)據(jù)傳輸波特率由定時/計數(shù)器T1和T2的溢出決定,由程序設定。當T2CON中RCLK和TCLK置位時,由T2作接收/發(fā)送的波特率發(fā)生器;當RCLK和TCLK都為0時,由T1作接收/發(fā)送的波特率發(fā)生器。3數(shù)據(jù)從引腳TXD端輸出,從引腳RXD輸入。86發(fā)送當數(shù)據(jù)寫入發(fā)送緩沖器時,啟動發(fā)送器開始發(fā)送。8位數(shù)據(jù)發(fā)送完,置位TI=1,并申請中斷,通知CPU可發(fā)送下一個數(shù)據(jù)。接收在REN=1的前提下,確認是真正起始位“0”后,開始接收一幀數(shù)據(jù)。當RI=0且SM2=0時,數(shù)據(jù)被有效接收。將接收到的數(shù)據(jù)裝入串行口的SBUF,并置位RI.87三方式2和方式31CPU向發(fā)送緩沖器寫入數(shù)據(jù)就啟動串行口發(fā)送。發(fā)送完畢,使TI=1。2接收時,先置REN為“1”,將RI清“0”。再根據(jù)SM2狀態(tài)和所接收到RB8狀態(tài)決定串口在信息到來后是否會使RI=1,申請中斷,接收數(shù)據(jù)。當SM2=0,不管RB8狀態(tài),將RI置1—串口接收當SM2=1,RB8=1時,多機通信,接收信息為地址,將RI置1—串口接收

RB8=0時,接收信息為數(shù)據(jù),但不發(fā)給本從機,此時RI不置1—數(shù)據(jù)丟失88§4-3-3波特率一方式0:波特率=振蕩器頻率/12二方式2:波特率=2SMOD*振蕩器頻率/64三方式1、3(T1產生波特率):波特率=2SMOD*振蕩器頻率/[32*12(256-(TH1))]注:記住當振蕩器頻率選用11.0592MHZ時,對于常用波特率,能正確計算T1的初值。89§4-3-4多機通信原理在主從式多機系統(tǒng)中:

1主機發(fā)出的信息有兩類。一類為地址,用來確定需要和主機通信的從機,特征是串行傳送的第9位數(shù)據(jù)為1;另一類是數(shù)據(jù),特征是串行傳送的第9位數(shù)據(jù)為0。2對從機來說,在接收時,若RI=0,則只要SM2=0,接收總能實現(xiàn);而若SM2=1,則發(fā)送的第9位TB8必須為1接收才能進行。901主機首先發(fā)出要求通信的從機地址信號。此時,所有從機的SM2都為“1”,所有從機均收到地址信號。2從機判斷主機發(fā)出的地址信號是否與本從機號相符。相符的從機SM2“0”,反之為“1”。3主機發(fā)送數(shù)據(jù)幀。僅SM2=0的從機可收到。91§4-3-5串行口的應用和編程一串行口應用同一印板內,兩個單片機串行口可直接通信。單片機與PC機之間利用串行口通信,必須進行電平轉換。二串行口編程串行口初始化編程:選擇串行口工作方式,波特率,允許串行口中斷。即對SCON、PCON、TMOD、TCON、TH1、TL1、IE、IP、SBUF編程。92例1:編寫程序,功能為對串行口初始化為方式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串行口按雙工方式進行數(shù)據(jù)收發(fā),要求波特率為1200,串口工作在方式1。編寫有關的通信程序。設發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為11.0592MHz。解:雙工通信要求收、發(fā)能同時進行。實際上,收、發(fā)操作主要是在串行接口進行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進行,響應中斷以后,通過檢測是RI置位還是TI置位來決定CPU是進行發(fā)送操作還是接收操作。發(fā)送和接收都通過調用子程序來完成。95

主程序

MOVTMOD,#20H;T1設為模式2MOVTL1,#0E8H;MOVTH1,#0E8H;SETBTR1;啟動定時器1MOVSCON,#50H;設置為方式1,REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址

MOVR1,#40H;接收數(shù)據(jù)區(qū)首址

ACALLSOUT;先輸出一個字符

SETBESSETBEA……

中斷服務程序

ORG0023H;串行口中斷入口

AJMPSBR1;轉至中斷服務程序

ORG0100HSBR1:JNBRI,SEND;TI=1,為發(fā)送中斷

ACALLSIN;RI=1,為接收中斷

SJMPNEXT;轉至統(tǒng)一的出口SEND:ACALLSOUT;調用發(fā)送子程序NEXT:RETI;中斷返回

96發(fā)送子程序SOUT:CLRTIMOVA,@R0;取發(fā)送數(shù)據(jù)到AINCR0;修改發(fā)送數(shù)據(jù)指針

MOVSBUF,A;發(fā)送

RET;返回接收子程序

SIN:CLRRIMOVA,SBUF;讀出接收緩沖區(qū)內容

MOV@R1,A;讀入接收緩沖區(qū)

INCR1;修改接收數(shù)據(jù)指針

RET;返回97用串行口進行雙機異步通信——

例3:將甲機片內RAM50H—5FH單元中的數(shù)據(jù)塊從串行口輸出。定義在方式3下發(fā)送,TB8作奇偶校驗位。采用定時器1方式2作波特率發(fā)生器,波特率為1200,fosc=11.0592MHz。

使乙機從甲機接收16個字節(jié)數(shù)據(jù)塊,并存入片外3000H—300FH單元。接收過程中要求判奇偶標志RB8。若出錯則置F0標志為1,反之為0,然后返回。98甲機發(fā)送子程序——MOVTMOD,#20HMOVTL1,#0EBHMOVTH1,#0E8HSETBTR1MOVSCON,#0C0HMOVR0,#50HMOVR7,#10HTRS:MOVA,@R0MOVC,PMOVTB8,CMOVSBUF,AWAIT:JNBTI,$CLRTIINCR0DJNZR7,TRSRET99乙機接收子程序——

MOVTMOD,#20HMOVTL1,#0EBHMOVTH1,#0E8HSETBTR1MOVSCON,#0C0HMOVDPTR,#3000HMOVR7,#10HSETBRENWAIT:JNBRI,$CLRRIMOVA,SBUFJNBPSW.0,PZJNBRB8,ERRSJMPYESPZ:JBRB8,ERRYES:MOVX@DPTR,AINCDPTRDJNZR7,WAITCLRPSW.5RETERR:SETBPSW.5RET注意:雙機通信時,兩機應用相同的工作方式和波特率。100§4-3-6RS232C總線和電平轉換器RS-232C是由美國電子工業(yè)協(xié)會(EIA)正式公布的,在異步串行通信中應用最廣的標準總線(C表示此標準修改了三次)。它包括了按位串行傳輸?shù)碾姎夂蜋C械方面的規(guī)定,適用于短距離或帶調制解調器的通信場合。為了提高數(shù)據(jù)傳輸率和通信距離,EIA又公布了RS-422,RS-423和RS-485串行總線接口作準。101

ELARS-232C是目前最常用的串行接口標準,用于實現(xiàn)計算機與計算機之間、計算機與外設之間的數(shù)據(jù)通信。該標準的目的是定義數(shù)據(jù)終端設備(DTE)之間接口的電氣特性。一般

溫馨提示

  • 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

提交評論