单片机串口实验

更新时间:2023-10-23 10:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机课程设计报告

实验一 串口通信实验 系 别 年 级 专 业

班 级 班 学 号 学生姓名

指导教师 设计时间

常熟理工学院课程设计报告

目录

1.题目...................................2

2.实验要求...............................2

2.1实验目的............................2

2.2实验内容............................2

3.总体设计 .............................. 4

2.1硬件设计 ........................... 4

2.2软件设计 ........................... 8

4. 运行结果 ............................ 12

5.结论 ................................. 12

6.心得体会 ............................. 13

7.参考文献 ............ 错误!未定义书签。3

1

常熟理工学院课程设计报告

1.题目

串口通信实验

2. 实验要求

2.1:实验目的

1、 掌握8051单片机串行口工作原理; 2、掌握串口编程与调试方法;

3、了解Modbus协议及其应用;

4、了解数据传输的可靠性措施与CRC校验实现方法; 5、掌握8051单片机的Modbus编程;

2.2:实验内容

1、 串口功能验证:PC机与8051单片机通信实验:若PC机发送数据a,则单片机接收到a后向

PC机发送a+1;用串口工具软件(sscom32)观察通信结果。

设计思路: PC机采用主动方式,单片机为被动方式,因单片机端不知道PC何时发数据,若单片机采用查询方式接收,会产生接收不到PC数据而“死等”的现象。因此为了不影响单片机端的主程序运行,单片机应采用中断方式接收;

参考源码: //中断服务程序

unsigned char Rxd_Data;//串口接收数据

unsigned char Rxd_Over;//串口接收完成标志 //串口初始化函数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 UART_ISR(void) interrupt 4 {

if(RI)//接收产生的中断 { RI=0;//清接收标志 Rxd_Data=SBUF; //接收数据 Rxd_Over=1; //置Rxd_Over标志 }

2

常熟理工学院课程设计报告

}

void main(void) {

Sbuf_Init(); //串口初始化 while(1) { if(Rxd_Over) //若接收完成 { //串口数据发送 SBUF=a+1; //串口发送 while(TI==0); //等待发送完成 TI=0;//清发送标志 Rxd_Over=0; //清Rxd_Over标志 } } }

利用此程序可以判断串口通信是否正常。串口通信失败的原因有如下几种情况:

(1) 串口线未连接,用一根导线将串口线2,3脚短接,scomm32工具发送数据,根据能否接收数

据判断串口线连接是否正常;

(2) 最小系统板硬件故障:借助示波器观察单片机的串口接收与发送CMOS电平与RS232电平可排

查硬件故障;

(3) 软件问题。

2、 类Modbus协议实现 (1)上位机发送: 字节1 字节2 0x01 0x03 字节3 0x02 字节4 a 字节5 数据2 字节6 数据3 字节7 CRC16_L 字节8 CRC16_H 上位机按如上8字节定长方式发送数据a,采用CRC16检验,CRC16检验可采用查表法或即时计算法(已在CRC16.c与CRC16.h中提供,可直接调用),其中上位机的CRC16可采用提供的ModBus CRC校验码计算程序工具先计算得到。 (2)下位机接收后回送

下位机中断方式接收到8字节数据后进行CRC计算并与接收的CRC16数据进行比较,若一致则回应: 字节1 字节2 0x01 0x03 字节3 0x02 字节3 0x02 字节4 a+1 字节4 * 字节5 数据2 字节5 数据2 字节6 字节7 字节8 CRC16_H 字节8 CRC16_H 0(成功) CRC16_L 字节6 0xff(失败) 字节7 CRC16_L 若接收数据错误则回应 字节1 字节2 0x01 0x03

校验可采用查表法或即时计算法得到。

unsigned short int CRC16_S(unsigned char *buf,unsigned char length) //查表法

unsigned short int CRC16_C(unsigned char *buf,unsigned char length) //即时计算法

3

常熟理工学院课程设计报告

3.总体设计

3.1硬件设计

1.串口结构

4

本文来源:https://www.bwwdw.com/article/squf.html

Top