RS232串行通讯相关之令狐采学创编.docx
- 文档编号:30320670
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:10
- 大小:59.92KB
RS232串行通讯相关之令狐采学创编.docx
《RS232串行通讯相关之令狐采学创编.docx》由会员分享,可在线阅读,更多相关《RS232串行通讯相关之令狐采学创编.docx(10页珍藏版)》请在冰豆网上搜索。
RS232串行通讯相关之令狐采学创编
RS232串行通信相关
一.
欧阳光明(2021.03.07)
二.异步串行通讯数据格式:
一帧异步通讯的数据格式主要包含一下几个部分:
(1)起始位:
起始位以一位低电平开始,表示发送端开始发送一帧数据。
(2)数据位:
数据位即要传递的数据信息,一般低位在前,高位在后,数据位长度一般为5~10位,常见为8位。
(3)奇偶校验位:
用于校验数据的正确性,可用奇校验,或偶校验。
(4)停止位:
用于向接收端表示一帧信息已经发送完毕,长度一般为1~2位。
(5)空闲位:
空闲位一般用高电平表示,用于通知接受端等待数据传输。
图一.串行通信数据格式
三.波特率:
在异步通信(收发设备各自使用自己的时钟)中,除了规定好数据传输格式外,还要有规定好的波特率:
1波特=1bps(位/秒)
在系统设计中,需根据通信需求选择波特率:
例,设计的数据传输率为300字节每秒,而每帧数据长度为11位,需要的波特率如下:
300帧/秒*11位/帧=3300位/秒=3300bps
四.RS232接口设计:
1.RS232接口定义:
(1)载波检测(DCD)
(2)接受数据(RXD)√
(3)发出数据(TXD)√
(4)数据终端准备好(DTR)
(5)信号地线(SG)√
(6)数据准备好(DSR)
(7)请求发送(RTS)
(8)清除发送(CTS)
(9)振铃指示(RI)
2.RS232接口针脚:
图二.RS232接头针脚定义
五.51的串行口通信:
3.串行口控制寄存器SCON(98H):
(1)SM0,SM1:
用于设置串口的工作方式,进行工作方式的选择;
(2)SM2:
多机通信控制位,应用于方式2与方式3中;
六.在方式0中,SM2应为0;
●在方式1处于接收时,若SM2=1,则只有收到有效的停止位后,RI置1;
●在方式2,3处于接收方式时:
SM2=0,收到RB8(0或1)既可使收到的数据进入SBUF,也可以激活RI。
SM2=1,收到的RB8=0时,收到的信息丢弃,不激活RI;若收到的RB8=1时,收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走。
(3)REN:
允许串行接收位;
REN=0,禁止串行接收;
REN=1,允许串行接收。
(4)TB8:
在方式2,3中,是发送机要发送的第九位数据;
●可做奇偶校验位,由软件置位或复位。
●在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时,TB8为1,数据帧时,TB8为0。
(5)RB8:
在方式2,3中,接收来自发送机的第9位数据(TB8);
(6)TI:
发送中断标志,发送一帧结束,TI=1,必须软件清零;
(7)RI:
接收中断标志,接收一帧结束,RI=1,必须软件清零。
4.电源功能寄存器PCON(87H):
SMOD,波特率倍增位,在方式1、2、3时,波特率与SMOD有关:
●SMOD=1时,波特率提高一倍;
●复位时,SMOD=0。
5.串行口的四种工作方式:
(1)方式0:
8位同步移位寄存器(用于I/O扩展);为同步工作方式,不能用于双机通信,只能与外界的同步移位寄存器配套进行工作;如果想进行异步串行通信,只能使用方式1,2,3进行。
使用方式0实现数据的移位输入输出时,实际上是把串行口变成为并行口使用。
串行口作为并行输出口使用时,要有“串入并出”的移位寄存器(例如CD4094或74LS164、74HC164等)配合。
●一帧8位,无起、停位。
●RXD:
数据输入/输出端。
●TXD:
同步脉冲输出端,每个脉冲对应一个数据位。
●波特率B=fosc/12,如:
fosc=12MHz,B=1MHz,每位数据1微秒。
●发送过程:
写入SBUF(启动发送),一帧发送完,TI=1。
●接收过程:
REN=1且RI=0,启动接收,一帧接收完,RI=1。
方式0发送时序
方式0接收时序
图三方式0串口通信电路连接
(2)方式1:
10位数据的异步通信
●一帧10位:
起位+8位数据位+停位。
●波特率:
用T1作波特率发生器,B=(2SMOD/32)×T1溢出率。
●发送:
写入SBUF(启动发送),一帧发送完,TI=1。
●接收:
REN=1,RI=0且停止位为1(或SM2=0),将接收数据装入SBUF,停止位装入RB8,并使RI=1;否则丢弃接收数据,不置位RI。
图四方式1传输数据帧格式
方式1发送数据帧时序
方式1接收数据帧时序
(3)方式2,3:
11位数据的异步通讯
●一帧11位:
起位+9位数据位+停位。
●第9位数据位在TB8/RB8中,常作校验位或多机通讯标识位
●波特率:
方式2:
B=(2SMOD/64)×fosc。
方式3:
B=(2SMOD/32)×T1溢出率
●发送:
先填写TB8,写入SBUF(启动发送),发送完TI=1。
●接收:
REN=1,RI=0且第9位为1(或SM2=0),将接收数据装入SBUF,第9位装入RB8,使RI=1;否则丢弃接收数据,不置位RI。
图五方式2,3传输数据帧格式
方式2,3发送数据帧时序
方式2,3接收数据帧时序
6.波特率的计算:
7.串口初始化的具体步骤:
●串口初始化的一般步骤包括:
●确定T1的工作方式(编程TMOD寄存器);
●计算T1的初值,装载TH1、TL1;
●启动T1(编程TCON中的TR1位);
●确定串行口控制(编程SCON寄存器);
●串行口在中断方式工作时,还要进行中断设置(编程IE、IP寄存器)。
8.51串口通信相关例程:
(1)串口初始化,晶振为11.0592M,方式1,波特率300-57600。
voidInitCom(unsignedcharBaudRate)
{
unsignedcharTHTL;
switch(BaudRate)
{
case1:
THTL=64;break;//波特率300
case2:
THTL=160;break;//600
case3:
THTL=208;break;//1200
case4:
THTL=232;break;//2400
case5:
THTL=244;break;//4800
case6:
THTL=250;break;//9600
case7:
THTL=253;break;//19200
case8:
THTL=255;break;//57600
default:
THTL=208;
}
SCON=0x50;//串口方式1,允许接收
TMOD=0x20;//定时器1定时方式2
TCON=0x40;//设定时器1开始计数
TH1=THTL;
TL1=THTL;
PCON=0x80;//波特率加倍控制,SMOD位
RI=0;//清收发标志
TI=0;
TR1=1;//启动定时器
}
(2)向串口输出一个字符(非中断方式)voidComOutChar(unsignedcharOutData)
{
SBUF=OutData;//输出字符
while(!
TI);//空语句判断字符是否发完
TI=0;//清TI
}(3)向串口输出一个字符串(非中断方式)
voidComOutStr(unsignedchar*Str)
{
while(*Str!
=0x00)//判断是否到了字符串的尾部
{
SBUF=*Str;//输出字符
while(!
TI);//空语句判断字符是否发完
TI=0;//清TI
Str++;//字符串指针加一
}
}
(4)从串口接收一个字符(非中断方式)unsignedcharComInChar()
{
unsignedcharInData;
while(!
RI);//空语句判断字符是否收完
InData=SBUF;//保存COM缓冲字符
RI=0;//清RI
return(InData);//返回收到的字符
}
(5)从串口接收一个定长字符串(非中断方式,只用于字符需有一个的idata字符串数组)//如unsignedchar*Str;
//unsignedchari[]="abcd";
//InHandStr=&i;
voidComInStr(unsignedchar*Str)
{
while(*Str!
=0x00)//判断是否到了字符串的尾部
{
while(!
RI);//空语句判断字符是否收完
*Str=SBUF;//保存字符
RI=0;//清RI
Str++;//字符串指针加一
}
}
(6)向串口输出一个回车换行voidComOutEnter(void)
{
SBUF=0x00;
while(!
TI);
TI=0;
SBUF=0x0A;
while(!
TI);
TI=0;
}
7.51串口通信初始化程序自动生成(自动生成初始化程序,复制即可):
(1)下载链接:
(2)软件运行界面:
8.串口工作在工作方式0例程:
(1)电路原理图:
基本电路有51单片机和74LS164组成,51的RXD接164的AB管脚,TXD接164的CLK管脚,P32接164的CLEAR管脚。
电路实现的功能是51通过串口发送0至255的数值,164通过译码,将收到的数值并行通过LED进行输出。
基本51的串口工作方式0,也仅用于如下的这种工作方式。
(2)驱动程序:
#include"reg51.h"
#defineucharunsignedchar
sbitP32=P3^2;
voidMode0_init();
voidMode0_work();
voiddelay();
voidmain()
{
Mode0_init();
Mode0_work();
}
voidMode0_init()
{
SCON=0x00;//SM0,SM1都为0,设定串口工作方式为0
ES=0;//禁止串口中断
P32=0;//P20的设置及输出时序是为了对74LS164进行寄存器清零
P32=1;
}
voidMode0_work()
{
uchark=0;
while
(1)
{
for(k=0;k<=255;k++)
{
SBUF=k;
while(!
TI)//等待数据传送完毕。
一帧数据传送完毕后,TI自动变为1,
{}
TI=0;
delay();//设置的延时函数
if(k==255)
k=0;
}
}
}
voiddelay()
{
uchari=0;
ucharj=0;
for(i=0;i<250;i++)
for(j=0;j<250;j++);
}
9.串口工作在工作方式1例程:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RS232 串行 通讯 相关 令狐 创编