1.功能
mcs-5l單片機中的異步通信串行口能方便地與其他計算機或串行傳送信息的外圍設(shè)備(如串行打印機、crt終端等)實現(xiàn)雙機、多機通信。
串行口有四種工作方式,如表所示:
sm0
sm1
工作方式
功能
波特率
0
0
方式0
移位寄存器方式,用于并行i/o擴展
fosc/12
0
1
方式1
8 位通用異步接收器/發(fā)送器
可變
1
0
方式2
9 位通用異步接收器/發(fā)送器
fosc/1 或 fosc/24
1
1
方式3
9 位通用異步接收器/發(fā)送器
可變
2.結(jié)構(gòu)
由發(fā)送數(shù)據(jù)緩沖器、發(fā)送控制器、輸出控制門、接收數(shù)據(jù)緩沖器、接收控制器、輸入移位寄存器等組成。發(fā)送數(shù)據(jù)緩沖器只能寫入,不能讀出,接收數(shù)據(jù)緩沖器只能讀出,不能寫入,二者共用一個符號 — 特殊功能寄存器 sbuf,共用一個地址 — 99h。串行口中還有兩個特殊功能寄存器scon、pcon,分別用來控制串行口的工作方式和波特率。波特率發(fā)生器由定時器/計數(shù)器1構(gòu)成。
3.串行口控制寄存器scon
串行口控制寄存器scon的格式如下:
(l)工作方式選擇位smo、sm1:smo、sm1由軟件置 “1” 或清 “0” ,用于選擇串行口的 4種工作方式。
(2)多機通信控制位sm2:sm2=“1” 時,接收到一幀信息,如果接收到的第 9位數(shù)據(jù)為1,硬件將ri置“1” ,申請中斷;如果第九位數(shù)據(jù)為“0” ,則 ri不置“1” ,且所接收的數(shù)據(jù)無效。
sm2=“0” 時,只要接收到一幀信息,不管第九位數(shù)據(jù)是0還是1,硬件都置ri =“1”,并申請中斷。ri由軟件清“0”,sm2由軟件置“1”或清“0”。
多機通信時,各從機先將sm2置“l(fā)”。接收并識別主機發(fā)來的地址,當(dāng)?shù)刂放c本機相同時,將 sm2清“0”,與主機進行數(shù)據(jù)傳遞。各機所發(fā)送的數(shù)據(jù)第 9位必須為“0”。
(3)允許接收控制位ren:ren=“1” 時允許并啟動接收,ren =“0”時禁止接收。ren由軟件置“1”或清“0”。
(4)發(fā)送數(shù)據(jù)d8位tb8:tb8是方式2、方式3中要發(fā)送的第九位數(shù)據(jù),事先用軟件寫入1或0。方式0、方式1不用。
(5)接收數(shù)據(jù)d8位rb8:方式2、方式3中,由硬件將接收到的第九位數(shù)據(jù)存入rb8。方式1中,停止位存入rb8。
(6)發(fā)送中斷標(biāo)志位ti:發(fā)送完一幀信息,由硬件使ti置“1”, ti必須由軟件清“0”。
(7)接收中斷標(biāo)志位ri:接收完一幀有效信息,由硬件使ri置“1”, ri必須由軟件清“0” 。
4.串行口數(shù)據(jù)寄存器 sbuf
串行口數(shù)據(jù)寄存器sbuf由串行輸出移位寄存器和兩級緩沖的串行輸入寄存器組成。當(dāng)數(shù)據(jù)寫入sbuf時啟動串行數(shù)據(jù)發(fā)送,連同此前置入的tb8,按設(shè)定波特率串行輸出。串行數(shù)據(jù)移入串行輸入寄存器完成后,自動將數(shù)據(jù)并行送入接收sbuf,并置“1”通知 cpu讀取數(shù)據(jù),cpu應(yīng)該在下一個串行數(shù)據(jù)接收完成之前讀出。
5.串行口的工作方式
(1)方式0:同步移位寄存器方式
波特率固定為fosc/12
rxd —— 接收發(fā)送數(shù)據(jù)
txd —— 產(chǎn)生同步移位脈沖
接收/發(fā)送完,置位ri/ti ,(要求sm2 = 0)
(2)方式1:8位uart
波特率為(2 smod×t1的溢出率)/32 ,可變。
一幀信息10位。
接收到有效數(shù)據(jù)完畢,置位ri的條件:
ren = 1,ri = 0 且sm2 = 0或接收到第9位數(shù)據(jù)為1,此時,數(shù)據(jù)裝載sbuf,ri置1,第9位數(shù)據(jù)(tb8) rb8。
6.多機通信
多機通信系統(tǒng)有1個主機與多個從機,從機數(shù)最多256個,地址編為00h至0ffh。距離近,可直接以ttl電平通信,距離遠可轉(zhuǎn)換rs485標(biāo)準(zhǔn)進行通信。為了區(qū)分是數(shù)據(jù)信息還是地址信息,主機用第9位數(shù)據(jù)tb8作為地址/數(shù)據(jù)的識別位,地址幀的tb8 =“1” ,數(shù)據(jù)幀的 tb8 =“0”。各從機的 sm2必須置“1”。在主機與某一從機通信前,先將該從機的地址發(fā)送給各從機。由于各從機sm2=“1”,接收到的地址幀 rb8=“1”,所以各從機的接收信息都有效,送入各自的接收緩沖器,并置ri=“1” 。各從機 cpu響應(yīng)中斷后,通過軟件判斷主機送來的是不是本從機地址,如是本從機地址,就使sm2=“0”,否則保持 sm2 =“l(fā)”。
7.波特率
串行口每秒鐘發(fā)送或接收的數(shù)據(jù)位數(shù)稱為波特率。 假設(shè)發(fā)送一位數(shù)據(jù)所需時間為t, 則波特率為 1/t。
(1) 模式0 的波特率等于單片機晶振頻率的 1/12, 即每個機器周期接收或發(fā)送一位數(shù)據(jù)。
(2) 模式2的波特率與電源控制器pcon的最高位smod的寫入值有關(guān):即smod=0, 波特率為(1/64) f osc ; smod=1, 波特率為(1/32)f osc 。
(3) 模式 1 和模式 3 的波特率除了與smod位有關(guān)之外, 還與定時器 t1 的溢出率有關(guān)。 定時器 t1 作為波特率發(fā)生器, 常選用定時方式 2(8位重裝載初值方式), 并且禁止 t1 中斷。此時 th1 從初值計數(shù)到產(chǎn)生溢出, 它每秒鐘溢出的次數(shù)稱為溢出率。 于是