建网站要注意的细节,wordpress设置更改,适合小县城开的加盟店,建立健全目录
串口介绍
通信的基本概念
并行通信和串行通信
同步通信和异步通信
串行异步通信方式
串行同步通信方式
通信协议
单片机常见通信接口
串行通信三种模式
串口参数
传输速度
串口的连接
电平标准
串行口的组成
串口数据缓冲寄存器
串行口控制寄存器
串口…目录
串口介绍
通信的基本概念
并行通信和串行通信
同步通信和异步通信
串行异步通信方式
串行同步通信方式
通信协议
单片机常见通信接口
串行通信三种模式
串口参数
传输速度
串口的连接
电平标准
串行口的组成
串口数据缓冲寄存器
串行口控制寄存器
串口工作方式
电源控制寄存器
单片机内部串口模式图
波特率发生器
T1初值的设定
fosc采用11.0592MHz的原因
晶振频率和波特率初值对照表
串行口的初始化编程
串口通信案例
keil文件 串口介绍
串口是一种应用十分广泛的通信接口串口成本低容易使用通信线路简单可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块的相互通信极大的拓展了单片机的应用范围增强了单片机系统的硬实力51单片机内部自带UART通用异步收发器可实现单片机的串口通信
通信的基本概念
含义通信就是两个设备之间进行的数据传输。
并行通信和串行通信
并行通信在同一时刻可以传输多个bit位的信号有多少信号位就需要多少根信号线。串行通信同一时刻只能传输一个bit位的信号只需要一根信号线。 注意
并行通信的传输速率比串行通信块但是稳定性不如串行通信好。并行传输要传输8位数据需要8根线串行传输仅需要1根并行结合传输快的特点多用于板子内部串行多用于板子外部
同步通信和异步通信
前言串行通信按信息的格式又可以分为异步通信和同步通信两种方式。
串行异步通信方式
理解异步通信是指数据传送按位发送基本以一个字符为单位字符与字符之间的传送是完全异步的一个字符中位与位之间的传送基本上是同步的。 注意异步通信要求双方要有相同的传输速度波特率才可以通信。
串行同步通信方式
理解同步通信是指数据传送以数据块一组字符为单位字符与字符之间字符内部的位与位之间都同步。时钟同步 注意同步通信过程中双方都要有时钟引脚双方的2个时钟clk引脚是连在一起的通信时由主机传送时钟信号提供同步脉冲双方要根据这个时钟信号来确定发送或接收每个位确保数据传输时完全同步。
通信协议
前言沟通的双方需要遵守一套既定的规则这就是通信的协议。
硬件层协议硬件层面是指设备的物理结构和接口包括了连接线、接口类型、信号电平等。这些因素决定了设备之间如何进行物理连接以及如何传输和接收数据。软件层协议软件层面是指设备上的操作系统和应用程序规范它们负责管理和控制设备的硬件资源以及实现与其他设备的通信。
注意
硬件层协议和软件协议之间要相互配合工作比如要使用Motobus RTU协议那硬件接口就要使用RS232或者485等。单片机与计算机两边设备通信协议不统一一边是USB另一边UART这样就不能直接对接因此需要加上CH340芯片进行翻译CH340的作用就是把计算机传到USB口的数据信号通过一定的转换传到单片机UART串口的TXD和RXD引脚如此单片机的CPU就能解读计算机传过来的数据了
单片机常见通信接口 注意
此外还有CAN、USB等接口。同步传输的都带有时钟信号线SCL、SCLK
串行通信三种模式 单工通信在一个信道内信号只能往一个方向传输任何时候都不能改变信号的传输方向半双工在一个信道内信号可以双向传输但必须是交替进行同一个时间只能往一个方向传输全双工一个信道同一时间允许双向进行数据的传输
注意MCS-51单片机具有一个异步全双工UART串口可以同时发送、接受数据发送接收数据可通过查询或中断方式处理使用十分灵活。
串口参数
波特率串口通信的速度发送和接收各数据位的间隔时间检验位用于数据验证停止位用于数据帧间隔 注意
9位数据格式中最后一位为校检位。串口通信为串行通信也就是数据位是一个个的发出去先发低位后发高位若有校验位也会发校检位最后跟个停止位
传输速度
波特率单位时间内传输了多少码元单片机中采用二进制码元因此码元就是0或1所以可以理解——波特率是指串行通信中单位时间内传输了多少二进制位数单位bps。比特率每秒传输了多少二进制位数码元数据传输过程中等时出现的符号在单片机中波特率和比特率代表的意义相同但在其他领域不一定相同。 波特率bps一个字符的二进制位数*字符个数/秒 总结
每秒传送200个字符每个字符1位起始位8个数据位1个校检位和1个停止位。则波特率为2200bps。波特率越大传输速度越快但是每个芯片都有它能运行的最大波特率超过了则反应不过来。所以对于同一个芯片其波特率越大传输速度越快但是也使得传错率增大。
串口的连接 简单双向串口通信有两根通信线发送端TXD和接收端RXDTXD和RXD要交叉连接当只需要单向数据传输时可以直接一根通信线当电平标准不一致时需要加电平转换芯片
电平标准
含义电平标准是数据1和数据0的表达方式是传输线缆中人为规定的电压与数据的对应关系串口常用的电平标准有以下三种。
TTL电平5V表示10V表示0单片机使用RS232电平-3—— -15V表示13——15V表示0RS485电平两线压差2——6V表示1-2—— -6V表示0差分信号
串行口的组成
MCS-51单片机串行口主要由发送数据寄存器、发送控制器、输出控制门、接收数据寄存器、接收控制器、输入移位寄存器组成。从用户使用的角度它由三个特殊功能寄存器组成发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF串行口数据寄存器串行口控制寄存器SCON和电源控制寄存器PCON
串口数据缓冲寄存器
SBUF物理上是两个独立的寄存器读和写有各自的缓冲寄存器但是占用相同的地址。写操作时写入的是发送寄存器读操作时读出的是接收寄存器两者不会冲突。
串行口控制寄存器 SM0和SM1串行口工作方式选择位用于选择4种工作方式。SM2用于多机通信当需要多机通信时该标志位置一REN是否允许单片机进行接收当需要单片机进行接收时该位置1否则置0TB8和RB8分别表示发送和接受的第九位当我们配置方式2和方式3的这种工作方式时我们需要配置该位TI和RI为发送和接受的中断标志位TI为发送标志位RI为接收标志位这两位不会自动清零需要我们手动清零
串口工作方式 方式0称为同步移位寄存器方式一般用于外接移位寄存器芯片扩展IO接口方式18位异步通信方式通常用于双机通信方式2和方式39位的异步通信方式通常用于多机通信
电源控制寄存器 注意当SMOD位为1时波特率加倍。
单片机内部串口模式图 理解单片机与电脑发送异步串口数据的时候需要规定发送和接受的速度也就是波特率电脑可以通过串口助手设定波特率而单片机设定波特率就需要设定T1相对于单片机来说它发送数据首先要将数据写入SBUF中当发送完成后TI会置1引发串口中断进而执行对应的操作当单片机接收外部发送的数据那么就会先将外部数据缓存至SBUF中当接收完成后RI位会置1引发接收中断进而我们可以在接收中断函数中读取SBUF的接收内容。
注意
TI表示发送是否完成标志位当TI1时表示发送完成TI0时表示还未发送RI表示接收是否完成标志位当RI1时表示接收完成RI0时表示还未接收当发送或接收完成后若中断允许标志位打开则会发送串口中断请求进入中断服务TI和RI这两个标志位需要手动清零
波特率发生器
前言异步通信没有统一的时钟信号保证同步那么为了确保数据传输正确要求通信双方的波特率传输速度设置必须相同。计算机的串口调试助手可以很简单的设置波特率但是单片机也需要用相同的波特率进而保证数据传输的正确。
51提供了一个专门的波特率发生器——T1我们想要使用9600的波特率就是想串口在传输数据的时候每1/9600s能接收或发送一位二进制数因此只需要每1/9600s告诉串口一下要接收或发送数据波特率发生器就可以根据我们设置的时间进行提示我们进而可以根据1/9600s来设置T1的初值然后启动TR1按照定时器的工作原理他将在每次定时时间到的时候溢出进而实现了波特率发生器的功能。
注意
51默认的波特率发生器就是定时器T1而且必须使用工作方式2因为其具有重置初值的功能给T1赋予了波特率发生器的功能那么他就具有了溢出后通知串口的功能且能自动清除溢出标志位编程时不能开启T1的中断也不用编写T1的中断服务程序需要开启串口中断编写串口中断程序
T1初值的设定
若我们想要使用9600的波特率首先我们看UART结构图我们想要使用的波特率他还会进行分频/2和/16因此我们想要使用9600波特率我们需要以9600*2*16的波特率307200来算那么我们就希望每1/307200s初值寄存器溢出一次因为我们必须用T1的方式2所以初值为256-1000000/307200/12/fosc fosc采用11.0592MHz的原因 总结由此我们可以看到若11.0592MHz频率的晶振可以获得比较精确的9600波特率而12MHz频率的晶振就有偏差因此计算机用9600波特率和单片机串口通信就会有传错率。
晶振频率和波特率初值对照表 串行口的初始化编程 串行口控制寄存器SCON位的确定 根据工作方式确定SM0、SM1位方式2和方式3确定SM2位若是接收端则置允许接收位REN为1方式2和方式3发送数据则应将发送数据的第九位写入TB8中 设置波特率 方式0不需要对波特率进行设置方式2设置波特率仅需对PCON中的SMOD位进行设置方式1和方式3设置初值 开启中断以及波特率发生器 执行中断程序 串口通信案例
前言
需求利用串口助手发送数据的方式控制P2各个LED灯的亮灭同时在串口助手展示向单片机发送的数据。显示接收和发送两个部分接收采用接收中断的行式来接收数据当接收到数据以后我们将接收到的数据发回到上位机。注意电脑和单片机的波特率调成9600MHz选对对应的串口当进行调试时打开串口。
keil文件
#include regx52.h
unsigned char dat0,flag0;
void initscon(){SCON0x50; //8位异步通信方式允许接收数据TMOD0x20; //配置波特率发生器T1工作方式为2TH10xFD; //重置TL1TL10xFD; //设置初值晶振12MHz波特率9600bpsES1; //开启串口中断EA1; //开启总中断TR11; //打开波特率发生器T1
}
void main(){initscon();while(1){if(flag){SBUFdat; //向串口助手发送数据flag0;}}
}
void scon_isr() interrupt 4
{if(TI){TI0; //数据发送完清TI}if(RI){RI0;datSBUF; //接收串口助手发送的值switch(dat){case 1:P2_0~P2_0;break;case 2:P2_1~P2_1;break;case 3:P2_2~P2_2;break;case 4:P2_3~P2_3;break;case 5:P2_4~P2_4;break;case 6:P2_5~P2_5;break;case 7:P2_6~P2_6;break;case 8:P2_7~P2_7;break;default:P20xff;}flag1;}
}