完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
![]() 这是我做的一个简单的下位机程序,欢迎拍砖! 引用刘公公的一句话“能修改BUG的才是高手!” 希望大家以这个程序为跳板,都成为高手! 同志们,拿起你的板砖,拍过来! /*************************************************************************************************************/ /* 串口接收包程序 /* 功能:通过串口接收数据包 /* 作者:zsl /* 日期:猴年马月 /* 修改日期:xxxx xxxx /* 修改内容:增加注释 /* 通讯协议格式: 帧头(8bit) | 数据起始(8bit) | 数据域(32bit) | 数据尾 /* 0x55 | 0xaa | 高8 - 32bit:预留;0-7bit:控制led灯 | 0xee /* /*************************************************************************************************************/ #include #include "UART.h" #define LEN 16 /********状态机*************/ enum UartFsm { HEAD = 0, BEGIN, DATA, END, }; /********当前状态变量***********/ unsigned char gudState = 0; /********接收数据***********/ unsigned char ReceData[5]; /********串口接收缓冲***********/ unsigned char gaRXBuff[LEN]; /********接收队列头***********/ unsigned char gudHead = 0; /********接收队列尾***********/ unsigned char gudTail = 0; /********接收计数***********/ unsigned char gudCount = 0; /********接收完成标志***********/ unsigned char gudRxOK标志寄存器 = 0; /********错误标志***********/ unsigned char gudRxErr = 0; /********接收缓冲变量***********/ volatile unsigned char Buftemp = 0; /********************************/ /* 函数名称:GetData /* 说明: 从接收队列中取一个字节 /********************************/ unsigned char GetData() { unsigned char udVal; if(gudTail >= LEN) { gudTail = 0; } udVal = gaRXBuff[gudTail++]; return udVal; } /********************************/ /* 函数名称:GetFrmData /* 说 明:从数据包中取出数据域 /********************************/ void GetFrmData(unsigned char *pDat) { unsigned char i; if(gudTail == gudHead) return; for(i = 0; i < 4; i++) { pDat = GetData(); } } main() { init_UART(); P0 = 0xff; ReceData[4] = ' |