串口通信线性学习笔记--基于江科大51单片机教程

单片机与各类设备进行数据传输需要用到串口(如电脑连接单片机需安装USB转串口驱动)简单的双向串口通信有两根通信线

一些截图

全双工:双方可以同时发送和接受

半双工:双方可以发送和接受,但不能同时

单工:只能由一方发送到另一方

异步:双方各自约定速率

例如

第一个脉冲约定读取时间短,第二个脉冲读取约定时间长,读出来数据就不一样

同步:双方靠一根时钟线(SCL)来约定速率

例如直接设定如果上升沿就是1,下降沿就是0再读取

总线:连接各个设备的数据传输总线路

我用的是89C52RC,从原理图上看只有一个UART(通信接口名称,上面表格有说)

波特率为串口通信速率,双方通信时约定一个间隔时间,例如:第一个脉冲约定读取时间短,第二个脉冲读取约定时间长,读出来数据就不一样

校验位,例如使用9位UART就是在8位后跟一位,多一位可以用来校验(奇偶校验就是如假设发送0011 1 靠后面的来检查前面的1的个数是否为奇数)

一个串口内部的图

SBUF这里是寄存器

很明显,中间这部分电路是控制约定速率的

上面则是发送,下面则是接受

发送数据和接受数据都会有相应的中断

如何配置串口

这里有两个控制寄存器

串行控制寄存器SCON和波特率选择控制寄存器PCON

SM0决定了是否检查错误

SM1决定了波特率是否可变

REN决定串口是否可以接收

TI请求中断用,方式0时因为是同步的,所以八位结束后自动置1请求中断,之后需自行复位为0,其他方式也同理

RI与发送同理,请求中断用,需自行复位

配置

例如方式1

SM0=0;//8位

SM1=1;//波特率可变

SM2=0;//方式一不需要用

REN=0;//不允许串口接受

TB8=0;//清0第9位

RB8=0;//接收到的停止位

TI=0;

RI=0;

实际应用可以直接配置SCON

SMOD 为1时方式1.2.3波特率加倍,为0时全部波特率加倍

SMOD0为1时开启帧错误检查,为0时关闭

所以这里这样配置

最后仍然是用软件配置

 

再利用给SBUF写数据来发送数据

启动后电脑就会接收到

直接把函数放入循环后会出现一个问题

发送的为66接收却为99

这可能是因为波特率的误差导致的

可以在后面加上Delay(1)

虽然发送的速度会变慢,但数据达到了精确

发送其它数值都可以通过改数据实现,同理

接收

这里的逻辑是只要电脑发送数据就进中断函数

这里因为要接收后进中断所以要打开

再设置一个中断函数

里面先判断是否为接收状态

如果是则点亮P2为接收的数据

然后把中断标志位复位

发送0xf2

如果想同时把接收的数据值返回

可以加上这部操作

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值