版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、avr单片机与上位机通信协议的制定(1)(2009-03-01 20:08:22) 转载标签:上位机avr串口通信协议cgcc杂谈分类: avr单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定!上行协议,即由单片机向上位机发送数据。下行协议,即由上位机向单片机发送数据。而通信协议又要分固定长度和不定长度两种本文所介绍的协议属于简单的固定字长的通信协议!下行协议由四个字节构成起始字pre命令字 ord值 val 结束字 end附注1byte 1byte 1byte 1byte bbhaah(ord_sata)单片机状态转换命令标识01h eeh 模式 1:空闲02h eeh 模式
2、2:温度采集03h eeh 模式 3:温度采集向上位机传送采集值04h eeh 模式 4:pwm 测试bbhddh(ord_pwm) valueeehpwm 占空比值修改指令bbhffh(ord_tem) valueeeh目标温度控制指令上表是简单的上位机对单片机的控制指令下述函数是c#中封装的串口通信类中的发送函数的封装public void sersendcommu(byte orderdef, byte data) /参数 1 为命令字,参数二为要发送的数据,需要时可直接调用 byte bsendtemp = new bytesend_lenth; bsendtemp0 = pre; b
3、sendtemp1 = orderdef; bsendtemp2 = data; bsendtemp3 = end; this.serialport1.write(bsendtemp, 0, send_lenth); 下位机中用中断方式接收字符,本文用的是gcc 语言,下面是串口接收数据中断 isr(usart_rxc_vect)/ 串口接收中断 unsigned charstatus,data; status =ucsra; /*首先读取 ucsra 的值,再读取udr 值,顺序不能颠倒,否则读取 udr 后的 ucsra 的/ 值即会改变 * data =udr; if(!uart_rec
4、vflag)/ 判断缓存中的数据是否读完,读完则接收指令 if (status&(1fe)|(1pe)|(1dor)=0) rx_bufferrx_counter=data; rx_counter+; switch(rx_counter) case1: if(data!=usart_begin_stx) rx_counter=0; break ; case4: rx_counter=0; if(data=usart_end_stx) uart_recvflag=1; break ; 在单片机主循环程序的最前部分进行指令译码if(uart_recvflag)/ 接收到命令 switch(
5、rx_buffer1) case0 xaa: / 单片机状态命令控制; ucworkstatue=rx_buffer2;/ 指令数据break ; case0 xdd: /pwm值修改指令 ocr2=rx_buffer2; break ; case0 xff: / 初始温度设定break ; uart_recvflag=0; / 随后进行执行指令switch(ucworkstatue) case1: / 空闲模式break ; case2: / 测量模式,但不输出break ; case3: / 测量模式,由串口输出break ; case4: /pwm输出测试break ; default:
6、 break ; 这样就可以利用串口对单片机进行在线命令控制了;/2009年 7 月 21 日重新编辑 其实除了各种状态控制场合,我们大多在通信时是要传输浮点数的,很多人在传感器端乘个倍数,比如100,在上位机端除100 就可以进行保留两位小数的数据传输,这样不但耗时而且可传输范围还要小很多,这里介绍一种可用于串口通信的浮点数传输方法,将其嵌入到上面所介绍的协议中可以利用其中四个字节传输范围在负数的时候是从-3.402823e38 到-1.401298e-45,而在正数的时候是从1.401298e-45 到 3.402823e38 的浮点数。这在大多数工业控制串口数据采集场合是更能满足需要的。
7、用四个字节十六进制数表示单精度浮点数avr单片机与上位机通信协议的制定(2)上行协议的制定!和下行协议基本一致!在 avr 单片机程序中定义了串口通信输出缓冲区,缓冲区的字长正好为协议的长度; /串口发送缓冲区变量声明volatile unsigned char tx_buffertx_buffer_size;/ 定义串口发送缓冲区volatile unsigned char tx_wr_index=0,tx_rd_index=0,tx_counter=0;/rx_wr_index 写指针,rx_rd_index读指针 ,rx_counter缓冲区数据个数/usart 发送函数 void us
8、art_transmit(unsigned char data)/ 发送数据函数 while(tx_counter=tx_buffer_size);/ 输出缓冲区满,等待 asm(cli); if(tx_counter|(ucsra & data_register_empty)=0) tx_buffertx_wr_index=data; if(+tx_wr_index=tx_buffer_size) tx_wr_index=0; +tx_counter; else udr = data; asm(sei); /发送中断服务程序isr(usart_txc_vect)/usart 发送数据
9、中断 if(tx_counter) -tx_counter; udr=tx_buffertx_rd_index; if(+tx_rd_index=tx_buffer_size) tx_rd_index=0; 在 c#编写的上位机中,利用串口接收事件响应方法定义serialport1.receivedbytesthreshold = receive_lenth;在时间响应事件中调用协议分析处理函数serialportcaculate()来分析协议private void serialport1_datareceived(object sender, serialdatareceivedevent
10、args e) this.label_dispzednum.invoke(new methodinvoker(delegate /匿名方法int innumsdata=0; try innumsdata = this.serialport1.bytestoread;this.lab_serial_bufin_diplay.text = innumsdata.tostring(); /串行数据处理/图像显示byte dataid = 0 x00; double temp = this.serialportcaculate(ref dataid); switch(dataid) case temval: break; default: this.serialport1.discardinbuffer() break; catch ); /接收转换协议 ,接收数据时直接调用private double serialportcaculate(ref byte dataid) byte breceivetemp = new bytereceive_lenth; for (int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025黑龙江省水利水电集团有限公司社会招聘173人笔试历年参考题库附带答案详解
- 2025黑龙江哈尔滨工业大学交通科学与工程学院拟派遣人员笔试历年参考题库附带答案详解
- 2025陕西西安建工绿色建筑集团有限公司招聘66人笔试历年参考题库附带答案详解
- 2026年江苏财经职业技术学院单招职业倾向性测试题库及答案1套
- 2026年潍坊护理职业学院单招职业倾向性测试必刷测试卷及答案1套
- 2026年山东劳动职业技术学院单招职业技能测试题库附答案
- 2026年安徽艺术职业学院单招职业适应性测试必刷测试卷必考题
- 2026年陕西交通职业技术学院单招职业技能测试题库附答案
- 2025湖南张家界桑植县交通旅游建设投资集团有限公司招聘2人笔试历年参考题库附带答案详解
- 2025浙江绍兴市镜湖开发集团有限公司下属国有企业招聘项目制员工笔试以及人员笔试历年常考点试题专练附带答案详解试卷2套
- 中西翻译简史第5章知识分享
- 2023年甘肃二造《建设工程计量与计价实务(土木建筑)》知识点必练100题(含详解)
- 地球物理学课件
- 初三满分的作文600字5篇
- 工程案例-金域华府住宅小区
- 肾病综合征护理查房课件-
- 感官第一节感受器及一般生理特性
- 古代文化常识-古代天文篇课件
- 住建部新发布建设项目总投资费用项目组成详细
- 卫生院关于宣传贯彻《医疗保障基金使用监督管理条例》的工作总结
- 冠状动脉弯曲钙化病变分型及锚定介入新技术
评论
0/150
提交评论