RS232串行通讯相关.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RS232串行通讯相关

RS232串行通相关 RS232接口定义: (1)载波检测(DCD) (2)接受数据(RXD) √ (3)发出数据(TXD) √ (4)数据终端准备好(DTR) (5)信号地线(SG) √ (6)数据准备好(DSR) (7)请求发送(RTS) (8)清除发送(CTS) (9)振铃指示(RI) RS232接口针脚: 图二. RS232接头针脚定义 51的串行口通信: 串行口控制寄存器SCON(98H): SM0,SM1:用于设置串口的工作方式,进行工作方式的选择; 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读走。 REN:允许串行接收位; REN=0,禁止串行接收; REN=1,允许串行接收。 TB8:在方式2,3中,是发送机要发送的第九位数据; 可做奇偶校验位,由软件置位或复位。 在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时,TB8为1,数据帧时,TB8为0。 RB8: 在方式2,3中,接收来自发送机的第9位数据(TB8); TI:发送中断标志,发送一帧结束,TI=1,必须软件清零; RI:接收中断标志,接收一帧结束,RI=1,必须软件清零。 电源功能寄存器PCON(87H): SMOD,波特率倍增位,在方式1、2、3时,波特率与SMOD有关: SMOD=1时,波特率提高一倍; 复位时,SMOD=0。 串行口的四种工作方式: 方式0:8位同步移位寄存器(用于I/O扩展);为同步工作方式,不能用于双机通信,只能与外界的同步移位寄存器配套进行工作;如果想进行异步串行通信,只能使用方式1,2,3进行。使用方式0实现数据的移位输入输出时,实际上是把串行口变成为并行口使用。串行口作为并行输出口使用时,要有“串入并出”的移位寄存器(例如 CD4094或74LS164、74HC164等)配合。 图三 方式0串口通信电路连接 方式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 接收数据帧时序 方式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接收数据帧时序 波特率的计算: 串口初始化的具体步骤: 串口初始化的一般步骤包括: 确定T1的工作方式(编程TMOD寄存器); 计算T1的初值,装载TH1、TL1; 启动T1(编程TCON中的TR1位); 确定串行口控制(编程SCON寄存器); 串行口在中断方式工作时,还要进行中断设置(编程IE、IP寄存器)。 51串口通信相关例程: 串口初始化,晶振为11.0592M,方式1,波特率300-57600。 void InitCom(unsigned char BaudRate) { unsigned char THTL; switch (BaudRate) { case 1: THTL = 64; break; //波特率300 case 2: THTL = 160; break; //600 case 3: THTL = 208; break; //1200 case 4: THTL = 232; break; //2400 case 5: THTL = 244; break; //4800 case 6: THTL = 250; break; /

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档