版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机与上位机通信协议的制定而通信协议又要分固定长度和不定长度两种本文所介绍的协议属于简单的固定字长的通信协议!下行协议由四个字节构成起始字PRE命令字ORD值VAL终止字END .附注1byte1byte1byte1byteBBHAAH(ORD SATA)01H1EEH模式1:闲暇02HEEH模式2:温度米集03HEEH模式3:温度米集向上位机传送米集值:04H1EEH1模式4: PWM测试BBHDDH(ORD PWM)valueEEHPWM占空比值修改指令BBHFFH(ORD TEM)valueEEH目标温度操纵指令下述函数是C#中封装的串口通信类中的发送函数的封装public void
2、SerSendCommu(byte orderDef, byte data)参数1为命令字,参数二为要发送的数据,需要时可直截了当调用Byte BSendTemp = new ByteSEND_LENTH;BSe ndTemp0 = PRE;BSe ndTemp1 = orderDef;BSe ndTemp2 = data;BSe ndTemp3 = END;this.serialPort1.Write(BSendTemp, 0, SEND_LENTH);下位机中用中断方式接收字符,本文用的是 GCC 语言,下面是串口接 收数据中断ISR(USART_RXC_vect)/ 串口接收中断unsi
3、gned char status,data;status = UCSRA;/* 第一读取 UCSRA 的值,再读取 UDR 值,顺序不能颠倒,否则读取 UDR 后的 UCSRA 的/值即会改变 *data = UDR;if(!Uart_RecvFlag)/ 判定缓存中的数据是否读完,读完则接收指令 if(status&(1FE)|(1PE)|(1DOR)=0) rx_bufferrx_counter=data;rx_counter+;switch(rx_counter)case 1:if(data!=USART_BEGIN_STX) rx_counter=0; break;case 4:rx_
4、counter=0;if(data=USART_END_STX)Uart_RecvFlag=1;break;break;case 0xDD:/PWM 值修改指令OCR2=rx_buffer2;break;case OxFF:/初始温度设定break;Uart_RecvFlag=0;/随后进行执行指令 上行协议的制定! 和下行协议差不多一致!/串口发送缓冲区变量声明volatile unsigned char tx_bufferTX_BUFFER_SIZE;/ 定义串口发送缓冲区 volatile unsigned char tx_wr_index=0,tx_rd_index=0,tx_coun
5、ter=0;/rx_wr_in dex写指针,rx_rdndex读指针,rx_counter缓冲区数据个数/USART 发送函数void USART_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;elseU
6、DR = data;asm(sei);/发送中断服务程序ISR(USART_TXC_vect)/USART 发送数据中断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 serialPor
7、t1_DataReceived(object sender, SerialDataReceivedEventArgs e)voker(delegate1.BytesToRead;t = inNumSData.ToString();erialPortCaculate(ref dataID);VAL:this.label_dispzedNum.Invoke(new MethodIn/匿名方法int inNumSData=0;tryinNumSData = this.serialPortthis.lab_serial_bufin_diplay.Tex/串行数据处理/图像显示byte dataID = 0x00; double temp = this.sswitch(dataID)case TEMbreak;default:t his.serialPort1.DiscardInBuffer()br eak;catch );/ 接收转换协议 ,接收数据时直截了当调用 private double serialPortCaculate(ref byte dataID) Byte BReceiveTemp = new ByteRECEIVE_LENTH;for (int i = 0; i RECEIVE_LENTH; i+)/ 接 收定长数据字符串
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老板签约艺人合同范本
- 船艇制造销售合同范本
- 装修分项付款合同范本
- 装修合同范本补充合同
- 设备仪器转让合同范本
- 设计制作加工合同范本
- 试油工程劳务合同范本
- 豪车半价出售合同范本
- 购买样品衣服合同范本
- 贷款抵押房子合同范本
- 全过程工程咨询管理服务方案投标方案(技术方案)
- 《师范硬笔书法教程(第2版)》全套教学课件
- 三门峡水利工程案例分析工程伦理
- 学前教育职业生涯人物访谈
- 基本消防知识考试题库200题(通用版)
- 心衰病慢性心力衰竭中医诊疗方案
- 视频监控系统调试记录
- 矩阵论智慧树知到课后章节答案2023年下哈尔滨工程大学
- 少先队辅导员大赛知识竞赛题库含答案
- 富氧节能环保燃烧技术介绍
- 例谈初中道法学科指向核心素养课堂教学的达成 论文
评论
0/150
提交评论