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