📄 protocol.c
字号:
#define _protocol_
#include "general.h"
#include "com.h"
/***********************************************************************
应答规则: 1.所有通讯由MCU发起;2.下位机必须应答
3.上位机根据情况发报告帧(正确y,重发n,放弃q)
共下面几种帧类型:
1.命令帧: "开始采集(s)","取消采集(e)","查询参数(p)"(MCU)
"正确回应(y)","请求重发(n)""放弃通信(q)"(DSP)
---------------------------------
帧头标志|帧类型|效验和|帧尾标志
'@' | 'x' | x | '\n'
1 | 1 | 2 | 1
-----------------------------------
2.数据帧: "光标位置(d)"、计算结果(r)"
"仪器常数(a)"、"纬度(l)"、"比例系数(c)"、"周期个数(m)"
"错误报告(f)"
-----------------------------------------
帧头标志|帧类型|数据内容|效验和|帧尾标志
'@' | 'x' | x | x | '\n'
1 | 1 | 1 | 2 | 1
------------------------------------------
*************************************************************************/
/*****************************************************************
pack按协议打包数据(发送,不中断)
*****************************************************************/
//Master:命令帧,5字节(FR_Start)
void frame_cmd(uchar cmd){
//uchar bcc=FR_STX;
//bcc=bcc^cmd;
//
put_char(FR_STX);
put_char(cmd);
//put_char((bcc>>4)+'0'); //高四位在前
//put_char((bcc&0x0f)+'0'); //低四位
put_char('0');
put_char('0');
put_char('0');
put_char('0');
put_char('0');
put_char('0');
put_char('0'); //无数据发7个0
put_char(FR_ETX);
}
//Master(4)&Slave(6):数据帧(1+1+1+6+2+1)
//1.CCD数据: cmd=d,
//2.计算结果: cmd=r
//3.仪器常数: cmd=a
//4.纬度: cmd=l
//5.比例系数C: cmd=c
//6.周期个数: cmd=m
void frame_data(uchar cmd,
uchar *databuf,
uchar len){ //数据域不足7位补零
uchar i;
i=7-len;
//uchar bcc=FR_STX;
//bcc=bcc^cmd;
//for(i=0;i<len;i++) bcc=bcc^*(databuf+i);
//bcc=bcc^len;
//
put_char(FR_STX);
put_char(cmd);
put_string(*databuf,len);
if(i>0){
do{ put_char('0');i--;} //补足0
while(i>0);
}
//put_char(len+'0');
//put_char((bcc>>4)+'0'); //高四位
//put_char((bcc&0x0f)+'0'); //低四位
put_char(FR_ETX);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -