UART口,又叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是单片机常用功能的一部分,也是早期台式电脑必备的一个硬件接口。
当年我调试UART口的时候,用的还是超级终端,现在都用串口助手了,比我们当时方便多了。
当年我调试UART口的时候,用的还是超级终端,现在都用串口助手了,比我们当时方便多了。
UART口按位发送和接收字节,虽然相比于并口,慢了很多,但是在有限的IO资源面前,这种方式是非常可取的。
UART口主要用于ASCII码的传输,传输过程遵循ANSI/EIA-232标准。ASCII码是啥?看下表:
就是说,当我想发送字符“A”的时候,我要向串口发送十进制数65,或者十六进制数41。
驱动电路主要有有两种,一种是基于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
波特率=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); }
复制代码