一、串口通信概念
1、串口通信的作用
串口通信主要用于单片机与外部设备的通信。51单片机自身有圈双工的异步通信串口。
2、串口通信的通信方式
串行通信:传送数据的各位按顺序一位一位发送或者接收
并行通信:传送数据各位同时发送或接收
3、串行通信的通信方式
串行通信根据帧信息的格式分为异步通信和同步通信
异步通信:一帧数据先用一个起始位“0”表字符开始,然后是5~8位数据,即该字符的代码,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后一个停止位“1”表示字符结束。
同步通信:发送方在数据或字符前面用1~2字节同步字符指示一帧的开始,同步字符是双方约定好的,接收方检测到与规定的同步字符符合时,开始接收数据,发送方按顺序连续传送N个数据,N个数据传完后,发送1-2字节的校验码。
接收端和发送端的同步由时钟实现。
同步通信省去了字符开始和结束的标志,一帧可以连续传送若干个数据,所以速度高于异步传送。
4、通信方向
串口通信的通信方向分为单工、半双工、全双工三种。
单工传送:通信接口只能发送或者接收。
半双工传送:通信接口可以接收也可以发送,但是发送和接收不能同时进行。
全双工传送:两机的发送和接收可以同时进行
一般情况下,我们的51单片机采用的为全双工,通过TXD,RXD两个通信接口同时进行数据的发送和接收。
需要注意的是,51单片机在实物连线上要反接,一机的TXD应接另一机的RXD,RXD接另一机的TXD。而一些特殊型号的单片机会标注正接,即RXD接RXD,TXD接TXD。
5、串行通信接口的作用
我们单片机内部的CPU只能处理并行数据,要进行串行通信,就必须要接我们的串行接口,按串行通信协议,进行数据的处理。具体的有
A:实现数据格式化
按串行数据格式,对CPU的并行数据进行处理。
B:进行串行数据和并行数据的转换
发送端,并行转串行送接收端;
接收端,串行转并行送CPU;
C:控制数据的传输速率
接口应具备对数据传输速率----波特率的控制选择能力(具有波特率发生器)
D:进行传送错误检测
发送时,接口对传送数据在的生成奇偶校验位或校验码;在接收时接口检查校验位或校验码,以确定传送中是否有误码。
51单片机内含的通信接口:
51单片机内含一个全双工的异步通信接口,通过对串行接口写控制字可以选择其数据格式,内含波特率发生器,提供可选波特率,可完成双机通信或多机通信。
二、串行口的结构和工作原理
1、串行口结构
串行口主要由两个数据缓冲寄存器SBUF和一个输入移位寄存器组成,内部还有一个串行控制寄存器SCON和一个波特率发生器(T1定时器或内部时钟及分频器组成)
我们串行口发送的数据先逐位进入接收端移位寄存器,再送入接收端SBUF。移位寄存器和SBUF采用了双缓冲结构,避免两帧数据发送混乱。
2、串行口工作原理
A:发送机CPU向SBUF写入数据,启动发送过程
B:按SCON设定好的控制方式和设定的波特率,由低位到高位一位一位的按移位时钟发送到电缆线上
C:数据通过电缆线到达接收机
D:接收机按照设定的波特率,按移位时钟一位一位的由低到高移入SBUF
因此我们的发送机,接收机波特率必须保持一致,才可以正常的收发数据,即发送机移出的刚好被接收机移入。
E:发送机发完一帧数据(发送缓冲器空),硬件置位发送中断标志位TI(SCON.1)位可作为查询标志,如果设置为允许中断,将引起中断,发送机可再发送下一帧数据。(先发后查)
F:接收机,预先置位REN(SCON.4)即允许接收,再按波特率由低到高进入接收机移位寄存器,数据收齐后(接收缓存器满),硬件置位RI(SCON.0),可作为查询标志,如果设置为允许中断,将引起接收中断,CPU方可从SBUF中读入这帧数据。(先查后收)
总结:
① 查询方式发送的过程:发送一个数据→查询TI→发送下一个数据(先发后查)
查询方式接收的过程:查询RI→读入一个数据→查询RI→读入下一个数据(先查后收)
②通信双方波特率必须相同
3、波特率的设定
第一种方式:
系统时钟分频值
第二种方式:
定时器T1提供(针对基础51来讲)
波特率计算:
当串口工作在工作方式0和2时,波特率固定。
方式0时 fosc / 12
方式2时 SMOD=0 fosc / 32 或 SMOD=1 fosc / 64
方式1时
波特率=(2^SMOD/32)*(单片机时钟频率/(256-X)) //X是初值
但一般情况下,我们是先确定波特率,再确定定时计数器初值
三、串行口的控制寄存器
1、串口工作方式寄存器SCON
2、电源控制寄存器PCON
四、串行口的具体应用编程
1、定好波特率
串行口波特率有两种方式:固定波特率和可选波特率
当使用可变波特率时,应先计算T1的计数初值,并对T1初始化
当使用固定波特率时,选择方式0、2
2、填写控制字
对SCON寄存器设置工作方式,若为接受程序,需置为REN=1(允许接收),同时将TI、RI置零(串口中断标志位)
3、选择串行通信方式
串行通信可采用两种方式:查询方式和中断方式
TI和RI是一帧数据发送或接收完的标志,可用于查询;如果允许中断,可引起中断。
查询方式:
发送一个数据→查询TI→发送下一个数据(先发后查)
查询RI→读入一个数据→查询RI→读入下一个数据(先查后收)
中断方式:
发送程序:发送一个数据→等待中断,在中断中发送下一个数据
接受程序:等待中断,在中断中再接受一个数据
注意:两种方式中,都要软件请TI、RI标志位,即用程序语句清0
4、约定标志字符
为了收发双方的协调,除了两边的波特率要保持一致,也可以约定标志字符作为发送数据的起始,先发送标志字符,待对方收到并回应之后,再正式发数据。
当我们采用多机通信时,标志字符就相当于是各个分机的地址
五、查询方式和中断方式详细流程
1、查询方式
2、中断方式
六、例程
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
void UsartInit()
{
SCON=0X50; // 0101 0000 设置为工作方式1
TMOD=0X20; // 0010 0000 设置计数器工作方式2
PCON=0X80; // 1000 0000波特率加倍
TH1=0XF3; //计数器初始值设置,波特率9600
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main()
{
UsartInit(); //串口初始化
while(1);
}
void Usart() interrupt 4 //串行口中断
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位 软件清零
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
上一篇:51单片机之晶振与定时器
下一篇:基于51单片机的直流电机调速设计
推荐阅读
史海拾趣
据市场研究专家分析,全球消费电子产业持续迅猛发展将推动微控制器(MCU)市场需求。在中国,传统家电及新兴数码消费电子产业的规模扩大,也必将成为整个消费类MCU市场的重要源动力。虽然用户需求在不断发生变化,8位MCU依然是低端应用的核心并且 ...… 查看全部问答∨ |
|
3G iPhone真机拆解 组件供应商名单出炉[来源:国际电子商情] 摘要:iSuppli公司在7月11日得到了一部3G iPhone,并对其进行了拆解,以确定其中的组件供应商,以及主 要部件成本和系统成本。新款3G iPhone采用了进化性的设计,而没有采用前沿性的特点 ...… 查看全部问答∨ |
|
下载NK时会停在 Sp=ffffc7cc 或者死在 PSMFSD_MountDisk: FG_Init failed! status=33 ,请教做过相关的兄 各位: 最近不知道为什么下载NK时总是死在 Sp=ffffc7cc Windows CE Kernel for ARM (Thumb Enabled) Built on Aug 4 2008 at 18:38:38 ProcessorType=0411 Revision=7 sp_abt=ffff5000 sp_irq=ffff2800 s ...… 查看全部问答∨ |
PXA270+CE5.0系统中的RTC驱动问题,时间显示有问题,???? 基本情况介绍: PXA270+CE5.0,RTC采用外接X1226芯片,I2C读写。已实现其读写RTC函数,且读写正确,通过调用OEMSetRealTime和OEMGetRealTime便可对其调用。现在的问题是: 1 任 ...… 查看全部问答∨ |