--------------------校验:_____________--------------------日期:_____________单片机与上位机通信协议的制定方法单片机与上位机通信协议的制定单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定!上行协议,即由单片机向上位机发送数据。下行协议,即由上位机向单片机发送数据。 而通信协议又要分固定长度和不定长度两种本文所介绍的协议属于简单的固定字长的通信协议! 下行协议由四个字节构成 1byte1byte1byte1byte BBHAAH(ORD_SATA) 单片机状态转换命令标识 01HEEH模式1:空闲 02HEEH模式2:温度采集 03HEEH模式3:温度采集向上位机传送采集值 04HEEH模式4:PWM测试BBHDDH(ORD_PWM)valueEEHPWM占空比值修改指令BBHFFH(ORD_TEM)valueEEH目标温度控制指令 上表是简单的上位机对单片机的控制指令下述函数是C#中封装的串口通信类中的发送函数的封装 mu(byteorderDef,bytedata)//参数1为命令字,参数二为要发送的数 //据,需要时可直接调用 { Byte[]BSendTemp=newByte[SEND_LENTH]; BSendTemp[0]=PRE; BSendTemp[1]=orderDef; BSendTemp[2]=data; BSendTemp[3]=END; (BSendTemp,0,SEND_LENTH); }下位机中用中断方式接收字符,语言,下面是串口接收数据中断ISR(USART_RXC_vect)//串口接收中断{ unsignedcharstatus,data; status=UCSRA; //**首先读取UCSRA的值,再读取UDR值,顺序不能颠倒,否则读取UDR后的UCSRA的 //值即会改变** data=UDR; if(!Uart_RecvFlag)//判断缓存中的数据是否读完,读完则接收指令 { if((status&((1<<FE)|(1<<PE)|(1<<DOR)))==0) { rx_buffer[rx_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(Ua
单片机与上位机通信协议的制定方法 来自淘豆网www.taodocs.com转载请标明出处.