单片机应用技术(C语言版)第4版6.1 串行通信基础-6.5 串行口的IO端口扩展课件_第1页
单片机应用技术(C语言版)第4版6.1 串行通信基础-6.5 串行口的IO端口扩展课件_第2页
单片机应用技术(C语言版)第4版6.1 串行通信基础-6.5 串行口的IO端口扩展课件_第3页
单片机应用技术(C语言版)第4版6.1 串行通信基础-6.5 串行口的IO端口扩展课件_第4页
单片机应用技术(C语言版)第4版6.1 串行通信基础-6.5 串行口的IO端口扩展课件_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1串行通信基础《单片机应用技术(C语言版)》6.1.1串行通信与并行通信并行通信和串行通信并行通信串行通信6.1.2单工通信与双工通信串行通信设备A设备B串行通信制式单工制式半双工制式双工制式单工制式设备A设备B发送器接收器单工制式半双工制式设备A设备B半双工制式全双工制式设备A设备B全双工制式6.1.3异步通信与同步通信串行通信的分类:异步通信(AsynchronousCommunication)同步通信(SynchronousCommunication)发送设备接收设备时钟不同步异步通信的特点发送设备接收设备010000101110001010111000101001间隙任意异步通信——字符帧起始位:1位起始位(为低电平);数据位:5-8位数据位,低位在前,高位在后,表示要传送的有效数据;校验位:1位奇偶校验位,可有可无;停止位:1、1.5或2位停止位,用高电平表示。波特率(baudrate):数据传送速率

单位:b/s或者bps

异步通信的波特率:50~19200bps异步通信——波特率同步通信的特点发送方和接收方的时钟要完全同步感谢您的观看Thanks

for

your

attention.

6.251单片机的串行接口《单片机应用技术(C语言版)》6.2.1串行口结构51单片机的串行接口串行数据发送端串行数据接收端51单片机的串行接口两个在物理上独立的接收、发送寄存器T1的溢出率和波特率有关控制工作方式和状态SBUF=send[i];//发送第i个数据0110111001101110buffer[i]=SBUF;//接收数据11101001111010016.2.2设置工作方式设置串行通信的工作方式设置波特率启动波特率发生器123单片机串行口的初始化:SM0SM1SM2RENTB8RB8TIRI0x9F0x9E0x9D0x9C0x9B0x9A0x990x981.设置串行通信的工作方式

01000000SCON=0x40;SCONSM0SM1工作方式功能说明波特率00方式08位同步移位寄存器常用于扩展I/O口fosc/1201方式110位UART8位数据、起始位、结束位可变(取决于定时器1溢出率和SMOD)0方式211位UART8位数据、起始位、奇偶校验位、结束位fosc/64或fosc/32(取决于SMOD)11方式311位UART8位数据、起始位、奇偶校验位和结束位可变(取决于定时器1溢出率和SMOD)SM0SM1SM2RENTB8RB8TIRISCONSM0SM1SM2RENTB8RB8TIRISCONREN:允许串行接收位。REN=1时,允许接收,REN=0时,禁止接收。REN=1;SM0SM1SM2RENTB8RB8TIRISCONTI:发送中断标志位方式0:发送完第8位数据时,TI由硬件置位。方式1、2、3:TI=1是发送完一帧数据的标志SBUF=send[i];//发送第i个数据while(TI==0);//查询等待发送是否完成TI=0;

//发送完成,TI由软件清0SM0SM1SM2RENTB8RB8TIRISCONRI:接收中断标志位REN=1; //接收允许while(RI==0);//查询等待接收标志为1,表示接收到数据buffer[i]=SBUF;//接收数据RI=0;

//RI由软件清0SM0SM1SM2RENTB8RB8TIRISCON控制寄存器SCONSM0SM1SM2RENTB8RB8TIRI工作方式选择位多机通信控制位允许串行接收位接收数据的第9位发送数据的第9位接收中断标志位发送中断标志位0x9F0x9E0x9D0x9C0x9B0x9A0x990x98电源及波特率选择寄存器PCONSMODGF1GF0PDIDLPCONSMOD为波特率选择位。SMOD=1:波特率×2SMOD=0:波特率不变

串行口工作方式1

方式1是单机通信方式,数据帧包括一位起始位,8位数据位和一位停止位,其10位帧格式如图所示。波特率由定时器T1和SMOD位确定。

发送过程:(1)串口初始化。设置工作方式(帧格式)、设置波特率(传输速率)、启动波特率发生器(T1)。

SCON=0x40;//定义串行口工作于方式1

TMOD=0x20;//定时器T1工作于方式2 TL1=0xf4;//波特率为2400bps TH1=0xf4; TR1=1; (2)发送数据。将要发送的数据送入SBUF,即可启动发送。此时串口自动按帧格式将SBUF中的数据组装为数据帧,并在波特率发生器的控制下将数据帧逐位发送到TXD端(最低位先发)。当发送完一帧数据后,单片机内部自动置中断标志TI为1。

SBUF=send[i];//发送第i个数据(3)判断一帧是否发送完毕。判断TI是否为1,是则表示发送完毕,可以继续发送下一帧;否则继续判断直至发送结束。while(TI==0);//查询等待发送是否完成(4)清零发送标志位TI。

TI=0;接收过程:(1)串口初始化。设置工作方式(帧格式)、设置波特率(传输速率)、启动波特率发生器(T1)、允许接收。SCON=0x40;//定义串行口工作于方式1TMOD=0x20;//定时器T1工作于方式2 TL1=0xf4;//波特率为2400bps TH1=0xf4; TR1=1; REN=1;//串行口允许接收数据

(2)判断一帧是否接收完毕。数据从接收端RXD(最低位先收)一位一位接收,判断RI是否为1,是则表示接收完毕,把数据存放在SBUF中,可以继续接收下一帧;否则继续判断直至接收结束。while(RI==0);//查询等待接收是否完成(2)数据存放。将接收到SBUF中的数据保存在数组中。

buffer[i]=SBUF;//接收第i个数据(4)清零接收标志位RI。

RI=0;

串行口工作方式2

方式2的数据帧是11位——用于多机通信格式为:一个起始位,8个数据位,一个可编程位和一个停止位,其11位帧格式如图所示。波特率由SMOD位确定。

可编程位在SCON的TB8和RB8位中,用于奇偶校验或多机通讯标识。可编程位可以由软件置1或清0;发送时在TB8中,连同八位数据通过串口发出。收到数据后,数据存入接收SBUF内,可编程位存入RB8中。SM0SM1SM2RENTB8RB8TIRISCON可编程位还可用作为对接收到的数据进行校验使用,常用校验方法:在可编程位装入发送数据的奇偶校验位。

举例:发送数据0x85(10000101B),发送数据包含二进制数1的个数为奇数,因此奇偶校验位P=1,在发送数据0x85时,将P=1赋值到可编程位TB8,连同数据共同发出。

对方接收后,只要将实际数据的奇偶关系与RB8进行对比,即可知道收发过程是否有误。SM0SM1SM2RENTB8RB8TIRISCON方式2波特率取决于PCON中SMOD位的值:SMOD=0时,波特率为fosc的1/64,即波特率=fosc/64;SMOD=1时,波特率为fosc的1/32,即波特率=fosc/32。波特率=(2SMOD/64)×fosc

串行口工作方式3

方式3的数据帧是11位——用于多机通信格式为:一个起始位,8个数据位,一个可编程位和一个停止位,其11位帧格式如图所示。波特率由定时器T1和SMOD位确定。

可编程位在SCON的TB8和RB8位中,用于奇偶校验或多机通讯标识。可编程位可以由软件置1或清0;发送时在TB8中,连同八位数据通过串口发出。收到数据后,数据存入接收SBUF内,可编程位存入RB8中。SM0SM1SM2RENTB8RB8TIRISCON可编程位还可用作为对接收到的数据进行校验使用,常用校验方法:在可编程位装入发送数据的奇偶校验位。

举例:发送数据0x85(10000101B),发送数据包含二进制数1的个数为奇数,因此奇偶校验位P=1,在发送数据0x85时,将P=1赋值到可编程位TB8,连同数据共同发出。

对方接收后,只要将实际数据的奇偶关系与RB8进行对比,即可知道收发过程是否有误。SM0SM1SM2RENTB8RB8TIRISCON方式3串行口方式3的波特率由定时器T1的溢出率与SMOD值同时决定。方式3波特率=2SMOD/32×(T1溢出率)

=6.2.3设置波特率

波特率设置波特率(baudrate):数据传送速率

单位:b/s方式0波特率固定为振荡频率的1/12波特率=fosc/12方式2SMOD=0时,波特率=fosc/64;SMOD=1时,波特率=fosc/32。波特率=(2SMOD/64)×fosc方式1,方式3波特率=2SMOD/32×(T1溢出率)T1溢出率=(fosc/12)/计数值=(fosc/12)/(256-X)

所以,波特率=

计数的初始值X=256-已知单片机的晶振频率fosc=11.0592MHz,要求设置串行通信的波特率为2400b/s,请编写程序段。

计数的初始值X=256-

=256-=244

=0xF4已知单片机的晶振频率fosc=11.0592MHz,要求设置串行通信的波特率为2400b/s,请编写程序段。

设置串口波特率步骤如下:(1)写PCON,设置SMOD=0;(2)写TMOD,设置定时器T1工作方式为方式2;(3)给TH1和TL1赋值,设置定时器T1的初值X为0xF4;(4)置位TR1,启动定时器T1工作,即启动波特率发生器。PCON=0x00;

//

SMOD设置为0TMOD=0x20;//定时器T1工作于方式2下TL1=0xF4;//初值设置,波特率为2400b/sTH1=0xF4;TR1=1;voidrs_init(){SCON=0x40;

//定义串行口工作于方式1PCON=0x00;

//

SMOD设置为0TMOD=0x20;//定时器T1工作于方式2TL1=0xF4;//初值设置,波特率为2400b/sTH1=0xF4;TR1=1;//启动波特率发生器}//函数名:rs_init//函数功能:串口初始化,波特率为2400b/s

//形式参数:无//返回值:无

常用波特率与其他参数选取关系波特率fosc(MHz)SMOD定时器1C/方式初始值方式0:1Mbps12××××方式2:375kbps121×××方式1、3:62.5kbps121020xFF19.2kbps11.05921020xFD9.6kbps11.05920020xFD4.8kbps11.05920020xFA2.4kbps11.05920020xF41.2kbps11.05920020xE8137.5kbps11.9860020x1D110bps60020x72110bps120010xFEEB感谢您的观看Thanks

for

your

attention.

6.351单片机串行口工作过程《单片机应用技术(C语言版)》6.3.1查询方式串行口工作过程一起分析:甲机:1.串行口初始化2.发送6个字符9、3、5、4、6、7给乙机。乙机:1.串行口初始化2.允许接收,并接收6个字符;3.显示6个密码。波特率为2400bps、串行口工作方式1进行双机串行通信发送过程:1.串口初始化2.发送数据3.判断一帧数据是否发送完毕4.发送标志位清0//函数名:rs_txd//入口参数:unsignedcharnvoidrs_txd(unsignedcharn){

unsignedchari;rs_init();for(i=0;i<n;i++){SBUF=send[i];//发送第i个数据while(TI==0);//查询等待发送是否完成TI=0;//发送完成,TI由软件清0

}}发送过程:1.串口初始化2.发送数据3.判断一帧数据是否发送完毕4.发送标志位清0#include<reg51.h>voidrs_init();//初始化子函数申明voidrs_txd(unsignedcharn);//发送过程子函数申明unsignedcharsend[]={0x09,0x03,0x05,0x04,0x06,0x07};voidmain() //主函数{rs_txd(6);while(1);}甲机发送程序:接收过程:1.串口初始化2.允许接收3.判断一帧数据是否接收完毕4.接收标志位清05.转存数据//函数名:rs_rxd//入口参数:n,表示要接收的字符个数//出口参数:数组buffervoidrs_rxd(unsignedcharn){

unsignedchari;rs_init();REN=1;for(i=0;i<n;i++){while(RI==0);//查询等待接收是否完成

RI=0;//接收完成,RI由软件清0buffer[i]=SBUF;//接收第i个数据

}}接收过程:1.串口初始化2.允许接收3.判断一帧数据是否接收完毕4.接收标志位清05.转存数据#include<reg51.h>

unsignedchartab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90};voidrs_init();//初始化子函数申明voidrs_rxd(unsignedcharn);//接收过程子函数申明voiddisp(void);//显示函数声明

unsignedcharbuffer[]={0x00,0x00,0x00,0x00,0x00,0x00};

//接收数据缓冲区

voidmain() //主函数{

rs_rxd(6);for(;;)disp(); //显示接收数据}乙机接收程序://函数名:disp//函数功能:在六个LED上显示buffer中的六个数//入口参数:无//出口参数:无voiddisp(){unsignedcharw,i,j;w=0x01;//位码赋初值

for(i=0;i<6;i++){P1=(tab[buffer[i]]);//送显示字型段码

P2=~w;//送位码

for(j=100;j>5;j--);//显示延时

w<<=1; //w左移一位

}}接收显示子程序:6.3.2中断方式串行通信程序设计voidmain(){rs_init();REN=1;EA=1;//开总中断允许位ES=1;//开串行口中断while(1);}

中断方式实现的串行口接收过程voidserial()interrupt4 {

unsignedchari=0;

EA=0; //关中断RI=0;//接收完成,RI由软件清0

buffer[i]=SBUF;//接收第i个数据i++;

if(i==6)

i=0;

EA=1;

//开中断允许位}感谢您的观看Thanks

for

your

attention.

6.4串行通信协议《单片机应用技术(C语言版)》6.4.1常用串行通信协议通信协议

要想保证通信成功,通信双方必须有一系列的约定,例如:作为发送方,必须知道什么时候发送信息,发什么,对方是否收到,收到的内容有没有错,要不要重发,怎样通知对方结束等。作为接收方,必须知道对方是否发送了信息,发的是什么,收到的信息是否有错,如果有错怎样通知对方重发,怎样判断结束等。这种约定就叫做通信规程或协议,它必须在编程之前确定下来。要想使通信双方能够正确交换信息和数据,在协议中对什么时候开始通信,什么时候结束通信,何时交换信息等等都必须作出明确的规定。只有双方遵守这些规定才能顺利地进行通信。通用异步串行接口UARTUART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于微处理器控制外围器件与PC机进行通信。本章讨论的51单片机串行接口即为UART接口。同步外设接口SPI

同步外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与E2PROM、ADC、FRAM和显示驱动器之类的慢速外设器件通信。

该总线的通信方式采用主-从配置方式。它有以下4个信号:MOSI(主出/从入)、MISO(主入/从出)、SCK(串行时钟)、SS(从属选择)。芯片上SS的引脚数决定了可连到总线上的器件数量。在SPI传输中,数据是同步进行发送和接收的。数据传输的时钟来自主处理器的时钟脉冲SCK。

SPI传输串行数据时首先传输最高位。波特率可以高达5Mbps,具体速度取决于SPI硬件。例如,Xicor公司的SPI串行器件传输速度能达到5Mbps。双线同步总线I2C总线

I2C(Inter-IntergratedCircuit)总线是由飞利浦(Philips)公司推出的芯片间串行传输总线,它以两根连线实现完善的全双工同步数据传送,可以方便地构成多机系统和外围设备扩展系统。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点,已经成为微电子通信控制领域广泛采用的一种总线标准。I2C总线由SDA(串行数据线)和SCL(串行时钟线)两根线构成,可在CPU与被控IC之间、IC与IC之间进行发送和接收数据的双向传送,总线上的每个器件通过软件寻址来识别。6.4.2EIA串行通信标准常用EIA串行通信协议RS232串行通信接口标准RS485串行通信接口标准

在异步串行通信中,通信双方除了要遵守前面所说的异步串行协议外,还必须要求通信的双方采用相同的接口标准,才能进行正常的通信。也就是说串行接口的信号线定义、电气规格等要相同,这些设备才能相互连接。即需要一个统一的串行通信接口。

RS-232C总线标准接口EIARS-232C是目前最常用的串行接口标准,用于实现计算机与计算机之间、计算机与外设之间的数据通信。该标准的目的是定义数据终端设备(DTE)与数据通信设备(DCE)之间接口的电气特性。RS-232C提供了单片机与单片机、单片机与PC机间串行数据通信的标准接口。通信距离可达到15m。RS-232总线标准接口及其电气特性

RS-232C

修改次数

标识号

推荐标准

RS-232是美国EIA(ElectronicIndustryAssociation)制定的一种串行物理接口标准。

RS-232C总线标准接口RS232接口标志主要对串行通信的连接电缆、机械、电气特性信号功能以及传送的过程进行了明确的规定。作为一种标准在微机通信接口中得到广泛的应用。

对于一般双工通信,只需几条信号线即可实现:一条发送线、一条接收线、一条地线。RS-232C标准规定的数据传输速率为:50、75、100、300、600、1200、2400、4800、9600、19200b/s。信号传输速率为2400b/s时,最大传输距离为15m。属于短距离通信。

RS-232C标准总线为25根,可采用标准的DB-25和DB-9的D型插头。目前计算机上只保留了两个DB-9插头,DB-9插头及引脚定义如图所示。

a)DB-9母头(b)DB-9公头(c)DB-9引脚定义计算机9芯串口引脚信号功能引脚号信号名称方向信号功能引脚功能1DCD*PC机←对方PC机收到远程信号载波检测DCD2RXDPC机←对方PC机接收数据接收数据RXD3TXDPC机→对方PC机发送数据发送数据TXD4DTR*PC机→对方PC机准备就绪数据终端准备好DTR5GND信号地信号地GND6DSR*PC机←对方对方准备就绪数据准备好DSR7RTS*PC机→对方PC机请求发送数据发送请求RTS8CTS*PC机←对方对方已经切换到接收状态发送清除CTS9RI*PC机←对方通知PC机,线路正常振铃指示RIRS-232C的电气标准采用负逻辑,即:

逻辑“0”:+3V~+15V逻辑“1”:-3V~-15V因此,RS-232C不能和TTL电平直接相连,否则将使TTL电路烧坏,实际应用时必须注意。RS-232C和TTL电平之间必须进行电平转换,常用的电平转换电路为MAX232,采用MAX232实现的单片机与PC机之间的串口通信电路。单片机和PC机串行通信接口T1IN、R1OUT或者T2IN、R2OUT可分别连接TTL/CMOS电平的单片机的串行发送端TxD和接收端RxD。T1OUT、R1IN或者T2OUT、R2IN分别连接到RS-232的PC机串行接收端和发送端。注意:C1、C2、C3、C4及V+、V-是电源变换部分。C1、C2、C3、C4须选用钽电容。连接时尽量靠近芯片。提高抗干扰能力。C5是去耦电容,减少芯片对电源噪声的敏感。感谢您的观看Thanks

for

your

attention.

6.5串行口的IO端口扩展《单片机应用技术(C语言版)》6.5.1采用串行口扩展并行输入口串行口工作方式0

在方式0下,串行口做同步移位寄存器使用,其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式通常用于扩展I/O端口。采用串行口扩展并行输入口

采用一片74LSl65,单片机的P3.0(RXD)引脚是串行数据的输入端

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论