新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51系列單片機(jī)之串口通信

51系列單片機(jī)之串口通信

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
單片機(jī)串口通信看起來(lái)是很復(fù)雜的,主要是因?yàn)樗玫搅烁嗟募拇嫫?與前面的知識(shí)相比他更具綜合能力,寫起來(lái)考慮的問(wèn)題自然也變多了.而前面學(xué)習(xí)過(guò)的定時(shí)器與中斷將是單片機(jī)通信的基礎(chǔ).
單片機(jī)的中斷系統(tǒng)中第4個(gè)中斷就是串口中斷,要進(jìn)行串口通信首先就要打開(kāi)CPU總中斷EA,還要打開(kāi)串口通信中斷ES,這是串口通信的前堤,而串口通信也跟計(jì)時(shí)器一樣有很多的模式,因此我們還要設(shè)置SCON寄存器來(lái)指定采用哪一種方式進(jìn)行通信,而在通信的過(guò)程中,我們還要設(shè)定通信的波特率,不然的話,單片機(jī)是沒(méi)辦法進(jìn)行采樣的,這樣也不會(huì)得到正確的結(jié)果了.我在實(shí)驗(yàn)過(guò)程中用到的是1號(hào)定時(shí)器來(lái)設(shè)定的波特率,用到了計(jì)時(shí)器方式2,也就是8位自動(dòng)重裝,這樣可以簡(jiǎn)化編程,她的實(shí)現(xiàn)思想就是將常數(shù)放入TH,而TL中則是初始化參數(shù),當(dāng)溢出時(shí),單片機(jī)會(huì)自動(dòng)將TH中的常數(shù)裝入TL中.



再來(lái)說(shuō)說(shuō)波特率,我們?yōu)槭裁匆O(shè)定波特率,因?yàn)閱纹瑱C(jī)會(huì)以16倍波特率的速度進(jìn)行采樣,而在實(shí)驗(yàn)中我們用的是10位異步收發(fā)方式,因此要將SM0置0,SM1置1.而其中的10位有8位數(shù)據(jù)位,第一位和最后一位是發(fā)送數(shù)據(jù)的起始與結(jié)束.采用高的皮特率就不會(huì)出錯(cuò)啦.而波特率是有一個(gè)公式的:
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256 -(TH1)]}
根據(jù)公式我們很容易就算出當(dāng)晶振為110592HZ時(shí),要達(dá)到9600的波特率,我們只需要將TL1置FDH即可,如下圖:


除此之外,你還要將SCON中的REN位置1,不然的話,單片機(jī)是不會(huì)接收數(shù)據(jù)的.
還有不要忘了選擇定時(shí)器的工作方式,設(shè)置TMOD為0x20既是工作方式2,8位自動(dòng)重裝定時(shí)器.
這樣一來(lái),初始批工作算是差不多了.而串口通信分為中斷方式,和查詢方式,如果你想用查詢方式你也不用設(shè)置IE寄存器了.
在串口通信中,還有一個(gè)很重要的寄存器SBUF,其實(shí)也不是一個(gè),是兩個(gè),只是它們共用同一個(gè)地址,再熱氣表達(dá)式的不同,單片機(jī)會(huì)自動(dòng)選擇使用哪一個(gè)SBUF.


關(guān)鍵詞: 51系列單片機(jī)串口通

評(píng)論


技術(shù)專區(qū)

關(guān)閉