- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章串行数据通信报告
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 7.6. 2 PC机的串行口 PC机通常有1~2个串行通信接口,采用DB25型连接器。虽然RS-232定义了25脚信号标准,但实际进行异步通信时,只需9个电压信号:2个数据信号,6个控制信号,1个信号地线。 右表是PC机9脚串口的引脚定义。 图10-1-3 PC机串口DB-9引脚 7.6.3 单片机与PC机通信应用实例 7.6.3.1电路原理图 7.6.3.2 软件设计 通信约定:双方均采用8位数据位,一个停止位,波特率为110,无奇偶校验方式。PC机发送数据采用查询方式,每发送完一个元素后便等待8051将接收到的数据回传。若发送的数据和接收到的数据相等,则串行通信正确,否则,通信有错误。8051采取中断方式接收数据,使用方式1。 #includereg51.h #define uchar unsigned char uchar idata buf[10] _at_ 0x40 ; //保存接收的数据 void init(void) //串行口初始化 {TMOD=0x20; TH1=0x71;TL1=0x71; //设定波特率110bps,6MHz晶振 PCON=0x00;// TR1=1; //启动T1 EA=1; ES=1; //允许串口中断 SCON=0x50; //串行口工作在方式1,并允许接收 } C51源程序 /*接收程序*/ void receive(void) interrupt 4 using 0 { uchar idata *p=buf; RI=0;ES=0; //关串口中断 while((SBUF^0xff)!=0) //判断是否通信结束 {*p++=SBUF; //保存数据到buf数组 while(RI==0);RI=0; } ES=1; } /*主程序*/ void main(void) { init(); while(1); } 通信双方必须具有相同的数据收发格式及传送速率(波特率)。 为了保证通信的顺利进行,双方事先必须约定通信协议。 作 业 某MCS-51多机通信系统要求主、从机均采取中断方式通信,设fosc=12MHz, 通信速率4800bps.主机每次通信时先确定从机,然后将片内RAM中30H单元开始的10个数据发给指定的从机。编写主、从机的程序。 * * * * * * * * * * * * * * * * * * * * * * * * * * * 续: AJMP BEND2 ;接收完转BEND2 BEND1: INC DPTR DEC R7 BEND2: RETI ;中断返回 (3) 方式2和方式3: 9位数据异步通讯方式 1.一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。 第9位数据位在TB8/RB8中,常用作校验位和多机通讯 标识位。 2. RXD:接收数据端, TXD:发送数据端。 3.波特率:方式2:B=(2SMOD/64)×fosc 。 方式3:B=(2SMOD/32)×T1溢出率(与方式1相同)。 4.发送:先装入TB8,写入SBUF并启动发送,发送结束,TI=1。 接收:REN=1,允许接收。 接收完一帧,若RI=0且第9位为1 (或SM2=0),将接收数据 装入接收SBUF,第9位装入RB8,使RI=1;否则丢弃接收数据, 不置位RI。 (a) 发送时序图 写入 SBUF TXD输出 TI RXD输入 (b) 接收时序图 RI D0 D1 D2 D3 D4 D5 D6 TB8 停止位 起始位 D7 D0 D1 D2 D3 D4 D5 D6 RB8 停止位 起始位 D7 检测 负跳变 时序图: (4)计算波特率: 方式0为固定波特率:B=fosc/12 方式2可选两种波特率: B=(2SMOD /64)×fosc 方式1、3为可变波特率,用T1作波特率发生器。 B=(2SMOD/32)×T1溢出率 T1为方式2的时间常数: X = 28 - t/T 溢出时间: t= (28 -X)T = (28 -X)×12/ fosc T1溢出率=1/t= fosc /[12×(2n -X)] ? 波特率B=(2SMOD /32)×fosc/[12×(28-X)] 串行口方式1、3,根据波特率选择T1工作方式,计算时间常数。 T1选方式2: TH1= X = 28 - fosc/12×2SM
文档评论(0)