51單片機和PC串口異步通信
一.51單片機的串行通信管腳
本文引用地址:http://m.butianyuan.cn/article/201611/318575.htmP3.1為單片機的TXD管腳(Transfer Data),P3.2為單片機的RXD管腳(Receive Data)。
通過TXD管腳可以將CPU要發(fā)送的數(shù)據(jù)輸出,RXD管腳可以將串行數(shù)據(jù)線傳來的數(shù)據(jù)讀入。
二.51單片機的串行通信控制寄存器SCON,電源控制寄存器PCON
SCON:
其中,SM0,SM1控制著串行通信的工作方式。
SM0 | SM1 | 工作方式 | 說明 | 波特率 |
0 | 0 | 0 | 移位寄存器 | fosc/12 |
0 | 1 | 1 | 10位異步收發(fā)器(8位數(shù)據(jù)) | 可變 |
1 | 0 | 2 | 11位異步收發(fā)器(9位數(shù)據(jù)) | fosc/64或fosc/32 |
1 | 1 | 3 | 11位異步收發(fā)器(9位數(shù)據(jù)) | 可變 |
其中工作方式1在使用當(dāng)中比較多。
SM2為多機通信控制位,SM2=1,允許多機通信,=0不允許,實現(xiàn)點對點通信。這里先不討論。
TB8用于儲存發(fā)送數(shù)據(jù)的第9位。在方式2和方式3中,發(fā)送數(shù)據(jù)除了起始位,數(shù)據(jù)位,停止位外,還有一位校驗位,存儲在TB8中。
RB8用于存儲接收數(shù)據(jù)的第9位。接收到傳來的代碼后,數(shù)據(jù)位存儲在SBUF中,而校驗位就存儲在RB8中。通過分析,可以判別接受的數(shù)據(jù)是否正確。
TI為發(fā)送中斷請求標(biāo)志。當(dāng)發(fā)送數(shù)據(jù)緩沖區(qū)為空的時候,TI通過硬件置1,通知CPU數(shù)據(jù)發(fā)送完畢,需要有軟件清零。
RI為接收中斷請求標(biāo)志。總線上的數(shù)據(jù)通過RXD引腳串行送入單片機內(nèi),通過移位寄存器將串行數(shù)據(jù)變成并行數(shù)據(jù),送入SBUF中。若接收的SBUF已經(jīng)滿,通過硬件置1,通知CPU一幀數(shù)據(jù)已經(jīng)接收完畢,可以進行讀取。同樣需要軟件清零。
PCON中只有最高位SMOD與串行通信有關(guān)。
SMOD=1,波特率在原來的基礎(chǔ)上加倍;
否則,不加倍。
三.波特率的計算
對于方式1和方式3,波特率計算公式為:(2^SMOD/32)*(T1的溢出率);
對于方式2,為fosc*(2^SMOD/64);
對于方式1,由晶振決定,為固定值。
T1也就是定時器1,做波特率發(fā)生器時,一般典型用法為工作在方式2,也就是自動裝載的8位計數(shù)模式。TH,TL各8位,但只有TL部分計數(shù),故最大計數(shù)值為255。溢出后,TH中的數(shù)自動裝載到TL中。
所以,T1溢出率=fosc/{12x(256-TH1)};
所以可以列出右邊為我們所要波特率的方程。同時網(wǎng)上也有許多波特率的計算工具,也可以拿來使用。
最后總結(jié)起來,串行通信大致要有這樣幾步:
1.確定定時器T1工作方式,也就是編程TMOD寄存器;
2.裝載T1的初值,也就是給TH1,TL1賦值;
3.確定串行口工作方式,也就是編程SCON和PCON寄存器;
4.啟動T1定時器,也就是令TR1=1;
5.如果使用中斷查詢的話,編寫中斷服務(wù)函數(shù)
上面這些大概就是串口通信的基本知識了。有了這些知識,就可以編寫程序來實踐了。
評論