串口通信及中断

2023-11-13

异步通信:发送和接收数据的双方用各自的时钟控制数据的发送和接收,为降低数据传输的错误率要求双方时钟尽可能一致。异步通信以帧为单位传送数据,由于每帧数据都具有起始位和停止位所以两帧数据之间的间隔时间不影响数据传送和接收的准确率,但是每帧数据内的各个二进制位间是以固定时间间隔传输的,即每个二进制位都有固定的传输速率,这个速率即为比特率,当一个码元仅表示0和1两种状态时(通信中常用时间间隔相同状态来表示一个二进制数字,这样的信号称为码元,而波特率表示每秒钟传输了多少个码元),一个码元等于一个二进制比特位,此时波特率与比特率大小相同,若是发送和接收双方的波特率不同,则会导致数据出现偏差。

同步通信:发送方和接收方的时钟完全同步,此时传输的数据帧间不留间隙

全双工通信:收发双方设备能同时实现数据的发送和接收(同时双向传输)

半双工通信:收发双方可实现双向数据传输,但同一时间段内只能实现单向传输,即收发不能同时进行

单工通信:收发双发只能实现数据单向传输

               

               全双工                                               半双工                                         单工

通信速率:通常以比特率来表示通信速率,当一个码元仅表示两种状态,例如0和1时,可用波特率来表示比特率,此时也可用波特率直接表示通信速率。

串口内部结构 

串口相关寄存器的配置

SCNO(串口控制寄存器)

SM0和SM1用于选择串口的工作方式

SM2用于多机位通信,主要用于方式2和3,而最常用的是方式1,此处不做过多解释。

REN:允许串行接收位,当REN=1时,启动串行口接收数据,当REN=0时,拒绝串行口接收数据

TB8和RB8均用于方式2和方式3中

TI:发送中断标志位,在数据传输过程中,当串行发送停止位开始时,由内部硬件置TI=1,并向CPU发出中断请求,进入中断程序并在数据发送完成后,需将TI软件置0,来结束中断请求,以便发送下一个数据

RI:接收中断标志位,在数据接收过程中,串行接收停止位的中间时,由内部硬件置1,向CPU发送中断请求,进入中断程序后,需将RI用软件置0,结束中断请求,以便接收下一个数据

PCNO(电源控制寄存器,可位寻址)

SMOD:波特率倍增位,当SMOD=1时,波特率提高一倍 

定时器1的配置(8位自动重装)

在选定波特率后,根据晶振频率和是否倍增波特率用相关计算器算出TH1和TL1的初值

例如:设置串口工作方式1,波特率位9600,波特率不倍增,使用中断的配置程序

#include <regx52.h>

void UART_Init()      9600bps@11.0592MHz
{
	TMOD &= 0x0F;     //高四位清零,低四位不变,其目的为在不改变定时器0的状态下配置定时器1
	TMOD |= 0x20;     //高四位置为0010,低四位不变,其目的为选择定时器1位工作方式2(8位自动重装计时器)
	SCON = 0x50;      //选择串口工作方式为10位异步收发器(8位数据),波特率可变
	PCON &=0x7F;      //波特率不倍速
	TH1 = 0xFD;
	TL1 = 0xFD;
	ET1 = 0;          //关闭定时器1的中断允许
	EA = 1;           //打开总中断
	ES = 1;           //打开串口中断允许
	TR1 = 1;          //打开计时器1;
}


//void UART() interrupt 4      //串口中断
//{
//	unsigned char Byte;      
//	RI=0;                    //清除接收中断标志位
//	Byte=SBUF;               //接收SBUF中的数据
//		                     //用接收到的数据执行相应操作
//}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口通信及中断 的相关文章

随机推荐

  • Nginx 重写功能(location / rewrite)

    这里写自定义目录标题 一 nginx rewrite概述 1 概述 2 Rewrite跳转场景 3 Rewrite跳转实现 4 Rewrite实际场景 二 Nginx常见模块 三 常见的Nginx正则表达式 1 正则的优势 2 正则的作用
  • shell 多个引号冲突_请教Linux shell命令中双引号与单引号嵌套的问题

    addr 192 168 0 111 echo addr 结果为 192 168 0 111 echo addr 结果为 addr 这两个我还可以理解 1 双引号内的单引号功能被关闭 反之亦然 2 双引号内的 功能被保留 单引号 addr
  • fatal: Authentication failed for ‘https://github.com

    记录在本地电脑建立与GitHub连接时遇到的错误 附上解决方案 git clone 遇到的错误 remote Support for password authentication was removed on August 13 2021
  • osx 常用defaults命令

    defaults命令用来对mac os x系统进行某些设置 常用命令 查看所使用的defaults命令 history grep defaults 分类查看defaults命令 history grep defaults write his
  • JavaScript数据结构——字典(Dictionary)

    概念和结构 字典里面的元素都是一个键 key 值 value 对 字典里面的元素的键 key 不能重复 值 value 可以重复 字典的操作 字典有八种常用操作 分别为 检查键是否存在 has key 添加元素 set key value
  • js 搜索模糊匹配

    searchvalue list keyWord if keyWord var reg new RegExp keyWord var arr for var i 0 i lt list length i if reg test list i
  • Java8-对List转换Map、分组、求和、过滤

    前言 在java8之后我们list转map再也不用循环put到map了 我们用lambda表达式 使用stream可以一行代码解决 下面我来简单介绍list转map的几种方式 和转为map后对map进行分组 求和 过滤等操作 正文 数据准备
  • C#实现百度地图附近搜索&调用JavaScript函数

    前一篇文章 C 调用百度地图API入门 解决BMap未定义问题 讲述了如何通过C 调用百度API显示地图 并且如何解决BMap未定义的问题 这篇文章主要更加详细的介绍百度地图的一些功能 包括附近搜索 城市搜索 路线规划 添加覆盖物等等 希望
  • ipv6的链路本地地址

    目录 简介 先决条件 要求 使用的组件 规则 配置 网络图 配置 验证 检验 OSPF 的配置 正在验证的链路本地地址可接通性 ping从远程网络的链路本地地址 直接ping从连接的网络的链路本地地址 相关信息 简介 本文目的将提供对在网络
  • Qt漂亮界面

    Qt漂亮界面 功能规划 一 去掉菜单栏和工具栏 二 顶部导航栏的设计 appinit h头文件 appinit cpp的文件 使用方式 三 阵列按钮的点击事件写法 四 重写缩写界面 放大界面和关闭程序事件 五 鼠标事件的处理 Qt大量同类控
  • mysql数据库内容导出,MySql数据库导出

    Navicat Premium Data Transfer Source Server 刘文鹏 Source Server Type MySQL Source Server Version 50540 Source Host 127 0 0
  • 关于X79主板至强E5 CPU安装ArchLinux的记录

    最近想在家里搭网站 打算弄两台服务器 一个是旧机器x79主板的 作为AI绘图和Chatglm部署用 一个新买的是带有N5095的小板子 装了CentOS7来当web服务器 当作前置服务器 主要为外网提供服务 装CentOS7比较简单容易 所
  • TransFusion:利用 Transformer 进行鲁棒性融合来进行 3D 目标检测

    Query 初始化 Input dependent 以往 Query 位置是随机生成或学习作为网络参数的 而与输入数据无关 因此需要额外的阶段 解码器层 来学习模型向真实对象中心移动的过程 论文提出了一种基于center heatmap 的
  • VC6.0使用教程

    使用之前我们先准备一段代码 include
  • C#将依赖的DLL文件集成到EXE内部

    使用场景 C 写的一些小程序 为了方便传播 减少传播文件数量 将依赖的DLL文件集成到EXE内部是必要的 解决方案 打开 管理NuGet程序包 在浏览中搜索 Costura Fody 点击 安装 按钮 等待下载依赖及安装完成 重新编译软件
  • 操作系统7-信号量与管程

    回顾一下 并发问题 多线程并发导致资源竞争 同步概念 1 协调多线程对共享数据的访问 2 任何时刻只能由一个线程执行临界区代码 确保同步正确的方法 底层硬件支持 高层次的编程抽象 锁 信号量是锁机制在同一层上的高层抽象编程方法 一 信号量s
  • html如何设置网页的背景图片

    div div
  • Web安全面试题之-信息搜集(1)

    1 信息收集如何处理子域名爆破的泛解析问题 根据一个不存在的子域名的解析IP 来记录获取黑名单 IP 在爆破字典时 如果解析的IP在这个黑名单中 则默认跳过 如果不存在 我们则入库处理 还有一种泛解析的爆破处理方式是根据TTL来做判断 我们
  • 【Linux基础及shell脚本】Shell脚本中变量的使用

    文章目录 1 Shell变量基础 1 1 什么是变量 1 2 如何在Shell中定义和使用变量 2 Shell环境变量 2 1 什么是环境变量 2 2 环境变量与普通变量的区别 2 3 如何查看 设置和删除环境变量 3 Shell位置参数
  • 串口通信及中断

    异步通信 发送和接收数据的双方用各自的时钟控制数据的发送和接收 为降低数据传输的错误率要求双方时钟尽可能一致 异步通信以帧为单位传送数据 由于每帧数据都具有起始位和停止位所以两帧数据之间的间隔时间不影响数据传送和接收的准确率 但是每帧数据内