串口通信实验报告

上传人:xins****2008 文档编号:109517547 上传时间:2019-10-26 格式:DOC 页数:11 大小:238KB
返回 下载 相关 举报
串口通信实验报告_第1页
第1页 / 共11页
串口通信实验报告_第2页
第2页 / 共11页
串口通信实验报告_第3页
第3页 / 共11页
串口通信实验报告_第4页
第4页 / 共11页
串口通信实验报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《串口通信实验报告》由会员分享,可在线阅读,更多相关《串口通信实验报告(11页珍藏版)》请在金锄头文库上搜索。

1、常熟理工学院课程设计报告 单片机实验报告 课程名称 单片机技术与应用 实验名称 串口通信实验 专 业 光电信息工程 班 级 光电121班 学 号 050312113 姓 名 蒯玄 实验地点 躬行楼528 实验日期 2015.5.28 一、实验目的1、掌握8051单片机串行口工作原理;2、掌握串口编程与调试方法;3、了解Modbus协议及其应用;4、了解数据传输的可靠性措施与CRC校验实现方法;5、掌握8051单片机的Modbus编程;二、实验仪器编号仪器设备数量单位1WD990微机电源1个28051最小系统板1套3键盘显示接口板1块4万用表1套5示波器1台三、实验内容 串口功能验证:PC机与8

2、051单片机通信实验:若PC机发送数据a,则单片机接收a后向PC机发送a+1;用串口工具软件(sscom32)观察通信结果。 设计思路: PC机采用主动方式,单片机为被动方式,因单片机端不知道PC何时发数据,若单片机采用查询方式接收,会产生接收不到PC数据而“死等”的现象。因此为了不影响单片机端的主程序运行,单片机应采用中断方式接收; 参考源码:/中断服务程序unsigned char Rxd_Data;/串口接收数据unsigned char Rxd_Over;/串口接收完成标志/串口初始化函数9600bpsvoid Sbuf_Init(void) SCON=0x50; /10位方式/波特率

3、设置PCON=0x00; /波特率不倍增 TMOD=(TMOD&0x0f)|0x20;/T1方式2 TH1=0xfd; /T1计数初值 TL1=0xfd;ES=1;EA=1;/串口中断使能 TR1=1; /启动定时器 void UART_ISR(void) interrupt 4 if(RI)/接收产生的中断RI=0;/清接收标志Rxd_Data=SBUF; /接收数据Rxd_Over=1;/置Rxd_Over标志 void main(void) Sbuf_Init(); /串口初始化while(1)if(Rxd_Over) /若接收完成/串口数据发送SBUF=a+1; /串口发送while(

4、TI=0); /等待发送完成TI=0;/清发送标志Rxd_Over=0; /清Rxd_Over标志利用此程序可以判断串口通信是否正常。串口通信失败的原因有如下几种情况:(1)串口线未连接,用一根导线将串口线2,3脚短接,scomm32工具发送数据,根据能否接收数据判断串口线连接是否正常;(2)最小系统板硬件故障:借助示波器观察单片机的串口接收与发送CMOS电平与RS232电平可排查硬件故障;(3)软件问题。4、 预习要求 完成实验源码的预编写。 5、 实验步骤 使用串口前,应对它进行初始化。 设置串行口工作方式控制(SCON); 设置串口通信波特率:T1(TMOD、TH1、TL1、ET1、EA

5、、TR1 、PCON); 串口中断使能(ES、EA)。具体步骤如下:(1)设置串行口工作方式控制(SCON)如11位波特率可变的异步通信方式:SCONSM0SM1SM2RENTB8RB8TIRISCON=0xd0;(11010000)(2)借助T1初使化通信波特率(TMOD)PCONSMOD-87HTMODGATEC/T#M1M0GATEC/T#M1M089HBaud=2SMOD(T1溢出率/32) 令SMOD=0,则9600=1/(n*12/fosc*32) ,若fosc11.0592则n=3T1:采用方式2(8位自动载入)即:PCON=0x00; TMOD=(TMOD&0x0f)|0x20

6、; TH1=0xfd; TL1=0xfd; TR1=1;6、 实验过程程序部分:#include reg51.h#include crc16.h#define MODBUS_ADDR 0x01#define MODBUS_RD 0x03#define MODBUS_WDATA1 0x02unsigned char RxD_buf8,TxD_buf8;unsigned char RX_OVER; /全局变量:1:串口接收完成标志/ 中断服务程序/void UART_ISR(void) interrupt 4 static unsigned char count=0;static unsigned

7、 char pre_data=0;static unsigned char mid_data=0;static unsigned char now_data=0;/if(RI)now_data=SBUF;if(pre_data=MODBUS_ADDR & mid_data=MODBUS_RD & now_data=MODBUS_WDATA1)RxD_buf0 = pre_data;RxD_buf1 = mid_data;RxD_buf2 = now_data;count=3;elseRxD_bufcount = now_data;count+;if(count=8)count=0;RX_OVE

8、R=1;/置接收完成标志pre_data = mid_data;mid_data = now_data; RI=0;/串口初始化函数:波特率为9600bps/void Sbuf_Init(void) SCON=0x50; /10位方式/波特率设置PCON=0x00; /波特率不倍增 TMOD=(TMOD&0x0f)|0x20;/T1方式2 TH1=0xfd; /T1计数初值 TL1=0xfd;ES=1;EA=1;/串口中断使能 TR1=1; /启动定时器 /主程序/void main(void) unsigned short int crc_value;/串口初始化函数调用unsigned i

9、nt i;while(1)if(RX_OVER) /若接收完成/先求CRC16校验crc_value=CRC16_C(RxD_buf,6); /对接收到的前6个字节求CRC16校验/低字节在前,高字节在后if(crc_value%256)=TxD_buf6 & crc_value/256=TxD_buf7)/CRC16校验成功/回传:字节1字节2字节3字节4字节5字节6字节7字节8/ 0x01 0x03 0x02 a+1数据2 0(成功)CRC16_LCRC16_H/此处添加TxD_buf0TxD_buf5赋值,计算CRC16,串口查询方式发送代码TxD_buf0 = 0x01;TxD_buf

10、1 = 0x03;TxD_buf2 = 0x02;TxD_buf3 = RxD_buf3+1;TxD_buf4 = 0x00;TxD_buf5 = 0x00;crc_value = CRC16_C(RxD_buf,6);TxD_buf6 = crc_value%256;TxD_buf7 = crc_value/256;for(i=0;i6;i+)SBUF = TxD_bufi;while(TI=0);TI = 0;else/CRC校验失败/回传:字节1字节2字节3字节4字节5字节6 字节7 字节8/ 0x01 0x03 0x02 * 数据2 0xff(成功)CRC16_LCRC16_H/此处添加TxD_buf0TxD_buf5赋值,计算CRC16,串口查询方式发送代码TxD_buf0 = 0x01;TxD_buf1 = 0x03;TxD_buf2 = 0x02;TxD_buf3 = RxD_buf3;TxD_buf4 = 0x00;TxD_buf5 = 0xff;crc_value = CRC16_C(RxD_buf,6);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号