EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
UART口,又叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是单片机常用功能的一部分,也是早期台式电脑必备的一个硬件接口。 
3 x0 P' y9 ^! o  w& y2 e    当年我调试UART口的时候,用的还是超级终端,现在都用串口助手了,比我们当时方便多了。        UART口按位发送和接收字节,虽然相比于并口,慢了很多,但是在有限的IO资源面前,这种方式是非常可取的。        UART口主要用于ASCII码的传输,传输过程遵循ANSI/EIA-232标准。ASCII码是啥?看下表:        表格太大了,放不下,大家可以自己在网络上找到看一看。就是说,当我想发送字符“A”的时候,我要向串口发送十进制数65,或者十六进制数41。        驱动电路主要有有两种,一种是基于MAX232这类芯片的:        上图中,MAX232的10脚接到单片机的TXD上,9脚接到单片机的RXD上。 # Z+ K# T8 m* ?# C 
       另一种以CH340或者PL2303这类芯片为主,因为电脑上的RS232接口越来越少,所以这类芯片使用USB转UART口的方式来实现,应用电路如下:  
$ d  h# Q9 I' J# l       通信过程中主要参数如下:        波特率:传输速率,常用范围9600~115200.        数据位:就是每次发送的这个数据有几位,常用的是8位,别的还有4、5、6、7.        校验位:用来校验传输资料的正确性。        停止位:是一个字符数据传输结束的标志,一般设为1位。        波特率如何计算?        方式1,3的波特率=1/32或1/16*计时器2的溢出率。 此处有一个公式:% ^& X4 @. |0 y5 n3 v3 Q 
波特率=1/16或1/32*(晶振的频率/12*(256-TH1))1 s3 h0 T0 ^6 Q2 @0 H& u 
代入: 
6 \6 W- {, Z; u$ Z9600=11059200/32*12*(256-TH1) 
2 o  l! n) T5 U( K# r* O% YTH1=TH0=FDH  
9 \: }! F  K/ K! {, f       代码比较多,不贴出来了,已经加好注释了。有兴趣的可以自己下载去研究,如下: - /**********************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);
 - }. t. u- ?  s) a# s8 ~/ J
 
  $ M7 X1 `; v8 W* Q3 l) z 
 
& d& h& g/ _+ S, E2 E% {. K9 n |