理论概念
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
不同型号的单片机使用的串口不同,根据需求选择相应的单片机,在有些场合如果单片机如果没有需要的串行通信接口,则可以通过单片机的I/O口进行模拟。
全双工UART(异步串行通信接口)
UART有两种工作状态:
同步串行通信状态:速率高,硬件电路复杂,需要同时使用两条信号线,所以只能使用单工方式或半双工方式工作。
异步串行通信状态:方式简单,传输速率不高,应用广泛,方便与其他通信标准进行衔接。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
异步传输工作方式:
传输效率较低,起始位,校验位,停止位占用的位较多
数据格式:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
同步传输工作方式:
双方同时使用两条通信线:
一条用于产生时钟并要求发送和接受的双方必须保持完全同步(一般情况下,时钟信号由发送端提供)。
另一条用于传送数据。
如果需要双向数据传输,需要再多添加两条通信线(MCS-51不支持同时的双向数据同步传输,只能使用分时复用)。
除了用于通信外,同步方式还可以用于I/O口的扩展,与74LS164联合使用时扩展成输出口,与74LS165联合使用时扩展成输入口。
因为没有附加起始位和停止位,所以传输效率较高
一旦发现数据出错,所有的数据都需要重新传输,大量数据一次性传输时错误的概率较高。
远距离通信时,通过调试解调从数据流中提取同步信号,用锁相的技术使接收方得到与发送方相同的时钟信号。时钟信号线与数据线分离可以实现高效率、大容量的数据通信。
数据格式:
————————————————————————————————————————————
使用方式
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
使用的寄存器:
串行接口寄存器 SCON:规定了串行通信的方式和功能,可以选择通信模式/允许接收/检查状态位
电源控制寄存器 PCON
SMOD = 0 波特率为原值;
SMOD为1 波特率提高一倍。
只有SMOD位对串口通信有影响
注:该寄存器不能进行位寻址,只能整字节操作。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
工作方式:
p.s.:UART有一个接收数据缓冲区,当上一个字节未被处理时下一个字节收入缓冲区。但如果在下一个字节接收完毕时前一字节还未处理,则上一个字节会被覆盖掉。因此软件必须在下一个字节接收完毕之前处理上一个字节(当连续发送字节时也是如此)。
用途:可以用来和某些具有8位串行口的EEPROM器件通信
原理:
RXD从低位开始收发数据,TXD从发送同步移位脉冲。
向SBUF写入字节时开始发送数据,发送完毕后TI位置位。
置位REN时,开始接收数据,接收完8位数据后RI位置位。
方式1:10位数据的异步通信口,波特率可变(与T1的溢出率有关)。RXD为数据接收,TXD为数据发送。
数据帧格式:
原理:
波特率计算装入TH1的初值:
p.s. SMOD=0时,K=1;SMOD=1时,K=2;
代码示例:
软件置REN为1时,接收器选择波特率为16倍速率采样RXD引脚电平,当检测到RXD引脚输入电平发生负跳变(1->0)说明起始位有效,移入输入移位寄存器并开始接收这一帧信息的其余位。需要手动清零
接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0且SM2=0(或接收到的停止位为1)时,接收到的9位数据的前8位装入接收SBUF,第9位(停止位)进入RB8并置RI=1,向CPU请求中断。RI需要手动清零
1 #include
2 main()
3 {
4 TMOD = 0x20;
5 SM0 = 0;
6 SM1 = 1;
7 REN = 1;
8 PCON = 0;
9 TH1 = 0xFD; //253=256-(1*11.0592*10^6)/(384*9600)
10 TL1 = 0xFD;
11 TR1 = 1;
12 P1 = SBUF;
13 while(!RI);
14 RI = 0;
15 SBUF = P1;
16 while(!TI);
17 TI = 0;
18 }
数据帧格式:起始位1位,数据9位(第9位在发送时为TB8,接收时为RB8)
原理:
代码示例:多机互联
发送开始时,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位D0到TXD引脚,每一个移位脉冲都使输出移位寄存器的各位向右移一位,并由TXD引脚输出。第一次移位时,停止位"1"移入输出移位寄存器的第9位,以后每次移位左边都移 入0。当停止位移至输出位时,左边其余位全为0,当检测到这一条件时,控制电路进行最后一次移位并置TI=1,请求中断。需要手动清零
接收数据时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失且不置位RI,继续搜索RXD引脚的负跳变。
1 TMOD = 0x20;
2 TH1 = 0xFD;
3 TL1 = 0xFD;
4 PCON = 0x00;
5 TR1 = 1;
6 SCON = 0xF8;
7 SBUF = 0x01;
8 while(!TI);
9 TI = 0;
10 P3_5 = 0;
11 SM2 = 0;
12 while(!RI);
13 RI = 0;
14 P2 = SBUF;
15 SM2 = 1;
16 P3_5 = 1;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
波特率的计算:
当T1用作波特率发生器时,最典型的用法是使T1工作再自动重装8位定时器方式(方式2),溢出率取决于TH1中的计数值
常见波特率对照表
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
串口通信初始化步骤:
确定T1的工作方式(编程TMOD寄存器)
计算T1的初值,装载TH1、TL1
启动T1
确定串行口控制(编程SCON寄存器)
在中断方式工作时进行中断设置(编程IE IP寄存器)
上一篇:51单片机入门 - 定时/计数器原理及结构(T0和T1)
下一篇:51单片机的主要组成结构分析详解
推荐阅读最新更新时间:2024-11-16 19:51
推荐帖子
- 关于对安捷伦 InfiniVison DSO-X2012A示波器操作功能改善建议
- 工作需要,也一直对安捷伦的仪器情有独钟,所以购买了这款示波器。然后工作中使用中,这款示波器有个操作我觉的非常有必要改善下,我只能用生不如死来形容我的使用感受,发这个帖子也是来吐槽下希望下一版的软件升级中能改善,因为只需要软件进行一点改动,即可大幅提升人性化的操作使用感受。简单描述下问题,在通道一测量菜单中,设置好各个测量参数,还有DVM功能显示的小窗口后,从一通道切换到显示二通道,我觉的正常的操作应该是示波器马上从一通道切换到显示二通道的测量结果,然后傻逼的是,你不仅需要重新设置Tri
- ylyfxzsx 测试/测量
- 请教:如何得知板子上网卡的mac地址?
- 我用别人做好的一个板子,需要知道上面网卡的mac地址。这个地址最初是怎么决定的?由出厂芯片还是做硬件的人制定的(好像说要根据时序烧录进去)?可以根据芯片查到么?如果是做硬件的人制定,而他当时就没有烧mac地址进去,是不是网卡就不能用?请各位不吝赐教。请教:如何得知板子上网卡的mac地址?1运行CMD2ipconfig/all就能看了由软件决定的
- shinesnow 嵌入式系统
- 还是那个物联网问题的后续问题
- 本帖最后由lidonglei1于2015-9-2410:21编辑 接着这个帖子:我想学习把单片机数据传到wifi模块,再传到服务器的数据库(虚拟服务器数据库)中。。。。。https://bbs.eeworld.com.cn/thread-473309-1-1.html虚拟服务器或云主机(新浪云SEA)好像都不提供socket的接口,就算提供了我在远端调试也不方便,有没有什么高端的方法能够通过类似网页进行数据交互,即单片机通过wifi发送数据到指定域名的网页,然后再根据网页内
- lidonglei1 综合技术交流
- 如何在ccs编写c程序,机械零件的分类及参数测量
- 如何在ccs编写c程序,机械零件的分类及参数测量如何在ccs编写c程序,机械零件的分类及参数测量问题太笼统了能详细点吗?littleming1028发表于2014-11-1120:09问题太笼统了能详细点吗? 数字图像处理方面。涉及到数字图像边缘提取,图像采集,参数测量等。
- nengneng3389 DSP 与 ARM 处理器
- 人造闪电
- 52岁的澳洲男子彼得·特伦是位业余科学家,他最大的爱好便是制作出形形色色令人眩目标“人造闪电”,最高电压可达50万伏!这些精彩绝伦的实验包含,闪电束穿过篮球架和梯子、旋转火花包围汽车、头顶闪电笼中信步,等等。据悉,特伦“触电”已有40个年头!闪电束穿过篮球架缭绕着汽车的闪电束缭绕着手提电脑的闪电束从头顶放射出去的闪电束人造闪电特斯拉线圈很诡异的感觉纯粹玩命做法请勿模仿这个,有想法……前些日子介绍了特斯拉线圈的做法,效果相当壮观,但是工程也相当浩大,造价挺高,并不是每人都能亲
- xyh_521 创意市集
- 大电流输出并联2个MOS管如何均流,MOS管所选封装是不是太小了?
- 看到一个汽车的PDU域控主板,上面有两路120A的输出是经过4个MOS管(用的是捷捷微电子的JMSH0601AGQ)背靠背2路并联实现的输出控制。两个问题:一是类似这种大电流输出如果一颗MOS不足以支持选用多个MOS并联使用,在导通时由于工艺误差的原因并联MOS的内阻可能不一致,这会导致2路MOS上分得的电流大小不一样,这样一来内阻小电流大的是否发热严重,会更容易损坏?类似这种环境多MOS管并联使用如何做到平均电流。二是选用的MOS封装是PDFN5x6-
- lkh747566933 汽车电子
设计资源 培训 开发板 精华推荐
- 使用 NXP Semiconductors 的 MC9S08LL64CL 的参考设计
- NCP59744MN2ADJGEVB:精密超低压差稳压器评估板
- DC1977A-A,用于 LTC4121EUD-4.2 VIN = 4.4V 至 40V、400mA 同步降压锂离子电池充电器的演示板
- LTC3442 锂离子至 3.3V 转换器提供 1.2A 电流,具有自动突发模式操作
- MC34072ADR2G 二阶低通有源滤波器的典型应用
- LTC4231 微功率热插拔控制器的典型应用
- 使用 MaxLinear, Inc 的 SP6653 的参考设计
- CN0384
- #第四届立创大赛#(完结)电调 (Electronic Speed Control 简称ESC)
- USB HID转串口CH9326_JX