【C51自学笔记】串口通信+RS-232C接口+ RS-422A/RS-485接口
简介:
计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。
并行通信
串行通信
串行通信的异步通信
异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。
串行通信的传输方向
v单工是指数据传输仅能沿一个方向,不能实现反向传输。
v半双工是指数据传输可以沿两个方向,但需要分时进行。
v全双工是指数据可以同时进行双向传输。
串行通信的错误校验 :
1、奇偶校验
在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据
中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数
与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发
现不一致,则说明传输数据过程中出现了差错。
2、代码和校验
代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节
的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除
校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行
比较,相符则无差错,否则即认为传送过程中出现了差错。
3、循环冗余校验:CRC
这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常
用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,
广泛应用于同步通信中。
传输速率:
比特率是每秒钟传输二进制代码的位数,单位是:
位/秒(bps)。如每秒钟传送240个字符,而每个
字符格式包含10位(1个起始位、1个停止位、8个数
据位),这时的比特率为:
10位×240个/秒 = 2400 bps
RS-232C接口:
为了232的问题,引入422接口
RS-422A接口:
RS-485是一点对多点的通信接口,一般采用双绞线的结构。普通的PC机一般不带RS485接口,因此要使用RS-232C/RS-485转换器。对于单片机可以通过芯片MAX485来完成TTL/RS-485的电平转换。在计算机和单片机组成的RS-485通信系统中,下位机由单片机系统组成,上位机为普通的PC机,负责监视下位机的运行状态,并对其状态信息进行集中处理,以图文方式显示下位机的工作状态以及工业现场被控设备的工作状况。系统中各节点(包括上位机)的识别是通过设置不同的站地址来实现的。
终于到重点了:
单片机的串行口:
上下两个sbuf ,上为发送缓冲器,下为接收缓冲器。可以在cpu的控制下进行同时发送和接收。
SCON:特殊功能寄存器
//常用的是方式一
vSM2,多机通信控制位,主要用于方式2和方式3。接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。
vREN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
vTB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志。 在方式0和方式1中,该位未用。
vRB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。
vTI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。
vRI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。
(方式一中:初始化0101XXXX 最后两个xx:一个发送完数据清零,一个接收完清零)
方式1:
如何写入SBUF:SUBF = 0xff即可写入
从最低位开始发:例如:0x11 : 1-0-0-0-1-0-0-0
16倍速率:提高准确性。
当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。
波特率计算:(一般使用软件:51串口通讯计算器,一般使用晶振频率:11.0592M)
在串行通信中,收发双方对发送或接收数据的速率要有约定。
通过软件可对单片机串行口编程为四种工作方式,其中方式0和
方式2的波特率是固定的,而方式1和方式3的波特率是可变的,
由定时器T1的溢出率来决定。
串行口的四种工作方式对应三种波特率。由于输入的移位时钟
的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率
当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时
器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于
TH1中的计数值。
T1 溢出率 = fosc /{12×[256 -(TH1)]}
在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用
的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。
怎么使用串口:
v确定T1的工作方式(编程TMOD寄存器);
v计算T1的初值,装载TH1、TL1;
v启动T1(编程TCON中的TR1位);
v确定串行口控制(编程SCON寄存器)串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
#include <reg52.h>unsigned char a;
unsigned char flag;void main()
{//初始化//定时器TMOD=0x20; //设置定时器1为方式2TH1=0xfd; //装入初值(串口通信计算)TL1=0xfd;TR1=1; //启动定时器1//串口SM0=0; //设置串口为方式1SM1=1; REN=1; //接受使能(启动接收功能)//中断EA=1; //打开总中断开关ES=1; //打开串口中断开关while(1){if(flag==1)//如果中断发生{ES=0;flag=0;SBUF=a;while(!TI); //等待数据发送结束TI=0;ES=1;}}
}void serial() interrupt 4
{a=SBUF;P1=a;RI=0;flag=1; //标志位
}
【C51自学笔记】串口通信+RS-232C接口+ RS-422A/RS-485接口相关推荐
- FPGA自学笔记--串口通信发送多字节数据(verilog版)
1.需求分析 关于uart协议实现这部分大家可以参考我上一篇的博客.<FPGA自学笔记--串口通信实现(vivado&verilog版)>.在上一篇博客中,主要实现了将单字节的数据 ...
- C51的UART 串口通信
C51的UART 串口通信 1.串口通信简介 2.串口调试助手 3.串口通信的实现 4.UART模块 5.总结 6.实例 1.串口通信简介 UART(Universal Asynchronous Re ...
- C51单片机实现串口通信
这算是学习单片机的一个记录吧,惭愧毕业几年才开始捡起单片机. ---------------------------- 进行串口通信需要做以下工作: 1)打开CPU的总中断EA: 2)打开串口通信的中 ...
- STM8学习笔记---串口通信中如何自己定义通信协议
在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的.好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写.今天就来说一下如何串口通信协议是如 ...
- 单片机学习笔记 —— 串口通信原理
一.串口通信电路 电路图: 说明:当RXD TXD为低电平时,对应的led灯会亮起 二.串口通信控制寄存器 下图为80C51串行口的结构: SCON(serial Control Register): ...
- 【C51自学笔记】中断系统
中断 中断概念与中断触发: 中断的概念: CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生): CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务): 待CPU将事件 ...
- 兜兜的c51自学笔记-流水灯
时值2021暑假,兜某申请留校,开始51单片机学习之路. 正文开始之前,得感谢实验室学长的帮助 正文 c51对现在得我来说,就是一块可以被点亮得板子,从io口到寄存器,实际上我都是一知半解,那么我就从 ...
- s5pv210——串口通信的基础概念
以下内容源于朱友鹏<物联网大讲坛>课程的学习,如有侵权,请告知删除. 总结 1.同步异步:是否同一时钟,数据格式 2.电平信号.差分信号:有无参考电平(有,无) 3.串行接口和并行接口:信 ...
- fpga板子怎么和电脑连_FPGA与PC串口通信设计与实现
FPGA 与 PC 串口通信设计与实现 朱泽锋 1 赵丹辉 2 王鹏宇 1 [摘 要] 本文采用 Verilog 硬件描述语言,利用 Xilinx 公司的 FPGA 芯片实现 其与 PC 间的串行通信 ...
- 【正点原子MP157连载】 第十六章 UART串口通信实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
最新文章
- IDEAWebstorm使用
- jQuery超炫酷按钮插件及源码
- javascript --- ES6模块与CommonJS模块的差异
- 初步认识java中的方法
- mysql+after+commit_P8级面试难题,after_sync vs after_commit,哪个性能更好?
- 数据库-临时表和复制表
- TreeMap按照value进行排序
- Perhaps you should add the directory containing libpcre.pc to the PKG_CONFIG_PATH
- 原生JS成语接龙小游戏
- java菜鸟教程+视频笔记
- python查询电脑序列号 CPU、主板、硬盘、MAC、BIOS
- 【尚硅谷】JavaScript基础实战丨JS入门到精通_01-06
- java dwg转pdf_java实现CAD图纸文件DWG格式转为PDF格式
- Python3,9行代码进行压缩和解压缩,从此告别压缩软件。
- 组合导航(九):三维简化的INS/GPS组合导航系统
- 三级网络技术--宽带接入技术--无线接入技术、光纤接入技术
- Dev-C++下的char字符数组strlen()诡异事件
- 如何用美剧真正提升你的英语水平?
- 集合框架的理解与总结
- [windows]VS2015配置Lemon图论算法库
热门文章
- SpringBoot 集成 Prometheus
- 【苹果登录】使用Apple账号登录你的APP(服务端原理介绍+Java实现)
- JSP页面中中EL表达式显示异常的问题【已解决】
- three.js入门二:相机的zoom参数
- 食品添加剂健康小助手系统的设计与实现 tp+mysql后台
- SR2CNN Zero-Shot Learning for Signal Recognition(SR2CNN:用于信号识别的零试学习)
- 两步路轨迹文件位置_两步路软件如何将轨迹导出成3D的动态轨迹?
- 二分插入排序算法、二分检索、随机数(桂电漓江学堂数据结构C5)
- Kali Linux解决有线网络托管问题
- Facebook 应用未启用:这款应用目前无法使用,应用开发者已得知这个问题。