RS232串行通讯相关.docx

上传人:b****6 文档编号:3079252 上传时间:2022-11-17 格式:DOCX 页数:8 大小:59.89KB
下载 相关 举报
RS232串行通讯相关.docx_第1页
第1页 / 共8页
RS232串行通讯相关.docx_第2页
第2页 / 共8页
RS232串行通讯相关.docx_第3页
第3页 / 共8页
RS232串行通讯相关.docx_第4页
第4页 / 共8页
RS232串行通讯相关.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

RS232串行通讯相关.docx

《RS232串行通讯相关.docx》由会员分享,可在线阅读,更多相关《RS232串行通讯相关.docx(8页珍藏版)》请在冰豆网上搜索。

RS232串行通讯相关.docx

RS232串行通讯相关

RS232串行通信相关

一.异步串行通讯数据格式:

一帧异步通讯的数据格式主要包含一下几个部分:

(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的串行口通信:

1.串行口控制寄存器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,必须软件清零。

2.电源功能寄存器PCON(87H):

SMOD,波特率倍增位,在方式1、2、3时,波特率与SMOD有关:

●SMOD=1时,波特率提高一倍;

●复位时,SMOD=0。

3.串行口的四种工作方式:

(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接收数据帧时序

4.波特率的计算:

5.串口初始化的具体步骤:

(1)串口初始化的一般步骤包括:

●确定T1的工作方式(编程TMOD寄存器);

●计算T1的初值,装载TH1、TL1;

●启动T1(编程TCON中的TR1位);

●确定串行口控制(编程SCON寄存器);

●串行口在中断方式工作时,还要进行中断设置(编程IE、IP寄存器)。

6.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例程:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1