版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
定时/计数器第6章在单片机控制系统中,经常需要多个控制系统配合工作,这就要求在多个单片机系统之间进行通信。通信的方法多种,本章仅从单片机串行通信角度介绍串行传输的一般概念及基本应用,从单片机的串口结构、工作方式、串行通信RS-232接口标准、通信协议等方面进行介绍,并对单片机与单片机之间、单片机与计算机之间、单片机与计算机之间的通信应用进行介绍。引言目录串行通信基础知识1单片机的串口及控制寄存器2本章小结7单片机的串口应用3本章习题8行业PPT模板/hangye/项目训练一单片机双机通信5串行通信接口RS-232标准4项目训练二ESP8266无线网络透传66.1串行通信基础知识6.1.1串行通信与并行通信的比较1.通信一般分为并行通信和串行通信两种方式。并行通信:通过一组数据线,同时将数据的各个位进行传输,每个数据位占据一根数据线,如图6-1所示。并行通信的优点是控制简单、传输速度快;缺点是传输线较多,长距离传输时成本高。串行通信:使用一根线数据线,将数据一位接一位地依次传输,每位数据占据一个固定的时间长度,如图6-2所示。串行通信的优点是传输线少,长距离传送时成本低;缺点是传输速度慢。
6.1.2串行通信的制式串行通信的制式有:单工、半双工和双工。单工:如果在通信过程的任意时刻,信息只能由一方A(B)传到另一方B(A)。半双工:如果在任意时刻,信息既可由A传到B,又能由B传A,但一个时刻只能由一个方向上的传输存在。全双工:如果在任意时刻,线路上同时存在A到B和B到A的双向信息传输。6.1.3同步串行通信与异步串行通信同步串行通信与异步串行通信都要规定通信双方的传输速率.同步串行通信采用数据包形式来装载数据。数据包中有特殊的“同步位”,可以用来协调并统一通信双方的传输步调。它一次可以收发几十到几千个字节,效率较高。6.1.3同步串行通信与异步串行通信异步串行通信采用数据帧形式来装载数据。每个数据帧都包括起始位、数据位、校验位和停止位,如下图所示。异步串行通信每收/发一帧数据就调整一次双方的步调,保证传输的正常进行。6.1.4串行通信的校验方式1.奇偶校验在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。2.代码和校验代码和校验是指发送方对所发送数据块求和(或各字节异或)运算,产生1B的校验字符(校验和),附加到数据块末尾。接收方在接收数据的同时对数据块(除校验字节外)进行同样的运算并和接受的结果比较。3.循环冗余校验(CRC)循环冗余校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法的纠错能力强,广泛应用于各种通信系统中。6.1.5传输速率与传输距离1.传输速率比特率(BitRate):每秒传输二进制代码的位数,单位是bit/s。例如,每秒传送240帧数据,而每个数据帧格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为 10×240=2400(bit/s)波特率(BaudRate):传输数据中每秒信号的变化量。2.传输距离(1)板级:<0.5m。标准串行总线(IIC):EEPROM:24CXX;CLOCK:PCF8563。非标准串行总线:X5045(EEPROM&WATCHDOG);CLOCK:DS1302;A/D:TLC549;D/A:MAX1241。(2)设备级:1->15m。常用串行设备:键盘;条码扫描器;IC卡;显示器;鼠标;USB口。(3.)网络、远程级:>15m,从几十米到全球到的距离。INTERNET,工业局部总线,计算机之间通信。6.2
单片机的串口及控制寄存器6.2.1单片机的串口结构8051单片机串口的内部结构如图所示。其中,SBUF为串口的收/发缓冲器,它是一个特殊的专用寄存器,其中包含了接收寄存器和发送寄存器,可以实现全双工通信,但这两个寄存器具有同一地址(99H)。8051单片机的串行数据传输很简单,只要向SBUF(发送)写入数据即可发送数据,而从SBUF(接收)中读出数据即可接收数据。1.串口控制(SCON,SerialControl)寄存器串行口控制寄存器SCON,它是一个可位寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:(1)SM0,SM1:取00,01,10,11分别选择串口工作方式0,1,2,和3,如下表所示。一般只是使用方式0移位方式和方式1(10位为一帧的异步串行通信方式)。6.2.2
单片机的串行口控制寄存器位地址9FH9EH9DH9CH9BH9AH99H98H位符号SM0SM1SM2RENTB8RB8TIRISM0SM1工作方式用途波特率0008位移位寄存器I/O晶振频率/1201110位UART可变10211位UART晶振频率/32或/6411311位UART可变(2)SM2:在多机通信时,子机先让SM2=1,待收到的地址(RB8=1)与本机地址相符时,将SM2改为0,接收随后的数据。(3)REN:允许接收控制位,仅在不使用串口或采用单工通信方式(只发送不接收)时将设置为0,在一般通信程序中,都应将其设置为1。(4)TB8:发送数据第9位,用于在方式2和方式3下存放发送数据第9位。TB8由软件置位或复位。(5)RB8:接收数据第9位,用于在方式2和方式3下存放接收数据第9位。在方式1下,若SM2=0,则RB8用于存放收到的停止位;在方式0下,不使用RB8。(6)TI:发送中断标志位,用于指示一帧数据发送是否完成。硬件自动置位,需软件清零。(7)RI:接收中断标志位,用于指示一帧数据是否接收完。硬件自动置位,需软件清零。6.2.2
单片机的串行口控制寄存器1.串口控制(SCON,SerialControl)寄存器串行口控制寄存器SCON,它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:(1)SM0,SM1:取00,01,10,11分别选择串口工作方式0,1,2,和3,如下表所示。一般只是使用方式0移位方式和方式1(10位为一帧的异步串行通信方式)。6.2.2
单片机的串行口控制寄存器位地址9FH9EH9DH9CH9BH9AH99H98H位符号SM0SM1SM2RENTB8RB8TIRISM0SM1工作方式用途波特率0008位移位寄存器I/O晶振频率/1201110位UART可变10211位UART晶振频率/32或/6411311位UART可变2.电源管理(PCON,PowerControl)寄存器PCON寄存器主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如表6-3所示。在CHMOS型单片机中,除SMOD位外,其他位均为虚设位。SMOD是串口波特率倍增位,当SMOD=1时,串口的波特率加倍。系统复位,默认SMOD=0。3.中断允许(IE,InterruptEnable)寄存器IE对中断的允许(开放)实行两级控制,即以EA位为总控制位,以各中断源的中断允许控制位为分控制位。它的单元地址为A8H,其结构格式如表6-4所示。其中ES位为串行中断允许控制位,在EA=1的情况下,ES=1表示允许串行中断,ES
=
0表示禁止串行中断。6.2.2
单片机的串行口控制寄存器PCOND7D6D5D4D3D2D1D0位符号SMOD———GF1GF0PDIDLPCONAFHAEHADHACHABHAAHA9HA8H位符号EA——ESET1EX1ET0EX0在使用串口前,应对其进行初始化,主要设置用来产生波特率的T1、串口控制和中断控制。具体步骤如下。(1)确定T1的工作方式(编程TMOD寄存器)。(2)计算T1的初值,装载TH1、TL1。(3)启动T1(编程TCON中的TR1位)。(4)确定串口控制(编程SCON寄存器)。(5)串口在中断方式下工作时,要对其进行中断设置(编程IE、IP寄存器)。6.2.2
单片机的串行口控制寄存器6.3
单片机的串口应用6.3.1方式0在方式0下,串口为同步移位寄存器的输入和输出方式,主要用于扩展并行I/O口;数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出;发送和接收的均为8位数据,且低位在前、高位在后,如图6-10、图6-11所示;波特率固定为fosc/12。图6-11方式0输入时序图图6-10方式0输出时序图6.3.1方式0方式0主要作为I/O口的扩展来使用,当I/O口不够用时,可以考虑使用扩展的方式。通过搭配串行移位输入或输出转换芯片,可以实现多个I/O口的扩展,增加I/O口的数量。搭配的串行移位输出芯片可以采用74LS164或74HC595,串行移位输入芯片采用74LS165。如图:6.3.1方式0【例6-1】
用8位串入并出移位寄存器74HC595扩展单片机的输出口,电路如图
6-13所示。试编写程序完成:依次点亮8个LED,即D1~D8,待所有LED均点亮后,重新开始。要求采用中断方式编程。程序实现分析:采用的是串行移位输出的方式,所以可以将LED点亮的数据放在一个数组中,按照间隔的时间要求将数据写入SBUF即可。unsignedchardataPatten[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//流水灯数据6.3.1方式0硬件电路分析74HC595具有一个8位移位寄存器和一个8位存储寄存器,还具有三态输出功能。其中,移位寄存器和存储寄存器使用不同的时钟。8位移位寄存器有一个串行移位输入(DS)端口、一个串行移位输出(Q7')端口和一个异步的低电平复位端口。存储寄存器有一个并行8位的三态总线输出端口,当使能OE时(为低电平),存储寄存器的数据输出到三态总线上。74HC595的内部结构框图(仅列出数据端口)如图6-14所示。6.3.1方式0函数功能:定时器中断服务程序voidTime0(void)interrupt1using1{CNT++; //50ms时间到,计数值加1if(CNT==10){ //500ms定时时间到 CNT=0; //计数值清零 SBUF=Patten[i];//启动单片机串口输出 i++; if(i==8)i=0; //8位输出结束后重新开始}TH0=0x3c; //重装定时器初值TL0=0xb0;}主要实现程序:函数功能:串口中断服务程序voidSerial(void)interrupt4using2{TI=0;
//清零,发送结束标志RCK=0;
//锁存时钟,上升沿有效RCK=1;}6.3.2方式1方式1是10位数据的异步通信口。其中,TXD为数据发送引脚,RXD为数据接收引脚。方式1数据帧的格式如图6-15所示,包括1位起始位,8位数据位,1位停止位。1.方式1输出时序方式1输出时序图如图6-16所示。当数据写入SBUF时,串口按照数据帧格式,以低位在前、高位在后的顺序将各位发送到TXD引脚。当发送完最后一位时,TI标志置1。2.方式1输入时序方式1输入时序图如图6-17所示。当RXD引脚为低电平时,数据在位采样脉冲的作用下被送到SBUF中存放,并置位RI标志。6.3.3方式2和方式3方式2和方式3都是11位异步收发方式。两者的差异仅在于通信波特率有所不同:方式2的波特率由8051主频fosc经32或64分频后提供;方式3的波特率由定时器T1的溢出率经32分频后提供,故它的波特率是可调的。方式2和方式3的发送过程类似方式1,所不同的是方式2和方式3有9位有效数据位。方式2和方式3的接收过程也与方式1类似,所不同的是:在方式1下,RB8中存放的是停止位;在方式2或方式3下,RB8中存放的是第9数据位。因此,在方式2和方式3下,必须满足接收有效字符的条件变为RI=0和SM2=0或收到的第9数据位为1,只有上述两个条件同时满足,收到的字符才能被送入SBUF,第9数据位才能被装入RB8,并使RI=1;否则,这次收到的数据无效,RI也不置位。6.3.4波特率的计算方式0的波特率=fosc/12方式2的波特率=方式1的波特率=方式3的波特率=式中,k为定时器T1的位数,在方式2下,定时器T1的位数为8,因此定时器T1溢出率就为T1溢出率=串口由于输入的移位时钟的来源不同,各种方式的波特率计算公式也不相同。T1溢出率
=在单片机的应用中,常用的晶振频率为12MHz和11.0592MHz,选用的波特率也相对固定。一般串口通信时选用11.0592MHz的晶振,原因是定时器初值的计算能够正好取得整数。波特率/(bit/s)fosc=12MHzfosc=11.0592MHzSMODT1方式初值SMODT1方式初值19200---12FDH9600---02FDH480012F3H02FAH240012F3H02F4H120002E6H02E8H6.3.2方式1【例6-2】设单片机采用11.0592MHz的晶振,串口以方式1工作,波特率选定为9600bit/s。试编程实现单片机从串口输出数字0~9。(1)分析:因为晶振采用11.0592MHz,所以根据波特率,可查询表6-5获得定时器的初值。这里输出数字不是直接把该值输出,而是要输出其ASCII码。#include<reg51.h>unsignedcharASCII=0x30;//字母0的ASCII码值unsignedcharCOUNT=0;//用来记录发送的数字个数voidmain(void){ SP=0x60;
//设栈指针 TMOD=0x20; //设T1工作于方式2,作为定时器使用 TL1=0xFD; //设波特率为9600bit/s TH1=0xFD; //设置重置值 PCON=0x00; //SMOD=0,波特率不倍增 TR1=1; //启动T1运行 SCON=0x40; //设串口工作于方式1,关接收
for(;COUNT<10;COUNT++)
{SBUF=ASCII; //发送字符"0"while(!TI); //查询方式,等待发送结束TI=0; //清除发送完成标志ASCII++;//ASCII码值加1
}
while(1);}6.3.2方式1在Keil上编译该程序,进入调试模式,把串口窗口UART#1打开,运行该程序,如图
6-18所示。拓展练习:把例6-2的程序改为以中断方式发送。
6.4串行通信接口
RS-232标准串行通信接口按电气标准及协议来分,包括RS-232、RS-422、RS-485、USB等。RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。目前,RS-232是计算机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。RS-232采取不平衡传输方式,即单端通信。由于RS-232是在TTL电路之前研制的,所以与TTL以高低电平表示逻辑状态的规定不同,RS-232是用正负电平来表示逻辑状态的。RS-232采用负逻辑:+5~+15V为逻辑“0”;-15~-5V为逻辑“1”;-5~+5V为过渡区。RS-232物理接口标准可分成25芯和9芯D型插座两种,均有公头(针)、母头(孔)之分。其中,TX(发送数据)、RX(接收数据)和GND(信号地)是3条最基本的引线,可以实现简单的全双工通信。按照RS-232标准,传输速率一般不超过20kbit/s,传输距离一般不超过15m。实际使用时,传输速率最高可达115200bit/s。6.4.1RS-232引脚定义设备之间的串行通信线的连接方式,取决于设备接口的定义。设备之间采用RS-232串行电缆连接时有以下两类连接方式:直通线:相同信号(RXD对RXD、TXD对TXD)相连,用于DTE与DCE相连,如计算机与MODEM(或DTU)相连。交叉线:不同信号(RXD对TXD、TXD对RXD)相连,用于DTE与DTE相连,如计算机与计算机相连、计算机与采集器相连、计算机与单片机相连、单片机与单片机相连。6.4.2RS-232接口的基本接线原则三线连接方式:两端设备的串口只连接收、发送、地3根线,如图6-19所示。一般情况下,三线连接方式即可满足要求,如监控主机与采集器及大部分智能设备相连.简易接口方式:两端设备的串口除连接收、发、地3根线外,还增加了一对握手信号(一般是DSR和DTR)。6.4.3RS-232的三线方式6.5项目训练一
单片机双机通信6.5.1项目要求设计一个单片机之间的短距离通信电路,假设一个为主机,一个为从机。要求主机通过按键发送一位数据给从机,从机接收数据后通过LED数码管显示出来,并将数据加上1后返回给主机,主机显示收到的数据。要求通信波特率为9600bit/s,采用中断方式进行收发。6.5.2项目分析该通信电路因为距离较短,所以可以采用直连的方法,即使用导线直接连接,信号电平均为TTL电平,而无须转换为RS-232电平。主机电路设计可以参考之前的矩阵键盘电路,按键检测程序也可以参考矩阵键盘检测程序。因为波特率为9600bit/s,所以只能用串口工作方式1和方式3,而又因为只有两个单片机进行通信,所以可采用方式1来通信。6.5.3电路图设计电路图设计参考图6-20,需要注意两个单片机的串口的接线,要求两者的发送端和接收端相互交叉。6.5.4程序设计1.串口应用流程一般串口的应用流程如下。首先,要对串口进行初始化,内容包括波特率的选择、工作方式的选择、定时器初始化,以及选择采用何种方式进行数据的发送和接收,如采用中断方式时需要打开中断。其次,要确定通信协议。这里所谓的协议,就是指确定数据帧格式,包括特殊数据的含义、数据校验方法、出错处理方法等。最后,进行数据的收发,可以采用查询方式,也可以采用中断方式。2.串口中断的处理串口在产生中断时,要先判断这是由接收数据引起的还是由发送数据数据引起的,并据此做相应的处理。6.5.4程序设计3.主要程序(1)主机程序程序功能:串口发送数据voidsentData(unsignedcharsd){SBUF=sd;//将数据送到SBUF(发送)中}程序功能:串口接收数据,采用中断方式接收voidSerialISR(void)interrupt4using3{unsignedcharrcdata=0;//存放接收数据
if(RI)
//判断是由谁引起的中断
{
REN=0;
//暂时关闭接收功能 RI=0;
//清除接收完成标志
rcdata=SBUF;
//读取接收缓冲寄存器中的数据 P0=table[rcdata];//接收数据显示 REN=1;
//打开接收功能
}
elseif(TI)
{
TI=0; //清除发送完成标志,待进行下一次发送
}}//程序功能:串口初始化voidserialInit(void){TMOD=0x20;//设定时器1工作于方式2SCON=0x50;//工作方式1,允许接收PCON=0x00;//波特率不加倍ES=1; //打开串口中断EA=1;
//打开全局中断TH1=0xFD;
//波特率为9600的定时器初值TL1=0xFD;TR1=1;//定时器工作}6.5.4程序设计(2)从机程序程序功能:串口接收数据,采用中断方式接收,同时将数据送到数码管中进行显示voidSerialISR(void)interrupt4using1{
unsignedcharrcdata=0; //存放接收数据
if(RI)
{
REN=0; RI=0; //清接收完成标志 rcdata=SBUF;//读取SBUF(接收)中的数据 P0=table[rcdata];//接收数据显示 SBUF=rcdata+1;//将接收的数据+1后发送给主机 REN=1;
}
elseif(TI)
{
TI=0;
}}6.5.5
拓展训练(1)如果将上面的中断服务程序中对TI判断清零的语句删除,会产生什么后果?(2)将以上程序改为查询方式,编写程序实现。6.6
项目训练二
ESP8266无线网络透传6.6.1项目要求设计一个单片机与计算机之间的无线通信电路,假设计算机为服务器,单片机为客户端。要求单片机通过串口与ESP8266芯片(ESP-12F模块)连接,经ESP8266芯片转发后连接远程服务器。采用AT指令方式,单片机通过串口发送字符串"WifiTestsuccess"给服务器,实现串口到服务器的网络透传功能。6.6.2项目分析使用一台计算机当作服务器,在计算机中,使用网络调试助手软件建立一个“TCPServer”,采用本地主机地址作为服务器的地址(假设为02),主机端口号为8888。设置Wi-Fi热点名称为linlimcupc(可以自己设定),密码为12345678。要实现这些功能,需要了解ESP8266芯片AT指令的用法。表6-8列出了一部分与本项目相关的AT指令的格式和功能,更多指令请参考芯片手册中的说明。6.6.3通信连接设计通信连接设计参考图6-22,单片机通过串口连接Wi-Fi模块ESP-12F,ESP-12F模块通过无线Wi-Fi连接远程服务器。6.6.4程序设计要使用AT指令发送数据,需要通过串口来发送字符串,因此可以设计一个函数UARTSendString(unsignedchar*p_Str),该函数调用发送单个字符函数UARTSendData(unsignedchar)完成字符串的发送。字符串发送函数:voidUARTSendString(unsignedchar*p_Str){ while(*p_Str) //判断是否
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版投资担保合同风险控制条款3篇
- 如何记忆更多的知识点
- 二零二五年度锂离子蓄电池销售合同范本3篇
- 二零二五年度个人间家庭农场贷款合同3篇
- 零担货物运输合同三篇
- 教师行业安全生产工作总结
- 二零二五年度影视制作公司演员个人聘用合同2篇
- 二零二五个人住宅租赁合同(含租赁保证金退还条件)2篇
- 二零二五年度个人担保合同书范本:珠宝首饰抵押担保
- 二零二五年度绿色快递柜场地租赁与快递代收协议书3篇
- 广东省深圳市2024-2025学年高一上学期期末考试英语试题(含答案)
- 人文关怀在护理工作中的体现
- 2025年1月八省联考高考综合改革适应性测试-高三生物(陕西、山西、宁夏、青海卷) 含解析
- 医药行业2025年策略报告:曙光初现机遇增加
- 开工第一课安全培训内容
- 社会主义核心价值观课件
- 《公路养护安全培训》课件
- 第七讲推动构建新时代的大国关系格局-2024年形势与政策(课件)
- 2024年高考真题-化学(天津卷) 含解析
- 医院食材采购与配送实施方案
- 2024年可行性研究报告投资估算及财务分析全套计算表格(含附表-带只更改标红部分-操作简单)
评论
0/150
提交评论