单片机原理3.5串行通信.ppt_第1页
单片机原理3.5串行通信.ppt_第2页
单片机原理3.5串行通信.ppt_第3页
单片机原理3.5串行通信.ppt_第4页
单片机原理3.5串行通信.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

#include “reg51.h“ sbit P1_0=P10; void main() unsigned char tmp; P1=0xff; /关闭P1口接的所有灯 TMOD=0x05; /确定计数工作模式 TR0=1; /定时器T0开始运行 for(;) tmp=TL0; P1=tmp; ,#include “reg51.h“ sbit P1_0=P10; void Timer0() interrupt 1 TH0=0xff; TL0=0xfa; /重置初值 P1_0=P1_0; /执行灯亮或灭的动作 void main() P1=0xff; /关闭P1口接的所有灯 TMOD=0x05; /确定计数工作模式 TH0=0xff; TL0=0xfa; /定时实值为65530 EA=1; ET0=1; TR0=1; /定时器T0开始运行 for(;) ; ,单片机原理及设计教学课件,串行通信,单片机原理及设计教学课件,串行口与串行通信,重点: 串行寄存器 波特率的概念,随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。,通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。,并行通信通常是将数据字节的各位用多条数据线同时进行传送 。,并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。,串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。,串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。,串行通信的基本概念 一、异步通信与同步通信 1、异步通信 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。,异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。,单片机原理及设计教学课件,异步通信中,接收与发送之间必须有两项规定: 1 帧格式的设定; 2 波特率 (bps.):单位时间传送的位数,异步通信的数据格式 :,异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加23位用于起止位,各帧之间还有间隔,因此传输效率不高。,单片机原理及设计教学课件,同步串行通信:以数据块为单位进行传送, 80C51单片机没有同步串行通信的方式,不作介绍! 波特率 (bps.):单位时间传送的位数,二、串行通信的传输方向 1、单工 单工是指数据传输仅能沿一个方向,不能实现反向传输。 2、半双工 半双工是指数据传输可以沿两个方向,但需要分时进行。 3、全双工 全双工是指数据可以同时进行双向传输。,单工 半双工 全双工,单片机原理及设计教学课件,51单片机的串行接口,SBUF(发),SBUF(收),发送控制器 TI,接收控制器 RI,移位寄存器,波特率发生器T1,1,A累加器,(门)移位寄存器,RxD,TxD,去申请中断,引脚,引脚,CPU内部,有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。,80C51串行口的结构,SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:,80C51串行口的控制寄存器,SM0和SM1为工作方式选择位,可选择四种工作方式:,单片机原理及设计教学课件,SM0 SM1 SM2 REN TB8 RB8 TI R1,SCON,SM0,SM1:串行口4种工作方式的选择位。 0 0 方式0:8位移位寄存器I/O,波特率固定为 fosc/12 0 1 方式1:8位UART(1+8+1位), 波特率可变,按公式计算 1 0 方式2:9位UART(1+8+1+1位), 波特率固定=fosc x1/32或1/64 1 1 方式3:9位UART(1+8+1+1位), 波特率可变,按公式计算,SM2:串行口多机通信控制位 (作为方式2、方式3的附加控制位),串行口控制寄存器SCON(98H),单片机原理及设计教学课件, RI,TI:串行口收/发数据申请中断标志位 1 申请中断; 0 不申请中断, TB8:方式2、3中,是要发送的第9位数据。 多机通信中,TB8=0 表示发送的是数据; TB8=1 表示发送的是地址。, RB8:在方式2、3中,是收到的第9位数据。,SM0 SM1 SM2 REN TB8 RB8 TI R1, REN:串行口接收允许控制位 = 1 表示允许接收; = 0 禁止接收。,SCON,单片机原理及设计教学课件,SMOD GF1 GF0 PD 1DL,电源控制寄存器 PCON(97H) 特殊功能寄存器PCON不能按位寻址, SMOD:在串行口工作方式 1、2、3 中, 是波特率加倍位 =1 时,波特率加倍 =0 时,波特率不加倍。 (在PCON中只有这一个位与串口有关),PCON,波特率: 单片机或者计算机在串口通信时的速率用波特率表示;单位是bps;位/秒; 如每秒钟传送240个字符,而每个字符格式包含10位,这时的波特率为10*240位/秒=2400bps;,波特率的计算 在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式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 /12256 (TH1) 在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。,单片机原理及设计教学课件,工作方式2:8 位自动重装的定时/计数器,振荡器,12,TLx (8位),TFx,申请中断,Tx端,TRx位,GATE位,INTx端,1,&,C/T=0,C/T=1,控制 =1开关接通,或门,与门,THx (8位),溢出位,门开,单片机原理及设计教学课件,波特率=(2SMOD/32)T1的溢出率, 溢出率:T1溢出的频繁程度 即:T1溢出一次所需时间的倒数。, 初值 X = 2n -,2SMOD fosc 32 波特率 12, 波特率 =,2SMOD fosc 32 12(2n - X),其中:X 是定时器初值,单片机原理及设计教学课件, 初值 X = 2n -,2SMOD fosc 32 波特率 12, 计算波特率的部分: 要求用T1工作于方式2来产生波特率1200, 已知晶振频率=6MHz。要求出T1的初值:,初值 X = 28 -,20 6106 32 1200 12,= 256 - = 256 - 13.02,6106 460800, 243 = 0F3H 结果后面要用到,串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下: 确定T1的工作方式(编程TMOD寄存器); 计算T1的初值,装载TH1、TL1; 启动T1(编程TCON中的TR1位); 确定串行口控制(编程SCON寄存器); 串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。,#include #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar code table=“I get “; /uchar code table=I, ,g,e,t, ; void init() TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; void main() init(); while(1) if(flag=1) ES=0; for(i=0;i6;i+) SBUF=tablei; while(!TI); TI=0; SBUF=a; while(!TI); TI=0; ES=1; flag=0; void ser() interrupt 4 RI=0; a=SBUF; flag=1; ,#define uchar unsigned char #include “string.h“ #include “reg51.h“ #include “stdio.h“ void SendData(uchar Dat) uchar i=0; SBUF=Dat; while(1) if(TI) TI=0; break; void mDelay(unsigned int DelayTime) unsigned char j=0; for(;DelayTime0;DelayTime-) for(j=0;j125;j+) ; uchar Key() uchar KValue; P3|=0x3e; /中间4位置高电平 if(KValue=P3|0xe3)!=0xff) mDelay

温馨提示

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

评论

0/150

提交评论