MCS-51單片機的串行口-控制工程網(wǎng)_第1頁
MCS-51單片機的串行口-控制工程網(wǎng)_第2頁
MCS-51單片機的串行口-控制工程網(wǎng)_第3頁
MCS-51單片機的串行口-控制工程網(wǎng)_第4頁
MCS-51單片機的串行口-控制工程網(wǎng)_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、mcs-51單片機的串行口mcs-51串行口具有兩條獨立的數(shù)據(jù)線:發(fā)送端txd、接收端rxd,允許數(shù)據(jù)同時 往兩個相反的方向傳輸。一燉通信時發(fā)送數(shù)據(jù)由txd端輸出,接收數(shù)據(jù)由rxd端輸入。一、串行口的控制寄存器mcs-51單片機串行口是山緩沖器sbuf、移位寄存器、串行口控制寄存器scon、 電源控制寄存器pcon及波特率發(fā)生器t1組成。1. 串行口數(shù)據(jù)緩沖器sbufmcs-51單片機內(nèi)的串行接口部分,具有兩個物理上獨立的緩沖器:發(fā)送緩沖器和 接收緩沖器,以便能以全雙工的方式進行通信。串行口的接收由移位寄存器和接收緩 沖器構(gòu)成雙緩沖結(jié)構(gòu),能避免在接收數(shù)據(jù)過程中出現(xiàn)幀重疊。發(fā)送時因為cpu是主動

2、 的,不會發(fā)主幀重疊錯誤,所以發(fā)送結(jié)構(gòu)是單緩沖的。在邏輯上,串行口的緩沖器只有一個,它既表示接收緩沖器,也表示發(fā)送緩沖器。 兩者共用一個寄存器名sbuf,共用一個地址99h。即:在完成串行口初始化后,發(fā)送數(shù)據(jù)時,采用mov sbuf, a指令,將要發(fā)送的 數(shù)據(jù)輸入sbuf,則cpu白動啟動和完成串行數(shù)據(jù)的輸出;接收數(shù)據(jù)時,采用mov a, sbuf 指令,cpu就自動將接收到的數(shù)據(jù)從sbuf中讀出。2. 串行口控制寄存器scon串行口控制寄存器scon包含:串行口工作方式選擇位、接收發(fā)送控制位、以及串 行口狀態(tài)標志位。其格式如下:d7 d6 do d4 d3 d2 di dosmosm1sm2

3、rentb8rb8ttrtosmo smi (scon. 7、scon. 6):串行口的工作方式選擇位,其編碼見表6-1。 表6-1 串行口的工作方式smo sm1工作方式說明波特率00方式0同步移位寄存器fosc/1201方式110位異步收發(fā)由定時器控制10方式211位界步收發(fā)fosc/32 或 fosc/6411方式311位異步收發(fā)由定時器控制 sm2 (scon. 5):多機通信控制位。在方式2或方式3中,若sm2=1,則只冇當 接收到的第9位數(shù)據(jù)(rb8)為1時,才能將接收到的數(shù)據(jù)送入sbuf,并使接收中斷標 志ri置位向cpu申請中斷,否則數(shù)據(jù)丟失;若sm2=0,則不論接收到的第9位

4、數(shù)據(jù) 為1還是為0,都將會把前8位數(shù)據(jù)裝入sbuf小,并使接收小斷標志r1置位向cpu 申請屮斷。在方式1,如sm2=1,則只有收到有效的停止位時才會使ri置位。在方式 0時,sm2必須為0。 ren (scon. 4):串行口接收允許位。由軟件置位以允許接收,由軟件清0來禁 止接收。 tb8 (scon. 3):在方式2和方式3中為發(fā)送的第9位數(shù)據(jù)。在多機通信中,常 以該位的狀態(tài)來表示主機發(fā)送的是地址還是數(shù)據(jù)。通常協(xié)議規(guī)定:tb8為“0”表示主 機發(fā)送的是數(shù)據(jù),為“1”表示發(fā)送的是地址。 rb8 (scon. 2):在方式2和方式3中為接收到的第9位數(shù)據(jù)。它和sm2、tb8 一起用于通信控制

5、。tt (scon. 1):發(fā)送中斷標志。山硬件在方式0串行發(fā)送笫8位結(jié)朿時置位,或 在其他方式串行發(fā)送停止位的開始時置位,必須由軟件清“0”。ri (scon. 0):接收屮斷標志。由硬件在方式0串行接收到第8位結(jié)束時置位, 或在其他方式串行接收到停止位的中間時置位,必須由軟件清“0”。3. 電源控制寄存器pcon電源控制寄存器pcon的格式如下:07060504 d3 d2 d1 00smodd7位smod是串行口波特率倍增位。smod為1時,串行口工作方式1、方式2、方 式3的波特率加倍。具體值見各種工作方式下的波特率計算公式。二、串行口的工作方式(一) 方式0方式0為同步移位寄存器輸入

6、輸出方式。其工作方法是:串行數(shù)據(jù)通過rxd端輸 入/輸出,txd則用于輸出移位時鐘脈沖。方式0吋,收發(fā)的數(shù)據(jù)為8位,低位在両, 高位在后。波特率固定為fosc/12,其小f csc為單片機的晶振頻率。利用此工作方式,可以在串行口外接移位寄存器以擴展i/o接口,也可以外接串 行同步輸入輸出的設備。圖6 6所示為串行口外接一片移位寄存器74ls164的輸出接+ 5v+ 5v圖6-6 方式0發(fā)送、接收電路a)發(fā)送接口電路b)接收接口電路口電路和74ls165的輸入接口電 路的情況。數(shù)據(jù)的發(fā)送是以寫sbuf寄存 器指令開始的,8位數(shù)據(jù)由低位至 高位順序由rxd端輸出,同時由 txd端輸出移位脈沖,且每

7、個脈沖 輸出一位數(shù)據(jù)。8位數(shù)據(jù)輸岀結(jié)束 時ti被置位。在圖6-6a所示串行 口輸出電路中,74ls164為一串入 并出的移位寄存器,據(jù)此通過串行 口方式0發(fā)送數(shù)據(jù)可編程如下:wait:movscon, #00hsetbpl. 0;選通 74ls164mova,#data:置要發(fā)送的數(shù)據(jù)movsbuf, a;數(shù)據(jù)寫入sbuf并啟動發(fā)送jnbti, wait;等待一個字節(jié)數(shù)據(jù)發(fā)送完clrti;清除 ticlrpl. 0;關(guān)閉 74ls164圖6-6 b是串行口在方式0下利用并入串出芯片74ls165來完成數(shù)據(jù)的接收。接 收是在ren=1和ri二0同時滿足時開始的,在移位時鐘同步下,將數(shù)據(jù)字節(jié)的低位

8、至高 位一位一位地接收下來并裝入sbuf屮,結(jié)束時r1置位。(二)方式1串行接口工作于方式1時,被定義為10位的異步通信接口,即傳送一幀信息為 10位。一位起始位“0”,8位數(shù)據(jù)位(先低位后高位),一位停止位“1”。其屮起始位 和停止位是在發(fā)送吋自動插入的。串行接口以方式1發(fā)送吋,數(shù)據(jù)由txd端輸出。cpu執(zhí)行一條數(shù)據(jù)寫入發(fā)送緩沖 器sbuf的指令(即:mov sbuf, a指令),將數(shù)據(jù)字節(jié)寫入sbuf后,便啟動串行口發(fā) 送,發(fā)送完一幀信息,發(fā)送中斷標志tt置“1”。方式1的波特率是可變的,可由以下公式計算得到:方式1波特率=2'販(定吋器1的溢出率)/32(三)方式2和方式3串行接

9、口工作于方式2和方式3時,被定義為11位的異步通信接口,即傳送一幀 信息為11位。一位起始位“0”,8位數(shù)據(jù)位(從低位至高位)、一位附加的第9位數(shù)據(jù) (町程控為1或0), 位停止位“1”。其中起始位和停止位是在發(fā)送時口動插入的。方式2或方式3發(fā)送時,數(shù)據(jù)由txd端輸出,發(fā)送一幀信息為11位,附加的第9 位數(shù)據(jù)就是scon小的tb8,cpu執(zhí)行一條數(shù)據(jù)寫入發(fā)送緩沖器sbuf的指令(即指令mov sbuf, a),就啟動串行口發(fā)送,發(fā)送完一幀信息,發(fā)送中斷標志tt置位。方式2和方式3的操作過程是一樣的,所不同的是它們的波特率。方式2波特率=2晌 fosc/64方式3波特率=2'瞼(定時器1

10、的溢岀率)/32三、波特率的設置mcs-51單片機串行口通信的波特率取決于串行口的工作方式。當串行口被定義為 方式0時,其波特率固定等于fosc/12 o當串行口被定義為方式2時,其波特率= 2smodxfosc/64,即當 smod=o 時,波特率= fosc/64;當 smod=1 時,波特率= fosc/32o smod是pcon寄存器的最高位,以,要想改變smod的值,anl pcon,orl pcon,通過軟件可設置smod=0或1。因為pcon無位尋址功能,所 可通過執(zhí)行以下指令來完成:#7fh;使 smod=o#80h;使 smod二1當串行口被定義為方式1或方式3時,其波特率=

11、2sm01,x定時器t/c1的溢出率/32。 定時器t/c1的溢出率,収決于計數(shù)速率和定時器的預置值。下面說明t/c1溢出率的 計算和波特率的設置方法。1. t/c1溢出率的計算在串行通信方式1和方式3下,使用定時器t/c1作為波特率發(fā)牛:器。t/c1可以工作于方式0、方式1和方式2,其屮方式2為白動裝入時間常數(shù)的8位定時器,使用 時只需進行初始化,不需耍安排屮斷服務程序重裝時間常數(shù),因而在卅t/c1作波特率 發(fā)生器時,常使其工作于方式2。前面我們介紹過定時器定時時間的計算方法,同樣,我們設x為時間常數(shù)即定時器的初值;仁禮為晶振頻率,當定時器t/c1工作于方式2時,則有:溢出周期=(28-x)

12、x12/fosc溢出率二1/溢出周期二fosc/12(28-x)j2. 波特率的設置由上述可得,當串行口工作于方式1或方式3、定時器t/cl i作于方式2時波特率=2sm0dx定時器t/c1溢出率/32二2sm0dx g/32x 12 (28-x)當fosc=6miiz, t/c1工作于方式2時,波特率的范圍為61.0431250b/s。由上式可以看出,當x=255時,波特率為最高。如彳osc = 12mhz, sm0d=0,則 波特率為31. 25kb/s,若sm0d=l,則波特率為62. 5kb/s。這是f°sc = 12mhz時波特率的 上限。若需要更高的波特率,則需要提高主振

13、頻率©sc。在實際應用中,一般是先按照所要求的通信波特率設定sm0d,然后再算出t/c1 的時間常數(shù)。即:x=28-2smodx f /(384x 波特率)例如,某8051單片機控制系統(tǒng),主振頻率為12mhz,要求串行口發(fā)送數(shù)據(jù)為8位、 波特率為1200b/s,編寫串行口的初始化程序。我們設sm0d=l,則t/c1的時間常數(shù)x的值為:sm0d=l,則t/c1的時間x=28-2smodx f /(384x 波特率)初始化程序為:movscon, #50h;串行口工作于方式1orlpcon, #80h;smod=1movtmod, #20h;t1工作于方式2,定時方式movth1, #0

14、cch;設置吋間常數(shù)初值movtl1, #0cchsetbtri:啟動t/c1=256-2x 12x 106/(384x 1200)=256-52.08=203. 92occh再如,要求串行通信波特率為2400b/s,假設常數(shù)為:x=28-21x6x 107(384x2400)=242. 98243=f3h定時器t/cl和串行口的初始化程序如下:movtmod, #20h;設t/cl為方式2定時movth1, #0f3h;置時間常數(shù)movtl1, #0f3hsetbtri;啟動t/clorlpcon, #8011;smod=1movscon, #50h;設串行口方式1執(zhí)行上而的程序后,即可使串

15、行口工作于方式1,波特率為2400b/s。需要指出的是,在波特率的設置中,shod位數(shù)值的選擇直接影響著波特率的精確度。以上例所用數(shù)據(jù)來說明,波特率=2400b/s,,c=6mhz,這時shod可以選為1或0。由于對shod位數(shù)值的不同選擇,所產(chǎn)生的波特率課差是不同的。1)選擇smod二1,山上而計算己得t/c1時間常數(shù)x=243,按此值可算得t/c1實際 產(chǎn)生的波特率及誤差為波特率=2shodxfosc/2x12(28-x)= 2*x fosc/32x 12 (256-243) = 2403. 85b/s波特率誤差=(2403. 85-2400)/2400=0. 16%2)選擇smod=o,此時x=28-2° x6x 10*7(384x2400) =249. 49249 由此值可以算出t/c1實際產(chǎn)生的波特率及誤差為:波特率=2° x6x 10'/32 x 12(256 249)1 = 2232. mb/s波特率誤差=(2400-2232. 14)/2400 = 6. 99%上面的分析計算說明了 smod值雖然可以任意選擇,但在某些情況下它會使波特率 產(chǎn)生謀差。因而在波

溫馨提示

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

評論

0/150

提交評論