找回密码
 注册
关于网站域名变更的通知
查看: 248|回复: 2
打印 上一主题 下一主题

学51单片机-UART口发送一个字符

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-10-8 09:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
UART口,又叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是单片机常用功能的一部分,也是早期台式电脑必备的一个硬件接口。
- r' Y6 m9 f& N- m: _    当年我调试UART口的时候,用的还是超级终端,现在都用串口助手了,比我们当时方便多了。
       UART口按位发送和接收字节,虽然相比于并口,慢了很多,但是在有限的IO资源面前,这种方式是非常可取的。
       UART口主要用于ASCII码的传输,传输过程遵循ANSI/EIA-232标准。ASCII码是啥?看下表:
       表格太大了,放不下,大家可以自己在网络上找到看一看。就是说,当我想发送字符“A”的时候,我要向串口发送十进制数65,或者十六进制数41。
       驱动电路主要有有两种,一种是基于MAX232这类芯片的:
       上图中,MAX232的10脚接到单片机的TXD上,9脚接到单片机的RXD上。

- n& l# Q9 h* U& V, r) o# {
       另一种以CH340或者PL2303这类芯片为主,因为电脑上的RS232接口越来越少,所以这类芯片使用USB转UART口的方式来实现,应用电路如下:
2 e! a! n7 q# C+ K
       通信过程中主要参数如下:
       波特率:传输速率,常用范围9600~115200.
       数据位:就是每次发送的这个数据有几位,常用的是8位,别的还有4、5、6、7.
       校验位:用来校验传输资料的正确性。
       停止位:是一个字符数据传输结束的标志,一般设为1位。
       波特率如何计算?
       方式1,3的波特率=1/32或1/16*计时器2的溢出率。
此处有一个公式:
) |1 X* `4 i- ?" j, T5 w" }波特率=1/16或1/32*(晶振的频率/12*(256-TH1))$ s9 l: J7 k5 [4 d$ b: S
代入:+ n6 h) t5 `# r% N/ [
9600=11059200/32*12*(256-TH1)& E' t2 i- G) A2 L+ e2 I4 R
TH1=TH0=FDH

1 l  H* v- F. n
       代码比较多,不贴出来了,已经加好注释了。有兴趣的可以自己下载去研究,如下:
  • /**********************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);
  • }" k- P1 g* T7 `. z' g) p
& D) T( R% a$ B$ v& u
- J5 E; M$ r1 w4 K- i2 W

UART1.zip

28.52 KB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-10-8 13:54 | 只看该作者
很多人容易把UART与RS232/RS485混为一谈。5 x' c. r$ f7 w/ A
区别在于,UART是一种接口,而RS232/RS485是一种总线。
6 P& P! k( U, I, eUART这个接口,后面可以接TTL电平,这就是我们俗称的普通的串口。而UART如果接了RS232/RS485的转换芯片,那么后面的总线上就是按照RS232/RS485规则来传输数据。

该用户从未签到

3#
发表于 2022-10-8 14:09 | 只看该作者
UART口、COM口指的是物理接口形式;- `6 V3 b4 G2 a8 Y
TTL、RS232和RS485指的是电平逻辑标准;
6 D' F" [" I$ T" U# UTTL电平和RS232电平转换专用芯片有MAX232,TTL电平转USB芯片有CP2102、PL2303、FT230,这些可以用USB来扩展串口数量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 19:29 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表