RS232串行通讯相关Word文档格式.docx
《RS232串行通讯相关Word文档格式.docx》由会员分享,可在线阅读,更多相关《RS232串行通讯相关Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
![RS232串行通讯相关Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/17/91265026-fc37-451e-b942-99bfc38b3a4c/91265026-fc37-451e-b942-99bfc38b3a4c1.gif)
(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溢出率。
●发送:
●接收:
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;
图五方式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;
//600
case3:
THTL=208;
//1200
case4:
THTL=232;
//2400
case5:
THTL=244;
//4800
case6:
THTL=250;
//9600
case7:
THTL=253;
//19200
case8:
THTL=255;
//57600
default:
}
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
}(3)向串口输出一个字符串(非中断方式)
voidComOutStr(unsignedchar*Str)
while(*Str!
=0x00)//判断是否到了字符串的尾部
SBUF=*Str;
Str++;
//字符串指针加一
(4)从串口接收一个字符(非中断方式)unsignedcharComInChar()
unsignedcharInData;
RI);
//空语句判断字符是否收完
InData=SBUF;
//保存COM缓冲字符
//清RI
return(InData);
//返回收到的字符
(5)从串口接收一个定长字符串(非中断方式,只用于字符需有一个的idata字符串数组)//如unsignedchar*Str;
//unsignedchari[]="
abcd"
;
//InHandStr=&
i;
voidComInStr(unsignedchar*Str)
*Str=SBUF;
//保存字符
(6)向串口输出一个回车换行voidComOutEnter(void)
SBUF=0x00;
SBUF=0x0A;
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<
j++);
9.串口工作在工作方式1例程: