對于單片機來說,通信則與傳感器、存儲芯片、外圍控制芯片等技術(shù)緊密結(jié)合,成為整個單片機系統(tǒng)的“神經(jīng)中樞”。
1、初步認識
一位一位的發(fā)送出去的,要發(fā)送 8 次才能發(fā)送完一個字節(jié)。
STC89C52有兩個引腳是專門用來做 UART串行通信的,一個是 P3.0一個是 P3.1,它們還分別有另外的名字叫做 RXD和TXD,由它們組成的通信接口就叫做串行接口,簡稱串口。
波特率:發(fā)送二進制數(shù)據(jù)位的速率,習(xí)慣上用 baud 表示;即我們發(fā)送一位二進制數(shù)據(jù)的持續(xù)時間=1/baud。
通信過程:在UART 通信的時候,一個字節(jié)是 8 位,規(guī)定當(dāng)沒有通信信號發(fā)生時,通信線路保持高電平,當(dāng)要發(fā)送數(shù)據(jù)之前,先發(fā)一位 0 表示起始位,然后發(fā)送 8 位數(shù)據(jù)位,數(shù)據(jù)位是先低后高的順序,數(shù)據(jù)位發(fā)完后再發(fā)一位 1 表示停止位。
2、RS232通信接口與USB轉(zhuǎn)串口通信
RS232 接口一共有 9 個引腳,分別定義是: 1、載波檢測 DCD; 2、接收數(shù)據(jù) RXD; 3、發(fā)送數(shù)據(jù) TXD; 4、數(shù)據(jù)終端準(zhǔn)備好 DTR; 5、信號地線 SG; 6、數(shù)據(jù)準(zhǔn)備好 DSR; 7、請求發(fā)送 RTS; 8、清除發(fā)送 CTS; 9、振鈴提示 RI。我們要讓這個串口和我們單片機進行通信,我們只需要關(guān)心其中的 2 腳 RXD、 3 腳 TXD 和 5 腳 GND 即可。
負邏輯:低電平代表的是 1,而高電平代表的是 0,因此需要電平轉(zhuǎn)換芯片 MAX232。 RS232 串口和 UART 串口,它們的協(xié)議類型是一樣的,只是電平標(biāo)準(zhǔn)不同而已,而 MAX232 這個芯片起到的就是中間人的作用,它把 UART 電平轉(zhuǎn)換成 RS232 電平,也把 RS232 電平轉(zhuǎn)換成 UART 電平。
USB 轉(zhuǎn)串口芯CH340T:實現(xiàn) USB通信協(xié)議和標(biāo)準(zhǔn)UART 串行通信協(xié)議的轉(zhuǎn)換。
3、通信的三種基本類型
單工通信就是指只允許一方向另外一方傳送信息,而另一方不能回傳信息;
半雙工通信是指數(shù)據(jù)可以在雙方之間相互傳播,但是同一時刻只能其中一方發(fā)給另外一方;
全雙工通信就發(fā)送數(shù)據(jù)的同時也能夠接收數(shù)據(jù),兩者同步進行。
4、串口通信
1、配置串口為模式 1。
2、配置定時器 T1 為模式 2,即自動重裝模式。
3、根據(jù)波特率計算 TH1 和 TL1 的初值,如果有需要可以使用 PCON 進行波特率加倍。
4、打開定時器控制寄存器 TR1,讓定時器跑起來。
定時器的重載值計算公式為:TH1= TL1 = 256 - 晶振值/12 /2/16 /波特率
#include
voidConfigUART(unsignedintbaud);
intmain(void)
{
EA=1;//使能總中斷
ConfigUART(9600);//配置波特率為9600
while(1);
return0;
}
/*串口配置函數(shù),baud-通信波特率*/
voidConfigUART(unsignedintbaud)
{
SCON=0x50;//配置串口為模式1
TMOD&=0x0F;//清零T1的控制位
TMOD|=0x20;//配置T1為模式2
TH1=256-(11059200/12/32)/baud;//計算T1重載值
TL1=TH1;//初值等于重載值
ET1=0;//禁止T1中斷
ES=1;//使能串口中斷
TR1=1;//啟動T1
}
/*UART中斷服務(wù)函數(shù)*/
voidInterruptUART()interrupt4
{
if(RI)//接收到字節(jié)
{
RI=0;//手動清零接收中斷標(biāo)志位
SBUF=SBUF+1;//接收的數(shù)據(jù)+1后發(fā)回,左邊是發(fā)送SBUF,右邊是接收SBUF
}
if(TI)//字節(jié)發(fā)送完畢
{
TI=0;//手動清零發(fā)送中斷標(biāo)志位
}
}