简易串口通信协议代码sep4020
来源:互联网 发布:java语言程序设计 编辑:程序博客网 时间:2024/05/06 23:27
周末两天时间把手头项目的简单RS232通信协议实现了。
协议主要有报头、数据长度、数据内容、校验和构成。
程序每收到一帧数据,响应一次中断。用了一个长度50的数组作为uart循环接收。
虽然没什么难度,还是很开心~~~ 拿出来晒一晒,如果能对读者有帮助就更开心了。
欢迎指正。
void RdaIsrUart2(void) //用来实现读取接收FIFO中的数据 并进行处理
{//U8 rec_temp;
U8 i=0; U8 j=0; U8 sum;
U32 message_Flag=0;
U8 distance;
Uart2_rev_buff[Write]=(U8)*(RP)(UART2_RXFIFO);//数据接收并存入Uart2_rev_buff
//TxData(&Write,1); 验证成功
//TxData(Uart2_rev_buff+Write,1);验证成功
if(Read==Write)//此时无需判断 直接write++ 等待下一个数据
{Write++;return;}
next:message_Flag=CheckMessageHead(Read);//报头判断结束
distance=CheckDistance(Read,Write);//计算read write距离结束
if(message_Flag==1)
{
//TxData(WHERE,1);///////////
message_Flag=0;
if(distance>=(Uart2_rev_buff[Read+1]+2))//判断长度是否够长 此时read在报头 write在新值
{
j=Read; //下一段为求和
sum=0; //不知为何清零很重要,没有默认为0
for(i=0;i<distance;i++)
{
sum=sum+Uart2_rev_buff[j];
j++;
if(j>49){j=0;}
}
//TxData(&sum,1); //已经见证成功
if(sum==Uart2_rev_buff[Write])//判断校验和
{
TxData(Right,3);
Read=Read+distance;//Read移到报文结束下一个数据此时有可能read=write-1
if(Read>49) Read=Read-50;
TxData(&Read,1);
TxData(&Write,1);
}
else
{
TxData(Wrong,3);
Read=Read+distance;//Read移到报文结束下一个数据此时有可能read=write-
if(Read>49) Read=Read-50;
TxData(Read,1);
TxData(Write,1);
}
}
else//长度不够 此时Read不变 Write++
{
Write++;
if(Write>49)
Write=0;
//TxData(Incomplete,4);验证成功
return;//返回------------------------------直接返回等待下一数据输入
}
}//是报头校验情况结束
//开始再去追报文头
distance=CheckDistance(Read,Write);//再次计算Read Write距离
if(distance>1) //需要追报头
{
if(Read>Write)//write指针走下一圈
{
while((message_Flag==0)&&(Read<50))
{
message_Flag=CheckMessageHead(Read);
Read++;
}
if(Read==50) Read=0; //此时有没有可能read=write????
if(message_Flag==1)
{
Read--;
goto next;
}
else
{
goto next;
}
}
else
{
while((message_Flag==0)&&(Read<Write-1))//bimian 0c 00 这样的报文出错不必追到相等
{
Read++;
message_Flag=CheckMessageHead(Read);
}//结束时Read和Write可能相等
if(message_Flag==1)
{
goto next;
}
else
{
Write++;
if(Write>49) Write=0;
return;
}
}
}
else//此时distance小于=1 不需要追报头
{
Write++;
if(Write>49) Write=0;
return;
}
}
0 0
- 简易串口通信协议代码sep4020
- 简易串口读取代码
- SEP4020 PWM代码解读
- 串口通信协议
- 串口通信协议
- 串口通信协议
- 串口通信协议
- 串口通信协议
- 串口通信协议
- 串口通信协议
- 串口通信协议
- 串口通讯—通信协议
- RS-232串口通信协议
- RS422串口通信协议
- RS485串口通信协议
- 串口通信协议的定制
- RS-232串口通信协议
- 串口通信协议实现
- ArrayList的clone方法探索
- The Land of Justice
- Linux环境下编译CLucene
- dccdd
- GCC 编译使用动态链接库和静态链接库
- 简易串口通信协议代码sep4020
- bat命令行语法
- Activiti工作流之应用
- How Many Points of Intersection?
- 文件操作-标准I/O操作--getchar() getc()
- db file sequential read等待事件总结
- HTK搭建大词汇量连续语音识别系统(四)
- Searching for Nessy
- 两种主要MySQL表存储结构MyISAM和InnoDB比较