全球旧事资料 分类
(合同制定方法)单片机与上位机通信协议的制定
f单片机和上位机通信协议的制定
单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定!上行协议,即由单片机向上位机发送数据。下行协议,即由上位机向单片机发送数据。而通信协议又要分固定长度和不定长度俩种本文所介绍的协议属于简单的固定字长的通信协议!下行协议由四个字节构成
1byte1byteBBHAAHORD_SATA
BBHBBH
DDHORD_PWMFFHORD_TEM
1byte1byte
单片机状态转换命令标识
01H
EEH
模式1:空闲
02H
EEH
模式2:温度采集
03H
EEH
模式3:温度采集向上位机传送采集值
04H
EEH
模式4:PWM测试
valueEEH
PWM占空比值修改指令
valueEEH
目标温度控制指令
f上表是简单的上位机对单片机的控制指令下述函数是C中封装的串口通信类中的发送函数的封装publicvoidSerSe
dCommubyteorderDefbytedata参数1为命令字,参数二为要发送的数据,需要时可直接调用ByteBSe
dTemp
ewByteSEND_LENTHBSe
dTemp0PREBSe
dTemp1orderDefBSe
dTemp2dataBSe
dTemp3ENDthisserialPort1WriteBSe
dTemp0SEND_LENTH下位机中用中断方式接收字符,本文用的是GCC语言,下面是串口接收数据中断ISRUSART_RXC_vect串口接收中断
fu
sig
edcharstatusdatastatusUCSRA首先读取UCSRA的值,再读取UDR值,顺序不能颠倒,否则读取UDR后的UCSRA的值即会改变dataUDRifUart_RecvFlag判断缓存中的数据是否读完,读完则接收指令ifstatus1FE1PE1DOR0rx_bufferrx_cou
terdatarx_cou
terswitchrx_cou
tercase1ifdataUSART_BEGIN_STX
frx_cou
ter0breakcase4rx_cou
ter0ifdataUSART_END_STXUart_RecvFlag1break于单片机主循环程序的最前部分进行指令译码ifUart_RecvFlag接收到命令switchrx_buffer1
fcase0xAA单片机状态命令控制;ucWorkStatuerx_buffer2指令数据breakcase0xDDPWM值修改指令OCR2rx_buffer2breakcase0xFF初始温度设定breakUart_RecvFlag0随后进行执行指令switchucWorkStatue
fcase1空闲模式breakcase2测量模式,但不输出breakcase3测量模式,由串口输出breakcase4PWM输出测试breakdefaultbreak这样就能够利用串口对单片机进行于线命令控制了;上行协议的制定!和下行协议基本壹致!于AVR单片机程序中定义了串口通信输出缓冲区,缓冲区的字长正好为协议的长度
f串口发送缓冲区变量声明volatileu
sig
edchartx_bufferTX_BUFFER_SIZE定义串口发送缓冲区volatileu
sig
edchartx_wr_i
dex0tx_rd_i
dex0tx_cou
ter0rx_wr_i
dex写指针rx_rd_i
dex读指针rx_cou
ter缓冲区数据个数USART发送函数voidUSART_Tra
smitu
r
好听全球资料 返回顶部