UART口,又叫做通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),是單片機常用功能的一部分,也是早期臺式電腦必備的一個硬件接口。
當年我調試UART口的時候,用的還是超級終端,現在都用串口助手了,比我們當時方便多了。 UART口按位發送和接收字節,雖然相比于并口,慢了很多,但是在有限的IO資源面前,這種方式是非常可取的。 UART口主要用于ASCII碼的傳輸,傳輸過程遵循ANSI/EIA-232標準。ASCII碼是啥?看下表: 驅動電路主要有有兩種,一種是基于MAX232這類芯片的: 上圖中,MAX232的10腳接到單片機的TXD上,9腳接到單片機的RXD上。 另一種以CH340或者PL2303這類芯片為主,因為電腦上的RS232接口越來越少,所以這類芯片使用USB轉UART口的方式來實現,應用電路如下: 通信過程中主要參數如下: 波特率:傳輸速率,常用范圍9600~115200. 數據位:就是每次發送的這個數據有幾位,常用的是8位,別的還有4、5、6、7. 校驗位:用來校驗傳輸資料的正確性。 停止位:是一個字符數據傳輸結束的標志,一般設為1位。 波特率如何計算? 方式1,3的波特率=1/32或1/16*計時器2的溢出率。 此處有一個公式:
波特率=1/16或1/32*(晶振的頻率/12*(256-TH1))
代入:
9600=11059200/32*12*(256-TH1)
TH1=TH0=FDH 代碼比較多,不貼出來了,已經加好注釋了。有興趣的可以自己下載去研究,如下: - /**********************51單片機學習例程************************
- * 平臺:Keil U4 + STC89C52
- * 名稱:UART口傳輸一個字符 A
- * 編寫:起航
- * 晶體:11.0592MHZ
- ******************************************************************/
- #include <reg52.h>
- typedef unsigned char uint8;
- typedef unsigned int uint16;
- uint8 num = 65;
- /***************************************************
- *
- * 延時子函數
- *
- ****************************************************/
- void delay(uint16 n)
- {
- while(n--);
- }
- /***************************************************
- *
- * 串口初始化子函數
- *
- ****************************************************/
- void UART_init(void)
- {
- SCON = 0x50; //工作在方式1 ,8位異步收發,波特率由定時器控制
- TMOD = 0x20; //選擇定時器1做為波特率發生器,方式2
- TH1 = 0xFD; //定時器賦初值
- TL1 = 0xFD;
- TR1 = 1; //啟動定時器
- ES = 1; //串口中斷允許
- EA = 1; //開啟總中斷
- }
- /***************************************************
- *
- * 字節發送子函數
- *
- ****************************************************/
- void UART_send_byte(uint8 dat)
- {
- SBUF = dat;
- while(!TI); //等待發送完成
- }
- int main()
- {
- UART_init();
- while(1) //循環發送字符 A
- {
- UART_send_byte(num);
- delay(20000);
- }
- return(0);
- }
復制代碼
程序及hex文件下載:
UART1.zip
(28.52 KB, 下載次數: 72)
2015-4-8 22:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|