定時(shí)計(jì)數(shù)器和串行接口_第1頁(yè)
定時(shí)計(jì)數(shù)器和串行接口_第2頁(yè)
定時(shí)計(jì)數(shù)器和串行接口_第3頁(yè)
定時(shí)計(jì)數(shù)器和串行接口_第4頁(yè)
定時(shí)計(jì)數(shù)器和串行接口_第5頁(yè)
已閱讀5頁(yè),還剩118頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

定時(shí)計(jì)數(shù)器和串行接口第一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日(1)了解定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理。(2)熟悉定時(shí)/計(jì)數(shù)器的控制寄存器。(3)掌握定時(shí)/計(jì)數(shù)器的應(yīng)用編程。(4)了解串行通信接口的結(jié)構(gòu)和工作原理。(5)熟悉串行通信接口的控制寄存器。(6)掌握串行通信的應(yīng)用編程。

本章教學(xué)要求第二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日7.1定時(shí)/計(jì)數(shù)器在實(shí)際的控制系統(tǒng)中常要求有外部實(shí)時(shí)時(shí)鐘,以實(shí)現(xiàn)定時(shí)或延時(shí)控制;還要求有外部計(jì)數(shù)器,以實(shí)現(xiàn)對(duì)外界事件進(jìn)行計(jì)數(shù)。比如,在單片機(jī)控制的電力拖動(dòng)系統(tǒng)中,控制的對(duì)象為電動(dòng)機(jī),為了實(shí)現(xiàn)閉環(huán)控制,就需要定時(shí)地對(duì)轉(zhuǎn)速進(jìn)行采樣。第三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日對(duì)于定時(shí)/計(jì)數(shù)器來(lái)說(shuō),不管是獨(dú)立的定時(shí)器芯片還是單片機(jī)內(nèi)的定時(shí)器,大都有以下特點(diǎn):

(1)定時(shí)/計(jì)數(shù)器有多種工作方式,可以是計(jì)數(shù)方式也可以是定時(shí)方式。(脈沖內(nèi)部提供、外部提供)

(2)定時(shí)/計(jì)數(shù)器的計(jì)數(shù)值是可變的,當(dāng)然對(duì)計(jì)數(shù)的最大值有一定限制,這取決于計(jì)數(shù)器的位數(shù)。計(jì)數(shù)的最大值也就限制了定時(shí)的最大值。

(3)可以按照規(guī)定的定時(shí)或計(jì)數(shù)值,在定時(shí)時(shí)間到或者計(jì)數(shù)終止時(shí),發(fā)出中斷申請(qǐng),以便實(shí)現(xiàn)定時(shí)控制。第四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

7.1.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)及工作原理

MCS-51單片機(jī)的定時(shí)/計(jì)數(shù)器(以下簡(jiǎn)稱(chēng)T/C)的結(jié)構(gòu)如下圖所示。由圖可見(jiàn),T/C的核心是1個(gè)加1計(jì)數(shù)器,它的輸入脈沖有兩個(gè)來(lái)源:一個(gè)是外部脈沖源——計(jì)數(shù)器,另一個(gè)是系統(tǒng)機(jī)器周期(時(shí)鐘振蕩器經(jīng)12分頻以后的脈沖信號(hào))——定時(shí)器。第五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D7-2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)框圖第六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日當(dāng)T/C處于定時(shí)方式時(shí),加1計(jì)數(shù)器在每個(gè)機(jī)器周期加1,因此,也可以把它看作在累計(jì)機(jī)器周期。由于一個(gè)機(jī)器周期包含12個(gè)振蕩周期,所以它的最高計(jì)數(shù)速率是振蕩頻率的1/12。用作計(jì)數(shù)器時(shí),由于對(duì)外部信號(hào)的識(shí)別需要一個(gè)機(jī)器周期,而計(jì)數(shù)器判斷的是一次下降沿,所以計(jì)數(shù)最高速率是振蕩頻率的1/24。

第七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

16位的加1計(jì)數(shù)器由兩個(gè)8位的特殊功能寄存器THx或TLx組成(X=0、1)。它們可被程控為不同的組合狀態(tài)。(13位、16位、兩個(gè)分開(kāi)的8位等),從而形成T/C不同的4種工作方式,這只要用指令改變TMOD(工作方式控制寄存器)的相應(yīng)位即可。第八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日第九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

7.1.2定時(shí)/計(jì)數(shù)器的方式和控制寄存器

MCS-51單片機(jī)有2個(gè)特殊功能寄存器TMOD和TCON:TMOD用于設(shè)置T/C的工作方式;TCON用于控制定時(shí)器T0、T1的啟動(dòng)與停止,并包含了定時(shí)器的狀態(tài)。

1.定時(shí)器工作方式寄存器TMOD

定時(shí)器工作方式寄存器TMOD用于選擇定時(shí)器的工作方式,它的高4位控制定時(shí)器T1,低4位控制定時(shí)器T0。TMOD中各位的定義如下:GATEC/TM1M0GATEC/TM1M0T1T0TMOD89H第十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日其中::T/C功能選擇位,當(dāng)=1時(shí)為計(jì)數(shù)方式;當(dāng)=0時(shí)為定時(shí)方式。

M1M0:T/C工作方式定義位,其具體定義方式如表所示。第十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

GATE:門(mén)控制位,用于控制定時(shí)器的啟動(dòng)是否受外部中斷源信號(hào)的影響。GATE=0時(shí),與外部中斷無(wú)關(guān),由TCON寄存器中的TRx位控制啟動(dòng)。GATE=1時(shí),由控制位TRx和引腳共同控制啟動(dòng),只有在沒(méi)有外部中斷請(qǐng)求信號(hào)的情況下(即外部中斷引腳=1時(shí)),才允許定時(shí)器啟動(dòng)。利用這一功能可以方便地測(cè)量外部脈沖高電平的脈寬。第十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

2.定時(shí)器控制寄存器TCONTCON控制寄存器各位的定義如下:TF1TR1TF0TR0IE1IT1IE0IT0D7D6D5D4D3D2D1D0TCON88H第十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日其中:

TF0(TF1):為T(mén)0(T1)定時(shí)器溢出中斷標(biāo)志位。當(dāng)T0(T1)計(jì)數(shù)溢出時(shí),由硬件置位,并在允許中斷的情況下,發(fā)出中斷請(qǐng)求信號(hào)。當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)將該位清0。

TR0(TR1):為T(mén)0(T1)運(yùn)行控制位。當(dāng)TR0(TR1)=1時(shí)啟動(dòng)T0(T1);TR0(TR1)=0時(shí)關(guān)閉T0(T1)。該位由軟件進(jìn)行設(shè)置。第十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

7.1.3定時(shí)/計(jì)數(shù)器的工作方式

MCS-51單片機(jī)的T/C有4種工作方式,分別由TMOD寄存器中的M1、M0兩位的二進(jìn)制編碼所決定。

1.方式0

當(dāng)M1M0=00時(shí),T/C設(shè)定為工作方式0,構(gòu)成13位的T/C。其邏輯結(jié)構(gòu)如圖所示。在此工作方式下,T/C構(gòu)成一個(gè)13位的計(jì)數(shù)器,由THx的8位和TLx的低5位組成,TLx的高3位未用,滿計(jì)數(shù)值為213。第十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D7―3T/C方式0的邏輯結(jié)構(gòu)圖第十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

2.方式1

當(dāng)M1M0=01時(shí),T/C設(shè)定為工作方式1,構(gòu)成16位定時(shí)/計(jì)數(shù)器,其中THx作為高8位,TLx作為低8位,滿計(jì)數(shù)值為216,其余同方式0類(lèi)似。其邏輯結(jié)構(gòu)如圖所示。第十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D7―4T/C方式1的邏輯結(jié)構(gòu)圖第十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

3.方式2

當(dāng)M1M0=10時(shí),T/C工作在方式2,構(gòu)成1個(gè)自動(dòng)重裝載的T/C,滿計(jì)數(shù)值為28。在方式2中THx和TLx被當(dāng)作兩個(gè)8位計(jì)數(shù)器,計(jì)數(shù)過(guò)程中,THx寄存8位初值并保持不變,由TLx進(jìn)行8位計(jì)數(shù)。計(jì)數(shù)溢出時(shí),除產(chǎn)生溢出中斷請(qǐng)求外,還自動(dòng)將THx中的初值重新裝到TLx中去,即重裝載。第十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D7―5T/C方式2的邏輯結(jié)構(gòu)圖第二十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

4.方式3

方式3只適用于定時(shí)器T0。當(dāng)定時(shí)器T1處于方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)。當(dāng)T0工作在方式3時(shí),TH0和TL0被拆成2個(gè)獨(dú)立的8位計(jì)數(shù)器。這時(shí),TL0既可作為定時(shí)器使用,也可作為計(jì)數(shù)器使用,它占用了定時(shí)器T0所使用的控制位(C/、GATE、TR0、TF0),其功能和操作與方式0或方式1完全相同;而TH0只能作定時(shí)器用,并且占據(jù)了定時(shí)器T1的兩個(gè)控制信號(hào)TR1和TF1。在這種情況下,定時(shí)器T1雖仍可用于方式0、1、2,但不能使用中斷方式。第二十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D7―6T/C方式3的邏輯結(jié)構(gòu)圖第二十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

7.1.4定時(shí)/計(jì)數(shù)器應(yīng)用舉例由于MCS-51單片機(jī)的定時(shí)/計(jì)數(shù)器是可編程的,因此在使用之前需要進(jìn)行初始化。在編程時(shí)主要注意兩點(diǎn):第一要能正確寫(xiě)入控制字;第二能進(jìn)行計(jì)數(shù)初值的計(jì)算。一般情況下,包括以下幾個(gè)步驟:

(1)確定工作方式,即對(duì)TMOD寄存器進(jìn)行賦值。

(2)計(jì)算計(jì)數(shù)初值,并寫(xiě)入寄存器TH0、TL0或TH1、TL1中。

(3)根據(jù)需要,置位ETx允許T/C中斷。

(4)置位EA使CPU開(kāi)中斷(需要時(shí))。

(5)置位TRx啟動(dòng)計(jì)數(shù)。第二十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日計(jì)數(shù)初值的計(jì)算方法如下:由于定時(shí)/計(jì)數(shù)器是以加1的方式計(jì)數(shù),因此同常用的減1計(jì)數(shù)器的算法不同。在定時(shí)方式下:假定時(shí)間常數(shù)為T(mén)c,定時(shí)時(shí)間為T(mén),而T=Tc·Tp,則時(shí)間常數(shù)為

(7―1)其中Tp為機(jī)器周期,即12/晶振頻率。應(yīng)裝入定時(shí)/計(jì)數(shù)器的初值為

X=2n-Tc(n為計(jì)數(shù)器的位數(shù))(7―2)第二十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例1:若晶振頻率為6MHz,試計(jì)算MCS-51單片機(jī)定時(shí)/計(jì)數(shù)器的最小定時(shí)時(shí)間和最大定時(shí)時(shí)間。解:先確定機(jī)器周期:①計(jì)算最小定時(shí)時(shí)間:對(duì)于定時(shí)器的幾種工作方式來(lái)說(shuō),最小定時(shí)時(shí)間都是一樣的,即Tmin=Tc·Tp=1×2μs=2μs②計(jì)算最大定時(shí)時(shí)間:當(dāng)T/C工作在方式1下的定時(shí)時(shí)間最長(zhǎng),則最大定時(shí)時(shí)間為

Tmax=Tc·Tp=216×2μs=131072μs=131ms晶振頻率第二十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例2:若單片機(jī)的晶振頻率為6MHz,要求定時(shí)/計(jì)數(shù)器T0產(chǎn)生100ms的定時(shí),試確定計(jì)數(shù)初值以及TMOD寄存器的內(nèi)容。解:當(dāng)晶振頻率為6MHz時(shí),產(chǎn)生100ms的定時(shí)接近最大值(131ms),故只能采用方式1(16位定時(shí)器)。第二十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日晶振頻率時(shí)間常數(shù)為:計(jì)數(shù)初值為:第二十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日設(shè)置TMOD方式字:對(duì)于T0來(lái)說(shuō):M1M0=01、、GATE=0。由于T1不用,可任意設(shè)置,現(xiàn)取為全0,因此,TMOD寄存器的內(nèi)容為:

TMOD=00000001B=01H

試解釋對(duì)于T0的寄存器設(shè)置。第二十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例3:利用定時(shí)/計(jì)數(shù)器T0通過(guò)P1.0引腳輸出周期為2ms的方波,設(shè)晶振頻率為12MHz。試確定計(jì)數(shù)初值、TMOD內(nèi)容及編制相應(yīng)程序。解:若要產(chǎn)生周期為2ms的方波,只要每1ms將信號(hào)的幅值由0變到1或由1變到0即可,可采用取反指令CPL來(lái)實(shí)現(xiàn)。為了提高CPU的效率,可采用定時(shí)中斷的方式,每1ms產(chǎn)生一次中斷,在中斷服務(wù)程序中將輸出信號(hào)取反即可。定時(shí)器T0的中斷入口地址為000BH。①計(jì)算計(jì)數(shù)初值:對(duì)于定時(shí)1ms來(lái)說(shuō),用定時(shí)器方式0(13位定時(shí)器)就可實(shí)現(xiàn)。第二十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日機(jī)器周期為:Tp=1us時(shí)間常數(shù)為:計(jì)數(shù)初值為:則其高8位為E0H,低5位為18H,故TH0=E0H,TL0=18H。第三十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日②確定TMOD方式字:對(duì)于定時(shí)器T0來(lái)說(shuō),M1M0=00H、=0、GATE=0。定時(shí)器T1不用,取為全0。于是

TMOD=00000000B=00H③程序設(shè)計(jì):

ORG000BH;T0中斷服務(wù)程序入口

LJMPINT;轉(zhuǎn)至INT處

ORG2000H;主程序

MOVTMOD,#00H;置T0為定時(shí)方式0MOVTH0,#0E0H

;設(shè)置計(jì)數(shù)初值第三十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

MOVTL0,#18H

SETBEA

;CPU開(kāi)中斷

SETBET0

;允許T0中斷

SETBTR0

;啟動(dòng)T0HALT:SJMPHALT

;暫停,等待中斷INT:CPLP1.0

;輸出方波

MOVTH0,#0E0H;重新裝入計(jì)數(shù)初值

MOVTL0,#18H

RETI

;中斷返回第三十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例7-5設(shè)一只發(fā)光二極管LED和8051的P1.0腳相連。當(dāng)P1.0腳是高電平時(shí),LED發(fā)亮;當(dāng)P1.0腳是低電平時(shí),LED熄滅。編制程序用定時(shí)器來(lái)實(shí)現(xiàn)發(fā)光二極管LED的閃爍功能,設(shè)置LED每1s閃爍一次。已知單片機(jī)系統(tǒng)主頻為12MHz。----應(yīng)用實(shí)例第三十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日設(shè)計(jì)思想:定時(shí)/計(jì)數(shù)器的最長(zhǎng)定時(shí)是65.536ms,無(wú)法實(shí)現(xiàn)1s的定時(shí)。可以采用軟件計(jì)數(shù)器來(lái)進(jìn)行設(shè)計(jì)。定義一個(gè)軟件計(jì)數(shù)器單元30H,先用定時(shí)/計(jì)數(shù)器T0做一個(gè)50ms的定時(shí)器,定時(shí)時(shí)間到后將軟件計(jì)數(shù)器中的值加1,如果軟件計(jì)數(shù)器計(jì)到了20(1s),取反P1.0,并清除軟件計(jì)數(shù)器中的值,否則直接返回。則完成了20次定時(shí)中斷才取反一次P1.0,實(shí)現(xiàn)定時(shí)時(shí)間20×50=1000ms=1s的定時(shí)。定時(shí)/計(jì)數(shù)器T0采用工作方式1(16位定時(shí)器),其初值為:21650ms/1s=6553650000=15536=3CB0H----應(yīng)用實(shí)例第三十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日程序如下:

ORG 0000H AJMP START ;轉(zhuǎn)入主程序

ORG 000BH ;定時(shí)/計(jì)數(shù)器T0的中斷服務(wù)程序入口地址

AJMP TIME0 ;跳轉(zhuǎn)到真正的定時(shí)器中斷服務(wù)程序處

ORG 0030HSTART: MOV SP,#60H ;設(shè)置堆棧指針

MOV P1,#00H ;關(guān)發(fā)光二極管LED(使其滅)

MOV 30H,#00H ;軟件計(jì)數(shù)器預(yù)清0 MOV TMOD,#01H ;定時(shí)/計(jì)數(shù)器T0工作于方式1 MOV TH0,#3CH ;設(shè)置定時(shí)/計(jì)數(shù)器的初值

MOV TL0,#0B0H SETB EA ;開(kāi)總中斷允許

SETB ET0 ;開(kāi)定時(shí)/計(jì)數(shù)器T0中斷允許

SETB TR0 ;啟動(dòng)定時(shí)/計(jì)數(shù)器T0LOOP: JMP LOOP ;循環(huán)等待----應(yīng)用實(shí)例第三十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日TIME0:INC 30H ;中斷程序

MOV A,30H CJNE A,#14H,RET0 ;與20比較,不等轉(zhuǎn)RET0 MOV 30H,#00H CPL P1.0RET0:MOV TH0,#3CH ;重設(shè)定時(shí)初值,啟動(dòng)

MOV TL0,#0B0H RETI----應(yīng)用實(shí)例第三十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日盡管MCS-51為用戶(hù)只提供了兩個(gè)外部中斷源,但用戶(hù)可以根據(jù)實(shí)際需求,進(jìn)行多于兩個(gè)外部中斷請(qǐng)求的擴(kuò)展,其中有很多擴(kuò)展方法。在此重點(diǎn)介紹利用定時(shí)器中斷作為外部中斷的擴(kuò)展。MCS-51有兩個(gè)定時(shí)/計(jì)數(shù)器T0、T1,若選擇它們以計(jì)數(shù)器方式工作,當(dāng)引腳T0或T1上發(fā)生負(fù)跳變時(shí),T0或T1計(jì)數(shù)器則加1。利用這個(gè)特性,借用引腳T0或T1作為外部中斷請(qǐng)求輸入線,若設(shè)定計(jì)數(shù)初值為滿量程,計(jì)數(shù)器加1,就會(huì)產(chǎn)生溢出中斷請(qǐng)求,TF0或TF1變成了外部中斷請(qǐng)求標(biāo)志位,T0或T1的中斷入口地址被擴(kuò)展成了外部中斷源的入口地址。值得注意的是,當(dāng)使用定時(shí)器作為外部中斷時(shí),定時(shí)器以前的功能將失效,除非用軟件對(duì)它進(jìn)行復(fù)用。3.采用定時(shí)/計(jì)數(shù)器擴(kuò)展外部中斷----擴(kuò)展外部中斷第三十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

將定時(shí)器T0引腳作為外部中斷源使用的具體做法為,設(shè)定相應(yīng)定時(shí)器工作方式為方式2,計(jì)數(shù)器TH0、TL0初值為0FFH,允許計(jì)數(shù)器T0中斷,則T0的初始始化程序如下:

MOVTMOD,#06H ;將計(jì)數(shù)器T0設(shè)定為

;方式2外部計(jì)數(shù)

MOVTL0,#0FFH ;設(shè)置計(jì)數(shù)器初值

MOVTH0,#0FFH ;設(shè)置重裝計(jì)數(shù)器初值

SETBET0 ;允許T0中斷

SETBEA ;CPU開(kāi)中斷

SETBTR0 ;啟動(dòng)T0----擴(kuò)展外部中斷第三十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日#include<reg51.h>voidmain(void){ TMOD=0x66; /*兩個(gè)定時(shí)/計(jì)數(shù)器都設(shè)為方式2

外部計(jì)數(shù)模式*/ TH1=0xFF; /*設(shè)定重裝值,TL1不用設(shè)置*/ TH0=0xFF; /*設(shè)定重裝值,TL0不用設(shè)置*/ TCON=0x50; /*置位TR1、TR0,開(kāi)始計(jì)數(shù)*/ IE=0x9F; /*中斷使能*/}----擴(kuò)展外部中斷第三十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

/*定時(shí)器0中斷服務(wù)程序*/ voidtimer0_int(void)interrupt1 { TF0=0; /*計(jì)數(shù)溢出標(biāo)志位清0*/ …… } /*定時(shí)器1中斷服務(wù)程序*/ voidtimer1_int(void)interrupt3 { TF1=0; /*計(jì)數(shù)溢出標(biāo)志位清0*/ …… }----擴(kuò)展外部中斷第四十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日定時(shí)器計(jì)數(shù)器擴(kuò)展外部中斷實(shí)際項(xiàng)目例子/*強(qiáng)力單片機(jī)技術(shù)項(xiàng)目交易網(wǎng)

作者:王春林*/

#include<reg51.h>

#include<intrins.h>

#include<stdio.h>

#include<string.h>#defineUN

unsignedcharvoiddel05s();sbit

lsledcs=P3^7;UNdatad0=0;

UNdatad1=0;

UNdatad2=0;

UNdatad3=0;

voiddelay();sbit

bm7=bm^7;sfr16DPTR=0x82;sbit

ACC0=ACC^0;

sbit

ACC1=ACC^1;

sbit

ACC2=ACC^2;

sbit

ACC3=ACC^3;

sbit

ACC4=ACC^4;

sbit

ACC5=ACC^5;

sbit

ACC6=ACC^6;

sbit

ACC7=ACC^7;unsignedcharbdatabm;

sbit

bm0=bm^0;

sbit

bm1=bm^1;

sbit

bm2=bm^2;

sbit

bm3=bm^3;

sbit

bm4=bm^4;

sbit

bm5=bm^5;

sbit

bm6=bm^6;

第四十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日UNcodeledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0-9

0x88,0x83,0xa7,0xa1,0x86,0x8e};

voidmain(){

/*設(shè)為模式1,計(jì)數(shù)*/

TMOD=0x05;/*初值設(shè)定,當(dāng)設(shè)為T(mén)H0=0xff;TL0=0xff;每按C/T0(K4)一次計(jì)數(shù)加一,此方法可把計(jì)數(shù)器作為

外部中斷使用;當(dāng)設(shè)為T(mén)H0=0xff;TL0=0xf0;每按C/T0(K4)16次計(jì)數(shù)加一,(不考慮按鍵抖動(dòng))

*/

TH0=0xff;TL0=0xff;

TR0=1;

ET0=1;

EA=1;

while(1)

{

/*顯示計(jì)數(shù)值*/

P0=0xff;

P0=ledcode[d3];

P1=0xfe;

delay();

P0=ledcode[d2];

P1=0xfd;

delay();

P0=ledcode[d1];

P1=0xfb;

delay();

P0=ledcode[d0];

P1=0xf7;

delay();第四十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日P1=0xff;

}

}

voiddelay()

{unsignedintkk=0xff;

do{_nop_();kk--;}

while(kk!=0);

}

voiddel05s()

{unsignedintkk=0xefff;

do{_nop_();kk--;}

while(kk!=0);

}/*定時(shí)器0中斷*/

voidtime0()interrupt1using1

{

d0++;

if(d0>9){d0=0;d1++;}

if(d1>9){d1=0;d2++;}

if(d2>9){d2=0;d3++;}

if(d0==9&&d1==9&&d2==9&&d3==9){d0=d1=d2=d3=0;}

TH0=0xff;TL0=0xff;

}第四十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日習(xí)題7-2、7-5、7-7、7-9、7-11第四十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日7.2串行通信接口

7.2.1串行通信的基本知識(shí)

1.并行通信與串行通信在實(shí)際應(yīng)用中,不但計(jì)算機(jī)與外部設(shè)備之間常常要進(jìn)行信息交換,而且計(jì)算機(jī)之間也需要交換信息,所有這些信息的交換均稱(chēng)為“通信”。通信的基本方式分為并行通信和串行通信兩種。第四十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日并行通信是構(gòu)成1組數(shù)據(jù)的各位同時(shí)進(jìn)行傳送,例如8位數(shù)據(jù)或16位數(shù)據(jù)并行傳送。其特點(diǎn)是傳輸速度快,但當(dāng)距離較遠(yuǎn)、位數(shù)又多時(shí)導(dǎo)致了通信線路復(fù)雜且成本高。串行通信是數(shù)據(jù)一位接一位地順序傳送。其特點(diǎn)是通信線路簡(jiǎn)單,只要一對(duì)傳輸線就可以實(shí)現(xiàn)通信(如電話線),從而大大地降低了成本,特別適用于遠(yuǎn)距離通信。缺點(diǎn)是傳送速度慢。第四十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D通信的兩種基本方式(a)并行通信;(b)串行通信第四十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日串行通信可分為異步傳送和同步傳送兩種基本方式。

1)異步傳送方式異步傳送的特點(diǎn)是數(shù)據(jù)在線路上的傳送不連續(xù)。在傳送時(shí),數(shù)據(jù)是以一個(gè)字符為單位進(jìn)行傳送的。它用一個(gè)起始位表示字符的開(kāi)始,用停止位表示字符的結(jié)束。異步傳送的字符格式如圖所示。第四十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日一個(gè)字符由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位4個(gè)部分組成。起始位為0占1位;其后接著的就是數(shù)據(jù)位,它可以是5位、6位、7位或8位,傳送時(shí)低位在先、高位在后;再后面的1位為奇偶校驗(yàn)位,可要也可以不要;最后是停止位,它用信號(hào)1來(lái)表示字符的結(jié)束,可以是1位、1位半或2位。第四十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D串行異步傳送的字符格式(a)字符格式;(b)有空閑位的字符格式第五十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例如,采用串行異步通信方式傳送ASCII碼字符‘5’,規(guī)定為7位數(shù)據(jù)位,1位偶校驗(yàn)位,1位停止位,無(wú)空閑位。由于‘5’的ASCII碼為35H,其對(duì)應(yīng)7位數(shù)據(jù)位為0110101,如按低位在前、高位在后順序排列應(yīng)為1010110。前面加1位起始位,后面配上偶校驗(yàn)位1位0,最后面加1位停止位1,因此傳送的字符格式為0101011001,其對(duì)應(yīng)的波形如圖所示。第五十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D傳送ASCII碼字符‘5’的波形圖第五十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日在串行異步傳送中,CPU與外設(shè)之間事先必須約定:①字符格式。雙方要事先約定字符的編碼形式、奇偶校驗(yàn)形式及起始位和停止位的規(guī)定。例如用ASCII碼通信,有效數(shù)據(jù)為7位,加1個(gè)奇偶校驗(yàn)位、1個(gè)起始位和1個(gè)停止位共10位。當(dāng)然停止位也可大于1位。②波特率(Baudrate)。波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進(jìn)制位數(shù),單位為位/秒。它與字符的傳送速率(字符/秒)之間存在如下關(guān)系:波特率=位/字符×字符/秒=位/秒要求發(fā)送端與接收端的波特率必須一致。第五十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例如,假設(shè)字符傳送的速率為120字符/秒,而每1個(gè)字符為10位,那么傳送的波特率為

10位/字符×120字符/秒=1200位/秒=1200波特每1位二進(jìn)制位的傳送時(shí)間Td就是波特率的倒數(shù),例如上例中

Td=1/1200=0.833ms第五十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

2)同步傳送在異步傳送中,每1個(gè)字符都要用起始位和停止位作為字符開(kāi)始和結(jié)束的標(biāo)志,占用了一定的時(shí)間。為了提高傳送速度,有時(shí)就去掉這些標(biāo)志,而采用同步傳送,即1次傳送1組數(shù)據(jù)。在這1組數(shù)據(jù)的開(kāi)始處要用同步字符SYN來(lái)加以指示,如圖所示。計(jì)算機(jī)網(wǎng)絡(luò)采用的就是這樣的傳送方式。第五十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D同步傳送第五十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日BSC協(xié)議的數(shù)據(jù)塊有如下四種格式

(1)不帶報(bào)頭的單塊報(bào)文或分塊傳輸中的最后一塊報(bào)文:

┈┈

SYN

SYN

STX

報(bào)文

ETX

BCC

(2)帶報(bào)頭的單塊報(bào)文:

┈┈

SYN

SYN

SOH

報(bào)頭

STX

報(bào)文

ETX

BCC

(3)分塊傳輸中的第一塊報(bào)文:

┈┈

SYN

SYN

SOH

報(bào)頭

STX

報(bào)文

ETB

BCC

(4)分塊傳輸中的中間報(bào)文:

┈┈

SYN

SYN

STX

報(bào)文

ETB

BCC第五十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

2.數(shù)據(jù)傳送方向串行通信的數(shù)據(jù)傳送方向有3種形式。

(1)單工方式。如圖(a)所示,A端為發(fā)送站,B端為接收站,數(shù)據(jù)僅能從A站發(fā)至B站。

(2)半雙工方式。如圖(b)所示,數(shù)據(jù)既可從A站發(fā)送到B站,也可以由B站發(fā)送到A站。不過(guò)在同一時(shí)間只能作1個(gè)方向的傳送。

(3)全雙工方式。如圖(c)所示,每個(gè)站(A、B)既可同時(shí)發(fā)送,也可同時(shí)接收。第五十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D串行通信的三種方式(a)單工方式;(b)半雙工方式;(c)全雙工方式第五十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日3、串行通信的校驗(yàn)奇偶校驗(yàn)和校驗(yàn)CRC校驗(yàn)如16位CRC校驗(yàn)碼(r=16),可以校驗(yàn)32kbit的數(shù)據(jù),可以檢測(cè)突發(fā)長(zhǎng)度不大于16的突發(fā)錯(cuò)以及99.998%的突發(fā)長(zhǎng)度大于或等于17的突發(fā)錯(cuò)。第六十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日仿真結(jié)果校驗(yàn)位數(shù)(r)總的幀位長(zhǎng)(n)檢出錯(cuò)誤個(gè)數(shù)(e1)總錯(cuò)誤個(gè)數(shù)(e)檢錯(cuò)率410043649788%8100497497100%16100497497100%第六十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

7.2.2MCS-51單片機(jī)的串行接口

MCS-51單片機(jī)內(nèi)部有1個(gè)功能很強(qiáng)的全雙工串行口,可同時(shí)發(fā)送和接收數(shù)據(jù)。它有4種工作方式,可供不同場(chǎng)合使用。波特率由軟件設(shè)置,通過(guò)片內(nèi)的定時(shí)/計(jì)數(shù)器產(chǎn)生。接收、發(fā)送均可工作在查詢(xún)方式或中斷方式,使用十分靈活。MCS-51的串行口除了用于數(shù)據(jù)通信外,還可以非常方便地構(gòu)成1個(gè)或多個(gè)并行輸入/輸出口,或作串并轉(zhuǎn)換,用來(lái)驅(qū)動(dòng)鍵盤(pán)與顯示器。第六十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日?qǐng)D7―9MCS-51串行口的原理結(jié)構(gòu)圖MCS-51單片機(jī)串行口構(gòu)成:發(fā)送緩沖寄存器(SBUF)發(fā)送控制器發(fā)送控制門(mén)接收緩沖寄存器(SBUF)接收控制寄存器移位寄存器中斷第六十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

1.串行接口的特殊功能寄存器與串行通信有關(guān)的控制寄存器共有4個(gè):SBUF、SCON、PCON和IE。

1)串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個(gè)在物理上獨(dú)立的接收、發(fā)送緩沖器,可同時(shí)發(fā)送、接收數(shù)據(jù)。兩個(gè)緩沖器只用一個(gè)字節(jié)地址99H,可通過(guò)指令對(duì)SBUF的讀寫(xiě)來(lái)區(qū)別是對(duì)接收緩沖器的操作還是對(duì)發(fā)送緩沖器的操作。CPU寫(xiě)SBUF,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器。串行口對(duì)外也有兩條獨(dú)立的收發(fā)信號(hào)線RXD(P3.0)和TXD(P3.1),因此可以同時(shí)發(fā)送、接收數(shù)據(jù),實(shí)現(xiàn)全雙工傳送。第六十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

2)串行口控制寄存器SCONSCON寄存器用來(lái)控制串行口的工作方式和狀態(tài),它可以是位尋址。在復(fù)位時(shí)所有位被清0,字地址為98H。SCON的格式為SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D0

第六十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

SM0、SM1:串行口工作方式選擇位。

SM2:多機(jī)通信控制位。主要用于工作方式2和方式3。在方式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)求。在方式0時(shí),SM2必須為0。第六十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日多機(jī)通信過(guò)程所有從機(jī)的SM2=1,處于只接收地址幀狀態(tài)所有同學(xué)坐著聽(tīng)講主機(jī)發(fā)地址信息,以第9位TB8=1表示發(fā)送的是地址老師喊同學(xué)名字從機(jī)接收到地址幀后與本機(jī)地址比較所有同學(xué)聽(tīng)到名字與自己的名字比較被尋址從機(jī)SM2=0,其余從機(jī)SM2=1不變名字相符的同學(xué)站起來(lái)主機(jī)發(fā)數(shù)據(jù)信息,對(duì)已被尋址的從機(jī)因SM2=0,可以接收主機(jī)發(fā)來(lái)的信息。其余從機(jī)因SM2=1不理睬主機(jī)。老師與站起的同學(xué)進(jìn)行提問(wèn)回答課堂交流被尋址的從機(jī)SM2置1.主機(jī)可另發(fā)地址幀與其它從機(jī)通信時(shí)。回答問(wèn)題的同學(xué)坐下第六十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

REN:允許串行接收控制位。若REN=0,則禁止接收;若REN=1,則允許接收。該位由軟件置位或復(fù)位。

TB8:發(fā)送數(shù)據(jù)位8。在方式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ù)位。

RB8:接收數(shù)據(jù)位8。

TI:發(fā)送中斷標(biāo)志位。軟件清零

RI:接收中斷標(biāo)志位。軟件清零第六十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

3)電源控制寄存器PCONPCON主要是為CHMOS型單片機(jī)的電源控制而設(shè)置的專(zhuān)用寄存器,單元地址為87H,不能位尋址。在HMOS單片機(jī)中,該寄存器除最高位外,其它位都是虛設(shè)的。最高位SMOD為串行口波特率選擇位,當(dāng)SMOD=1時(shí),方式1、2、3的波特率加倍;當(dāng)SMOD=0時(shí),正常波特率。SMODGF1GF0PDIDLD7D6D5D4D3D2D1D0

PCON87H4)中斷允許控制寄存器(IE)IE的地址是A8H,其內(nèi)容第6章已介紹。其中串行口允許中斷的控制位為ES,當(dāng)ES=1,允許串行口中斷;當(dāng)ES=0,禁止串行中斷。第六十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日2.串行接口的工作方式串行口有4種工作方式,它是由SCON中的SM0、SM1來(lái)定義的,如表所示。第七十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

1)方式0

串行接口的工作方式0為同步移位寄存器方式,其波特率是固定的,為fosc(振蕩頻率)的1/12。方式0發(fā)送數(shù)據(jù)從RXD引腳串行輸出,TXD引腳輸出同步脈沖。當(dāng)1個(gè)數(shù)據(jù)寫(xiě)入串行口發(fā)送緩沖器時(shí),串行口將8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳輸出,從低位到高位。發(fā)送完后置中斷標(biāo)志TI為1,呈中斷請(qǐng)求狀態(tài),在再次發(fā)送數(shù)據(jù)之前,必須用軟件將TI清0。第七十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日方式0接收在滿足REN=1和RI=0的條件下,串行口處于方式0輸入。此時(shí),RXD為數(shù)據(jù)輸入端,TXD為同步信號(hào)輸出端,接收器也以fosc/12的波特率采樣RXD引腳輸入的數(shù)據(jù)信息。當(dāng)接收器接收完8位數(shù)據(jù)后,置中斷標(biāo)志RI=1為請(qǐng)求中斷,在再次接收之前,必須用軟件將RI清0。第七十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

在方式0下,串行口作為同步移位寄存器使用。這時(shí)用RXD(P3.0)引腳作為數(shù)據(jù)移位的入口和出口,而由TXD(P3.1)引腳提供移位脈沖。移位數(shù)據(jù)的發(fā)送和接收以8位為一幀,不設(shè)起始位和停止位,低位在前高位在后,其幀格式如圖7-10所示。第七十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日74LS164為帶清0端的串行輸入/并行輸出移位寄存器(8位),而74LS165為并行輸入/串行輸出移位寄存器(8位)。Q0—Q7并行輸出端。A,B串行輸入端。MR清除端,為0時(shí),輸出清零。CP時(shí)鐘輸入端。每一個(gè)時(shí)鐘信號(hào)的上升沿加到CP端時(shí),移位寄存器移一位,8個(gè)時(shí)鐘脈沖過(guò)后,8位二進(jìn)制數(shù)全部移入74LS164中。第七十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日第七十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日第七十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日第七十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日HC165第七十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日第七十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

使用方式0實(shí)現(xiàn)數(shù)據(jù)的移位輸入/輸出時(shí),實(shí)際上是把串行口變成并行口使用。串行口作為并行輸出口使用時(shí),要有“串入并出”的移位寄存器配合(例如CD4049或74HC164),其電路連接如圖7-11所示。第八十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

如果把實(shí)現(xiàn)并入串出功能的移位寄存器(例如CD4014或74HC165)與串行口配合使用,如圖7-12所示,就可以把串行口變?yōu)椴⑿休斎肟谑褂谩5诎耸豁?yè),共一百二十四頁(yè),編輯于2023年,星期日例7-6

使用74HC164的并行輸出引腳接8支發(fā)光二極管,利用它的串入并出功能,把發(fā)光二極管從左向右輪流點(diǎn)亮,并反復(fù)循環(huán)。發(fā)光二極管為共陰極型,電路連接如圖7-15所示。串口方式0應(yīng)用分析:當(dāng)串行口把8位狀態(tài)碼串行移位輸出后,TI置1。把TI作為狀態(tài)查詢(xún)標(biāo)志,使用查詢(xún)方法。第八十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日 ORG 1000HSTART:MOV SCON,#00H ;置串行口工作方式0 MOV A,#80H ;最高位燈先亮 CLR P1.0 ;關(guān)閉并行輸出OUT0:MOV SBUF,A ;開(kāi)始串行輸出OUT1:JNB TI,OUT1 ;輸出完否?未完,等待 CLR TI ;完了,清零TI標(biāo)志位, ;以備下次發(fā)送 SETB P1.0 ;打開(kāi)并行口輸出 ACALLDELAY ;延時(shí)一段時(shí)間 (1)匯編語(yǔ)言編程第八十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

RR A ;循環(huán)右移

CLR P1.0 ;關(guān)閉并行輸出

SJMP OUT0 ;循環(huán);延時(shí)子程序DELAY:MOV R7,#250D1: MOV R6,#250D2: DJNZ R6,D2 DJNZ R7,D1 RET END第八十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日(2)C51編程

#include<reg51.h> #include<intrins.h> #defineout_offP1^0=0 #defineout_onP1^0=1 externvoiddelay(void); /*外部延時(shí)函數(shù)*/ voidmain() { unsignedchari; SCON=0x00; /*串行口方式0工作*/ ES=0; /*禁止串行中斷*/ 分析:當(dāng)串行口把8位狀態(tài)碼串行移位輸出后,TI置1。把TI作為狀態(tài)查詢(xún)標(biāo)志,使用查詢(xún)方法。---串行移位輸出第八十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日f(shuō)or(;;) {for(i=0;i<8;i++) {out_off; /*關(guān)閉并行輸出*/ SBUF=_cror_(0x80,i);/*串行輸出*/ while(!TI){} /*狀態(tài)查詢(xún)*/ out_on; /*開(kāi)啟并行輸出*/ TI=0; /*清發(fā)送中斷標(biāo)志*/ delay(); /*狀態(tài)維持*/ } } }---串行移位輸出第八十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

2)方式1

在方式1時(shí),串行口被設(shè)置為波特率可變的8位異步通信接口。發(fā)送:1幀信息為10位,其中1位起始位、8位數(shù)據(jù)位(先低位后高位)和一個(gè)停止位“1”。CPU執(zhí)行1條數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUF的指令,就啟動(dòng)發(fā)送器發(fā)送。當(dāng)發(fā)送完數(shù)據(jù),就置中斷標(biāo)志TI為1。方式1所傳送的波特率取決于定時(shí)器T1的溢出率和特殊功能寄存器PCON中SMOD的值,即方式1的波特率=(2SMOD/32)×定時(shí)器T1的溢出率。接收:當(dāng)串行口置為方式1,且REN=1時(shí),串行口處于方式1輸入狀態(tài)。它以所選波特率的16倍的速率采樣RXD引腳狀態(tài)。起始D0D1D2D3D4D5D6D7停止第八十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日3)方式2

串行口工作于方式2時(shí),被定義為9位異步通信接口。方式2發(fā)送發(fā)送數(shù)據(jù)由TXD端輸出,發(fā)送1幀信息為11位,其中1位起始位(0)、8位數(shù)據(jù)位(先低位后高位)、1位可控位為1或0的第9位數(shù)據(jù)、1位停止位。附加的第9位數(shù)據(jù)為SCON中的TB8,它由軟件置位或清0,可作為多機(jī)通信中地址/數(shù)據(jù)信息的標(biāo)志位,也可作為數(shù)據(jù)的奇偶校驗(yàn)位。起始D0D1D2D3D4D5D6D7D8停止第八十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日PIPL:PUSHPSW;保護(hù)現(xiàn)場(chǎng)

PUSHACLRTI;清0發(fā)送中斷標(biāo)志

MOVA,@R0;取數(shù)據(jù)

MOVC,P;奇偶位送CMOVTB8,C;奇偶位送TB8MOVSBUF,A;數(shù)據(jù)寫(xiě)入發(fā)送緩沖器,啟動(dòng)發(fā)送

INCR0;數(shù)據(jù)指針加1POPA;恢復(fù)現(xiàn)場(chǎng)

POPPSWRETI;中斷返回第八十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日方式2接收當(dāng)串行口置為方式2,且REN=1時(shí),串行口以方式2接收數(shù)據(jù)。方式2的接收與方式1基本相似。數(shù)據(jù)由RXD端輸入,接收11位信息,其中1位起始位(0)、8位數(shù)據(jù)位、1位附加的第9位數(shù)據(jù)、1位停止位(1)。方式2的波特率=(2SMOD/64)×fosc

若附加的第9位數(shù)據(jù)為奇偶校驗(yàn)位,在接收中斷服務(wù)程序中應(yīng)作檢驗(yàn)處理,參考程序如下:第九十頁(yè),共一百二十四頁(yè),編輯于2023年,星期日PIPL:PUSHPSW;保護(hù)現(xiàn)場(chǎng)

PUSHACLRRI;清0接收中斷標(biāo)志

MOVA,SUBF;接收數(shù)據(jù)

MOVC,P

;取奇偶校驗(yàn)位

JNCL1

;偶校驗(yàn)時(shí)轉(zhuǎn)L1JNBRB8,ERR;奇校驗(yàn)時(shí)RB8為0轉(zhuǎn)出錯(cuò)處理

SJMPL2L1:JBRB8,ERR;偶校驗(yàn)時(shí)RB8為1轉(zhuǎn)出錯(cuò)處理L2:MOV@R0,A;奇偶校驗(yàn)對(duì)時(shí)存入數(shù)據(jù)第九十一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

INCR0;修改指針

POPA;恢復(fù)現(xiàn)場(chǎng)

POPPSWRETI;中斷返回ERR:…;出錯(cuò)處理

RETI;中斷返回

第九十二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日4)方式3方式3為波特率可變的9位異步通信方式,除了波特率有所區(qū)別之外,其余方式都與方式2相同。方式3的波特率=(2SMOD/32)×(定時(shí)器T1的溢出率)第九十三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

3.串行通信的波特率串行通信的4種工作方式對(duì)應(yīng)著3種波特率。

(1)對(duì)于方式0,波特率是固定的,為單片機(jī)時(shí)鐘的十二分之一,即fosc/12。

(2)對(duì)于方式2,波特率有兩種可供選擇,即fosc/32和fosc/64。對(duì)應(yīng)于以下公式:波特率=(fosc×2SMOD)

/64第九十四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

(3)對(duì)于方式1和方式3,波特率都由定時(shí)器T1的溢出率來(lái)決定,對(duì)應(yīng)于以下公式:

波特率=(2SMOD/32)×(定時(shí)器T1的溢出率)

而定時(shí)器T1的溢出率則和所采用的定時(shí)器工作方式有關(guān),并可用以下公式表示:

定時(shí)器T1的溢出率=fosc/(12×(2n-X))

其中X為定時(shí)器T1的計(jì)數(shù)初值,n為定時(shí)器T1的位數(shù),對(duì)于定時(shí)器方式0,取n=13;對(duì)于定時(shí)器方式1,取n=16;對(duì)于定時(shí)器方式2、3,取n=8。第九十五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日第九十六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日

7.2.3串行通信應(yīng)用舉例

1、選擇串行通信工作方式

2、計(jì)算所選波特率下定時(shí)器的設(shè)置(方式1和3)

3、編寫(xiě)中斷服務(wù)程序第九十七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例1:串行口按雙工方式收發(fā)ASCII碼字符,最高1位用來(lái)作奇偶校驗(yàn)位,采用奇校驗(yàn)方式,要求傳送的波特率為1200波特。假設(shè)發(fā)送緩沖區(qū)首址為20H,接收緩沖區(qū)首址為40H,時(shí)鐘頻率fosc=6MHz,試編寫(xiě)有關(guān)的通信程序。解:7位ASCII碼加1位奇校驗(yàn)共8位數(shù)據(jù),故可采用串行口工作方式1。MCS-51單片機(jī)的奇偶校驗(yàn)位P是當(dāng)累加器A中“1”的個(gè)數(shù)為奇數(shù)時(shí)P=1;為偶數(shù)時(shí)P=0。如果直接把P的值放入ASCII碼的最高位(奇偶校驗(yàn)位),恰好成了偶校驗(yàn),與要求不符。因此要把P值取反后再放入ASCII碼的最高位,才是要求的奇校驗(yàn)。第九十八頁(yè),共一百二十四頁(yè),編輯于2023年,星期日定時(shí)器T1采用工作方式2,可以避免計(jì)數(shù)溢出后用軟件重裝定時(shí)初值。先計(jì)算定時(shí)器T1的初值,取SMOD=0,按式(5―4)可算出:定時(shí)器T1的溢出率=波特率×32/2SMOD=1200×32/20=38400第九十九頁(yè),共一百二十四頁(yè),編輯于2023年,星期日然后,根據(jù)式(5―5)可求出其對(duì)應(yīng)的計(jì)數(shù)初值為

X=2n-(fosc/T1的溢出率×12)=28-(6×106/(38400×12))=243=F3H

最后確定特殊功能寄存器的初值:對(duì)于SCON:

SM0、SM1=01時(shí)為方式1,在SM2=0和REN=1條件下,允許接收數(shù)據(jù),其余各位均取0。則

SCON=01010000B=50H第一百頁(yè),共一百二十四頁(yè),編輯于2023年,星期日對(duì)于PCON:由于SMOD=0,所以PCON=00H(同系統(tǒng)復(fù)位以后的狀態(tài),可不賦值)。對(duì)于TMOD:由于只用T1,且為定時(shí)方式2,所以

TMOD=00100000B=20H

主程序:

MOVTMOD,#20H;定時(shí)器T1設(shè)為方式2MOVTL1,#F3H;裝入定時(shí)器初值

MOVTH1,#F3H;8位重裝值第一百零一頁(yè),共一百二十四頁(yè),編輯于2023年,星期日SETBTR1;啟動(dòng)定時(shí)器T1MOVSCON,#50H;串行口設(shè)為方式1MOVR0,#20H;發(fā)送緩沖區(qū)首址MOVR1,#40H;接收緩沖區(qū)首址SETBEA;開(kāi)中斷SETBES;允許串行口中斷LCALLSOUT;先輸出1個(gè)字符SJMP$;等待中斷第一百零二頁(yè),共一百二十四頁(yè),編輯于2023年,星期日中斷服務(wù)程序:

ORG0023H;串行中斷入口

LJMPSBR1;轉(zhuǎn)至中斷服務(wù)程序SBR1:JNBRI,SEND;不是接收則轉(zhuǎn)

LCALLSIN;是接收,則調(diào)用接收子程序

SJMPNEXT;轉(zhuǎn)至統(tǒng)一出口SEND:LCALLSOUT;是發(fā)送,則調(diào)用發(fā)送子程序NEXT:RETI;中斷返回第一百零三頁(yè),共一百二十四頁(yè),編輯于2023年,星期日發(fā)送子程序:SOUT:MOVA,@R0;取發(fā)送數(shù)據(jù)到AMOVC,P;奇偶校驗(yàn)位賦于CCPLC;奇校驗(yàn),故取反

MOVA.7,C;送入ASCII碼最高位中

INCR0;修改發(fā)送數(shù)據(jù)指針

MOVSBUF,A;發(fā)送數(shù)據(jù)

CLRTI;清發(fā)送中斷標(biāo)志

RET;返主第一百零四頁(yè),共一百二十四頁(yè),編輯于2023年,星期日接收子程序:SIN:MOVA,SUBF;讀入接收緩沖區(qū)內(nèi)容

MOVC,P;取出奇偶校驗(yàn)位

CPLC;奇校驗(yàn)

ANLA,#7FH;刪去奇偶校驗(yàn)位

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

INCR1;修改接收緩沖區(qū)指針

CLRRI;清接收中斷標(biāo)志

RET;返主第一百零五頁(yè),共一百二十四頁(yè),編輯于2023年,星期日串口方式1應(yīng)用例7-7雙機(jī)通信通信協(xié)議:方式1的一幀信息中有1個(gè)起始位、8個(gè)數(shù)據(jù)位和1個(gè)停止位;波特率為2400bps,T1工作在定時(shí)器方式2,單片機(jī)時(shí)鐘振蕩頻率選用11.0592MHz,查表7-6可得:TH1=TL1=0F4H,PCON寄存器的SMOD位為0。第一百零六頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例7-7雙機(jī)通信當(dāng)1號(hào)機(jī)發(fā)送時(shí),先發(fā)送一個(gè)“E1”聯(lián)絡(luò)信號(hào),2號(hào)機(jī)收到后回答一個(gè)“E2”應(yīng)答信號(hào),表示同意接收。當(dāng)1號(hào)機(jī)收到應(yīng)答信號(hào)“E2”后,開(kāi)始發(fā)送數(shù)據(jù),每發(fā)送一個(gè)字節(jié)數(shù)據(jù)都要計(jì)算“校驗(yàn)和”,假定數(shù)據(jù)塊長(zhǎng)度為16個(gè)字節(jié),起始地址為40H,一個(gè)數(shù)據(jù)塊發(fā)送完畢后立即發(fā)送“校驗(yàn)和”。第一百零七頁(yè),共一百二十四頁(yè),編輯于2023年,星期日例7-7雙機(jī)通信2號(hào)機(jī)接收數(shù)據(jù)并轉(zhuǎn)存到數(shù)據(jù)緩沖區(qū),起始地址也為40H,每接收到一個(gè)字節(jié)數(shù)據(jù)便計(jì)算一次“校驗(yàn)和”,當(dāng)收到一個(gè)數(shù)據(jù)塊后,再接收1號(hào)機(jī)發(fā)來(lái)的“校驗(yàn)和”,并將它與2號(hào)機(jī)求出的校驗(yàn)和進(jìn)行比較。若兩者相等,說(shuō)明接收正確,2號(hào)機(jī)回答00H;若兩者不相等,說(shuō)明接收不正確,2號(hào)機(jī)回答0FFH,請(qǐng)求重發(fā)。1號(hào)機(jī)接到00H后結(jié)束發(fā)送;若收到的答復(fù)非零,則重新發(fā)送一次數(shù)據(jù)。發(fā)送和接收程序流程圖如圖7-17所示。第一百零八頁(yè),共

溫馨提示

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

評(píng)論

0/150

提交評(píng)論