UART串口通信

2023-05-16

什么是串行通信?

将数据字节分成一位一位的形式在一条传输线上逐位地发送。

优点:成本低,控制复杂。

什么是异步通信?

异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信的两个关键:

第一,数据单元——帧,它是双方约定好的数据格式;

第二,波特率,它决定了‘帧’里每一位的时间长度。

异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加23位用于起止位,各帧之间还有间隔,因此传输效率不高。

 

80C51单片机串口通信

控制寄存器SCON

SM0SM1为工作方式选择位,可选择四种工作方式:

SM2,多机通信控制位SM2=0时,不论收到的RB801,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。过控制SM2,可以实现多机通信。

REN允许串行接收位。由软件置REN=1,则启动串行口接收数据;

TB8在方式0和方式1中,该位未用。

RB8在方式1时,若SM2=0,则RB8是接收到的停止位。

TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。

RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

PCON中只有一位SMOD与串行口工作有关 : 

SMODPCON.7)  波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0

 

方式110位数据的异步通信口______代码实践内容大笑

TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。

输出时序图:

输入时序图:

用软件置REN1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。

 

波特率的计算:

在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。

至于如何计算波特率,我就不分析了,都是公式,看着烦人,查表就可以了!

在单片机的应用中,常用的晶振频率为:12MHz11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示

 

 

工作方式1的代码如下:(采用KeilC μVsion4编译)

/*
简介:
工作流程:
通过“串口助手”发送数据,经串口送至51单片机,51单片机收到数据后,发送数据给电脑,显示在“串口助手”!
实际效果:当给单片机发送整数(0~255),单片机返回ch,ch的值每次自增1,当ch为99时,ch重新置0
版本:1.0
完成日期:2012-7-3 17:39
作者:黄路
*/
#include <reg51.h>
#define uint unsigned int 
#define uchar unsigned char

uchar re = 0;

bit read_flag = 0 ;//取数标志位 

void init_serialcom( void ) //串口通信初始设定
{ 
    SCON = 0x50 ;   //UART为模式1,8位数据,允许接收  0101 0000
    TMOD |= 0x20 ; //定时器1为模式2,8位自动重装		  0010 0000
    PCON |= 0x80 ; //SMOD=1; 						  1000 0000
    TH1 = 0xFD ;   //Baud:19200 fosc="11".0592MHz 	  1111 1100
    IE |= 0x90 ;     //Enable Serial Interrupt 		  1001 0000
    TR1 = 1 ;       // timer 1 run 
} 

//向串口发送一个字符 
uchar send_char_com(uchar ch) 
{ 
    SBUF = ch;
	ch++;
	if (ch == 99)
	{
		ch = 0;
	} 

    while (TI == 0);//数据发送后,TI由硬件置1 
    TI = 0 ;        //必须由软件清零
	return ch;
} 

//串口接收中断函数 
void serial () interrupt 4 using 3 
{ 
    if (RI) //当接收到数据后,由硬件自动置位
	{ 
        RI = 0 ; 
        re = SBUF;  //收到的数据           
        read_flag = 1; 
    }
} 

int main() 
{ 
	uchar ch;
    init_serialcom(); //初始化串口 
	//关闭不用的数码

    while ( 1 ) 
    { 
		if (read_flag == 1) //如果取数标志已置位,就将读到的数从串口发出 
        {
        	read_flag = 0 ; //取数标志清0 
			ch = send_char_com(ch); //发送可以被接收的中断所中断		
        } 
    } 
} 


 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UART串口通信 的相关文章

  • STM32串口溢出中断问题

    之前调试程序 遇到了串口溢出中断的问题 导致主程序被卡死 这里总结分享一下经验 希望对读者有用 对于STM32F103系列单片机 使能接收中断后 溢出中断就会自动被使能 那什么时候会发生溢出中断呢 在RXNE 1 的的条件下 也就是上次数据
  • UART通信原理

    UART 通信格式 串口全称叫做串行接口 通常也叫做 COM 接口 串行接口指的是数据一个一个的顺序传输 通信线路简单 使用两条线即可实现双向通信 一条用于发送 一条用于接收 串口通信距离远 但是速度相对会低 串口是一种很常用的工业接口 I
  • 485通讯与MODBUS的区别与联系

    最近做智能检测的项目 设备 串口之间的通讯比较多 一会儿485 一会儿modbus RTU 有点晕了 这里重新梳理一下RS485 485通讯协议 ModBus通讯协议 Modbus Rtu通讯这几个点的联系和区别 先说RS485吧 RS48
  • CSerialPort教程4.3.x (1) - CSerialPort项目简介

    CSerialPort教程4 3 x 1 CSerialPort项目简介 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Java Python Node
  • stm32F103C8T6控制DHT11

    stm32F103C8T6控制DHT11串口打印 stm32F103C8T6控制DHT11串口打印学习经验总结 本人借鉴了许多大佬们的资料 这是个人学习的见解 如发现错误之处 麻烦指导指导 借鉴链接 https blog csdn net
  • 8086CPU外部引脚图

    8086CPU外部引脚图 在最小模式中引脚定义 AD15 AD0 Address Data Bus 16位地址 数据总线 分时复用 传输地址时三态输出 传输数据时三态双向输入 输出 在总线周期T1状态 CPU在这些引脚上输出存储器或I O端
  • 获取windows中活跃的Com口

    获取windows中活跃的Com口 记录于2021年11月9日 今天对我来说是个很特殊的一天 母胎SOLO二十一周年 无奈 Orz 闲暇之余写下此文章 记录一下我的日常 文章目录 获取windows中活跃的Com口 前言 一 如何寻找活跃C
  • 什么是节点光端机?总线型光端机有哪些优势?

    节点式光端机又称总线型光端机 其准确的定义是采用单 双纤链路式组网形式的图像传输系统 也被称为链路式光端机 那么 节点式光端机具体是什么呢 总线型光端机又有哪些优势呢 接下来我们就跟随飞畅科技的小编一起来详细了解下吧 什么是节点光端机 节点
  • STM32F031串口(RS485)中断+DMA发送(预备知识)

    STM32F031串口 RS485 中断 DMA发送 前言 GPIO移植过程 与F1系列的一些区别 串口 DMA 前言 最近在搞STM32F031的项目 F0系列与常用的F1系列有一定区别 在开发过程中遇到一些问题 而且花了好长花间在搜寻解
  • 使用HAL库开发STM32:UART基础使用

    文章目录 目的 基础说明与初始化 基础说明 初始化 数据接收和发送 轮询方式 中断方式 DMA方式 其它说明 总结 目的 UART 异步串口 是单片机非常常用的一个功能 一般用作设备或模块间通讯的一种方式 通常所说的232或是485通讯从写
  • QT Modbus RTU调试助手(包含算法实现CRC MODBUS16校验)

    QT Modbus RTU调试助手 在类构造函数中将UI初始化和串口对象定义以及查找串口 串口设置 串口接受 QT延时函数 CRC校验 发送串口数据函数 总结 在类构造函数中将UI初始化和串口对象定义以及查找串口 foreach const
  • OUT指令时,就进入了I/O端口读写周期

    1 译码电路的输入信号 每当CPU执行IN或者OUT指令时 就进入了I O端口读写周期 此时首先是端口地址有效 然后是I O读写控制信号 IOR和 IOW有效 把对端口地址译码而产生的译码信号同 IOR和 IOW结合起来一同控制对I O端口
  • QT开发遇到的问题(1)——程序循环执行的问题

    我之前一直直接用C 开发工程 有需求需要跨平台开发 前期使用时候感觉还可以 转到工程应用时候 就遇到好多坑 今天就遇到个大坑 在开发时候需要不断循环一块代码来实现某种功能 QT不像C 那种 这个更加专业 下面我对这个问题进行详细说明分析 问
  • Linux系统下使用socat将串口映射到TCP服务器端口

    首先需要安装socat 安装方法即是 apt get install socat 或 yum install socat 然后使用以下命令进行映射 socat TCP LISTEN 8899 fork reuseaddr FILE dev
  • USB转串口那些事儿—USB转串口工作原理及应用

    一 简介 USB转串口即实现计算机USB接口到物理串口之间的转换 可以为没有串口的计算机或其他USB主机增加串口 使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备 USB虚拟串口应用特点 USB应用广泛 支持热插拔 传输速
  • Android usb通信 实现app与arduino通信demo

    Android usb通信 一 前言 二 开始 1 AndroidManifest xml清单文件 2 创建权限广播接收者 3 枚举usb设备 4 获取usb接口以及输入 输出端点 5 打开设备 6 设置波特率 7 创建接收数据的线程 8
  • Gem5 中与 ARM 裸机的 UART 通信

    我目前正在使用 Gem5 我必须通过 UART 从我的主机访问 ARMv8 裸机选项 所以我尝试了很多方法 但我还没有准备好 您能否让我知道 如何在裸机类型编程中将主机的串行端口映射到 ARMv8 的串行端口 任何帮助 将不胜感激 工作设置
  • 从 Linux 用户空间设置 16550A UART 硬件 FIFO 中断级别

    我目前正在使用 16550 兼容的 UART 并且我希望能够更改 FIFO 中断触发级别 我在高 UART 负载下丢失字节 并且我想降低阈值 这是一个动力不足的嵌入式系统 当然 如果我愿意 我可以在 8250 port c 驱动程序中更改它
  • IOError:[Errno 2]没有这样的文件或目录(当它确实存在时)Python [重复]

    这个问题在这里已经有答案了 我正在通过 python 中的 uart 传输文件文件夹 下面您可以看到简单的功能 但有一个问题 因为我收到如标题所示的错误 IOError Errno 2 No such file or directory 1
  • 如何在R中从串口读取数据

    我想绘制来自串行端口的实时数据 我认为 R 将是完成这项工作的好工具 我在尝试从串行端口 COM4 读取数据时遇到了困难 我已经验证数据是通过 terra term 传入的 并在尝试 R 之前关闭会话 但我似乎无法在 R 中获取任何内容 我

随机推荐

  • 嵌入式系统应用开发实验(一)

    文章目录 一 设计半加器二 半加器组成全加器三 烧录进硬件 实验目的 xff1a 通过1位全加器的详细设计 xff0c 掌握原理图输入以及Verilog的两种设计方法 软件基于quartusII 13 0版本 xff0c 开发板基于Inte
  • 关于浏览器以及各种内置浏览器造成黑屏的解决办法

    楼主在使用Chrome Edge浏览器甚至Steam时经常会发生网页还没打开就会发生 浏览器黑屏 电脑黑屏 自动重启 的过程 xff0c 困扰许久 网上的大部分教程是在浏览器设置里面关闭 硬件加速 功能 甚至于重装系统 但是经过实测 xff
  • 【FFTW库】编译生成 x86、arm 环境下的FFTW库

    FFTW是一个快速计算离散傅里叶变换的标准C语言程序集 xff0c 可计算一维或多维实和复数据以及任意规模的DFT 下面主要介绍的是 x86 环境下 FFTW库的编译过程 xff0c arm环境下的编译过程和FFTW类似 xff0c 不同之
  • C语言学习笔记w2d4

    文章目录 流程控制二循环语句gotowhile练习 do whilefor breakcontinue 作业 流程控制二 循环语句 循环的开始条件 循环的控制条件 循环的结束条件 goto 无条件跳转 xff0c 跳转到指定位置执行 xff
  • C语言学习笔记w2d5

    文章目录 数组一维数组练习字符数组字符串输入与输出 练习 多维数组 作业 数组 一维数组 用一个变量来存储具有一定关系的数据 xff0c 的数据集合叫数组 其中存储的变量是数组元素 a span class token punctuatio
  • Linux基础与C高级w3d4:linux的文件管理(续)、了解shell编程

    管道 作用 xff1a 把一个命令的结果作为另一个命令的输入参数 符号 xff1a 用法 xff1a ls grep test 用户管理 切换用户 xff1a su 用户名 修改用户密码 xff1a sudo passwd 用户 注册用户
  • ARM:day4

    ARM 的接口技术 裸机编程 例 xff1a LED灯 根据电路图找到 LED 找到控制的管脚 GPX2 7根据芯片手册 找到需要配置的地址空间地址 和使能值写汇编代码 编译工具 arm gcc 安装方式 把 bin 添加到PATH bas
  • ARM:day5

    ARM 的接口技术 串口 UART 工作模式 全双工发送二进制 ASCII码 两个设备通过各自的定时器来接收数据 空闲时拉高电平 要开始发数据时起始位拉低 0 发数据 一般是 8 位带一位校验位 结束发送 拉高电平回到空闲状态 缺点 特点
  • Ubuntu上igraph的安装教程

    暑假终于到了 xff0c 距离上一篇博客应该有3个月的时间了 xff0c 没有学期末的忙忙碌碌 xff0c 接下来会陆陆续续地回顾自己学过的和将学的东西一并整理成博客 关于igraph 因为课程需要 xff0c 在信息资源管理的课程上曾学过
  • 还在按鼠标调试?键盘F1-F10取消Fn快速调试

    传统功能键 xff1a F1 F12媒体功能键 xff1a 音量 xff0c 亮度 xff0c 锁屏 xff0c 飞行模式等 多数电脑 xff0c 或者有些升级为win10的电脑 xff0c 传统功能键变为了媒体功能键 xff0c 开发人员
  • Jupyter Notebook+VSCode环境搭建及原理讲解

    版权所有 xff0c 转载注明原地址 时间 xff1a 2020年1月17日17 33 15 created by xff1a Hpbbs 使用JupyterNotebook编辑 文章目录 0x00 前言 Python命令行模式的单一与Ju
  • Rust 安装,卸载,nightly/stable版本切换(全局或工作空间),提高下载速度

    版权所有 xff0c 转载前注明原址 时间 xff1a 2020年1月26日20 10 44 created by xff1a Hpbbs 文章目录 1 1 安装1 2 卸载1 3 更新1 4 Rust镜像源切换1 5 Rust night
  • Sql to Object VS Sql of Object

    文章目录 Java Object 中的 setter 与 getterLINQ 的定位 xff1a sql to objectSql of Object 的思维提出SQL of object 43 er实现SQLer Java Object
  • Ubuntu 桌面版无网络标识

    Ubuntu 配置网络的方式有两种 xff1a 通过桌面网络标识直接配置通过编辑配置文件配置 xff08 很麻烦 xff0c 而且不方便 xff09 因此 xff0c 下面介绍如何恢复桌面的网络标识 xff0c 以便于后续的网络配置 目录
  • repo sync 会自动切换本地分支与remote 分支的对应---如何自定义这种行为

    日后再写
  • [BugFix] [Android] DownloadManager使用流程问题导致的 下载下来的文件找不到

    DownloadManager使用流程错误导致的无法找到下载完成的文件 1 问题描述2 问题解决3 解决后的思考5 场景利用 1 问题描述 先提交 enqueue 请求 xff0c 后配置 DownloadManager span clas
  • View.post VS Handler.post的区别和使用场景对比

    View post 当对应的Widget View 没有attach到window的时候 xff0c 对应的Runnable会被提交到 ViewRootImpl RunQueue xff0c 如果已经attach的话 xff0c 会提交给U
  • Android 数据库安全:用户退出后,事务回滚日志依然保存有相关的数据信息

    详情 xff1a data data package name databases dday db data data package name databases dday db shm data data package name da
  • 关于IPhone无法收发短信---设置iphone短信中心号码

    这是个人拨打客服所收到解决短信 xff1a 尊敬的客户 xff0c 您好 xff01 如您反映的问题未解决或还有其他手机问题 xff0c 您可直接关注终端服务基地的官方微信公众号 xff1a cmcczdfw xff0c 随时随地获取便捷终
  • UART串口通信

    什么是串行通信 xff1f 将数据字节分成一位一位的形式在一条传输线上逐位地发送 优点 xff1a 成本低 xff0c 控制复杂 什么是异步通信 xff1f 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程 为使双方的