已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常熟理工学院课程设计报告 单片机课程设计报告 实验一 串口通信实验 系 别 年 级 专 业 班 级 班 学 号 学生姓名 指导教师 设计时间 目录1.题目.22.实验要求.2 2.1实验目的.2 2.2实验内容.23.总体设计42.1硬件设计42.2软件设计84. 运行结果125.结论126.心得体会137.参考文献131. 题目串口通信实验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;/串口接收完成标志/串口初始化函数9600bpsvoid 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标志 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字节3字节4字节5字节6字节7字节80x010x030x02a数据2数据3CRC16_LCRC16_H上位机按如上8字节定长方式发送数据a,采用CRC16检验,CRC16检验可采用查表法或即时计算法(已在CRC16.c与CRC16.h中提供,可直接调用),其中上位机的CRC16可采用提供的ModBus CRC校验码计算程序工具先计算得到。(2)下位机接收后回送下位机中断方式接收到8字节数据后进行CRC计算并与接收的CRC16数据进行比较,若一致则回应:字节1字节2字节3字节4字节5字节6字节7字节80x010x030x02a+1数据20(成功)CRC16_LCRC16_H若接收数据错误则回应字节1字节2字节3字节4字节5字节6字节7字节80x010x030x02*数据20xff(失败)CRC16_LCRC16_H校验可采用查表法或即时计算法得到。unsigned short int CRC16_S(unsigned char *buf,unsigned char length) /查表法unsigned short int CRC16_C(unsigned char *buf,unsigned char length) /即时计算法3.总体设计3.1硬件设计1.串口结构 TB8(Transmit Bit 8)在方式2、3中,将被发送数据的第9位 (奇偶校验位等);RB8(Receive Bit 8第9位) TI、RI发送/接收结束标志位,软件(手工)清零方式0:移位寄存器输入输出方式。数据通过RXD输入输出,TXD输出移位脉冲CP。该方式下,收发数据为8位,低位在前。波特率固定(fosc12)。方式1:10位异步方式。10位1位起始位(0)+8位数据位+1位停止位(1)。其中起始位和停止位在发送时自动插入。发送:SBUFa;发送条件:TI0,发送完TI1。接收:bSBUF;接收条件:SCON中的RENl;RI0;SM20或接收到的停止位为l。本次接收有效,将接收到的8位数据装入SBUF中,并将停止位(1)装入RB8中;否则放弃接收结果。发送与接收结束标志必须手工清0:TI0;RI0;方式1的波特率可变,计算公式:Baud=2SMOD(T1的溢出率)32。方式2、3:相同:都是11位异步方式。11位1位起始位(0)+9位数据位+1位停止位(1)。其中第9位数据放在TB8、RB8中,发送前可通过软件对TB8赋值(奇偶校验位等)。它们的操作过程完全一样。不同:波特率可变否。方式2 Baud=2SMODfosc64;方式3 Baud=2SMOD(T1溢出率/32) 。发送:SBUFa;第9位数据(TB8)输出之后,置位TI1。接收:bSBUF;接收前提:REN=1;接收到第9位数据后,如果同时满足:(1)RI0;(2)SM20或接收到的第9位为1,则将已接收的数据装入SBUF和RB8,并置位RI;如果条件不满足,则接收无效。8051第9位可作为数据的奇偶校验位、多机通信中的地址、数据标志位等。(4)串行中断原理执行串口发送指令SBUF=a;通过TXD口发送串行数据,发送结束后CPU自动产生发送结束标志(TI=1);此时若串行中断使能,则程序立即停止当前程序,跳转置中断号为4的串行口中断入口地址(0x0023),执行中断服务程序void UART_ISR(void) interrupt 4 ,CPU不具有自动清零功能;同样,若串口在RXD引脚接收到数据,硬件自动产生接收结束标志(RI=1),若此时若串行中断使能(ES=1,EA=1),则程序立即停止当前程序,跳转置中断号为4的串行口中断入口地址(0x0023),执行中断服务程序void UART_ISR(void) interrupt 4 ,CPU不具有自动清零功能,可通过b=SBUF;指令取出暂存在数据缓冲区内的数据。因为接收与发送结束都能进入同一中断,因此在不具有自动清标志功能,需加判断标志语句。4.串口操作步骤使用串口前,应对它进行初始化。设置串行口工作方式控制(SCON);设置串口通信波特率:T1(TMOD、TH1、TL1、ET1、EA、TR1 、PCON);串口中断使能(ES、EA)。具体步骤如下:(1)设置串行口工作方式控制(SCON)如11位波特率可变的异步通信方式:SCONSM0SM1SM2RENTB8RB8TIRISCON=0xd0;()(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; TH1=0xfd;TL1=0xfd;TR1=1;3.2软件设计源程序:#include reg51.h#includecrc16.hextern unsigned short int CRC16_S(unsigned char *buf,unsigned char length);extern unsigned short int CRC16_C(unsigned char *buf,unsigned char length);unsigned char Rxd_buf8,Txd_buf8;/中断服务程序/unsigned char Rxd_Data;/串口接收数据unsigned char Rxd_Over;/串口接收完成标志/串口初始化函数9600bpsvoid 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 static unsigned char count=0;static unsigned char pre_data=0,mid_data=0,now_data;if(RI)/接收产生的中断RI=0;/清接收标志now_data=SBUF;if(pre_data=0x01&mid_data=0x03&now_data=0x02)Rxd_buf0=0x01;Rxd_buf1=0x03;Rxd_buf2=0x02;count=3;elseRxd_bufcount=now_data;count+;if(count=8)count=0;Rxd_Over=1;pre_data=mid_data;mid_data=now_data; void delay(unsigned int n)unsigned int i;for(i=0;in;i+);void main(void) unsigned char i;unsigned int crc_value;Sbuf_Init(); /串口初始化while(1)/串口数据发送if(Rxd_Over) /若接收完成crc_value=CRC16_S(Rxd_buf,6);Rxd_Over=0;if(crc_value%256=Rxd_buf6&crc_value/256=Rxd_buf7)/if(1)Txd_buf0=0x01;Txd_buf1=0x03;Txd_buf2=0x02;Txd_buf3=Rxd_buf3+1;Txd_buf4=0x00;Txd_buf5=0x00;crc_value=CRC16_S(Txd_buf,6);Txd_buf6=crc_value%256;Txd_buf7=crc_value/256;for(i=0;i8;i+)SBUF=Txd_bufi;while(TI=0) ;T1=0;delay(20);elseTxd_buf0=0x01;Txd_buf1=0x03;Txd_buf2=0x02;Txd_buf3=Rxd_buf3+1;Txd_buf4=0x00;Txd_buf5=0xff;crc_value=CRC16_S(Txd_buf,6);Txd_buf6=crc_value%256;Txd_buf7=crc_value/256;for(i=0;i8;i+)SBUF=Txd_bufi;while(TI=0) ;T1=0;delay(20);4.运行结果 正确串口输出 错误的串口输出5.结论 利用单片机进行串口的连接,输入与输出。编写程序,实现加一功能,当输入错误时,串口输出FF,当输入正确时,输出自动加一,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《聊聊品牌那些事》课件
- 《视频监控学习资料》课件
- 协调科护士工作总结
- 家居装饰行业行政后勤工作总结
- 银行行业保安工作总结
- 黑龙江省哈尔滨市平房区2023-2024学年九年级上学期期末调研测试化学试卷
- 财务工作项目落实总结
- 旅游接待员工作总结
- 温泉景区服务员工作总结
- 《清华土力学》课件
- 阳台改造装修合同范本3篇
- 城镇开发边界内详细规划编制技术指南解读
- 曲线与曲面积分练习题含答案
- 《ISO56001-2024创新管理体系 - 要求》之25:“9绩效评价-9.2内部审核”解读和应用指导材料(雷泽佳编制-2024)
- 2023年广西职业院校技能大赛中职组《分布式智能设备组网技术》赛项样题
- 国家开放大学本科《西方行政学说》期末纸质考试总题库珍藏版
- 2024至2030年中国甲醇内燃机行业发展监测及投资战略规划报告
- 海南省琼海市五年级数学期末自测模拟试题详细答案和解析
- 垃圾清运服务投标方案技术方案
- 电子工程师职位合同
- 2025届青海省西宁二十一中学七年级数学第一学期期末考试试题含解析
评论
0/150
提交评论