设计一个通信协议需要start、end、数据0,数据1,这样就组成了一个最基本的通信协议。
要考虑到有运行误差的情况,加了误差之后以上四个信号也不会相互干扰,就是说加上误差后,0也不会变成1,1也不会变成0。
发送和接收的数据最好自己加校验,这样可以避免数据错误。
/*********************************************
* 设计一个协议
* start: 3ms高 1ms低
* end : 1.5ms高 1.5ms低 //end的低电平持续时间是没有进行判断的,感觉没必要,想要的可以自己加上
* 0 : 700us高 300us低
* 1 : 300us高 700us低
* 空闲态:低电平
* *******************************************/
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
#define _RECV_IO //接收的IO口
#define _SEND_IO //发送的IO口
#define USE_RECV //使用接收功能就打开注释,不使用就注释掉,默认使用
#define USE_SEND //使用发送功能就打开注释,不使用就注释掉,默认使用
#define n_100US_100US (1)//中断时间是100us
#define BASE_TIME_TICK (1*(n_100US_100US))
#define START_HIGH_TIME (30*(BASE_TIME_TICK))
#define START_LOW_TIME (10*(BASE_TIME_TICK))
#define END_HIGH_TIME (15*(BASE_TIME_TICK))
#define END_LOW_TIME (15*(BASE_TIME_TICK))
#define START_END_PERMISSIBLE_ERROR (4*(BASE_TIME_TICK))//允许误差
#define ZERO_HIGH_TIME (7*(BASE_TIME_TICK))
#define ZERO_LOW_TIME (3*(BASE_TIME_TICK))
#define ONE_HIGH_TIME (3*(BASE_TIME_TICK))
#define ONE_LOW_TIME (7*(BASE_TIME_TICK))
#define ZERO_ONE_PERMISSIBLE_ERROR (1*(BASE_TIME_TICK))//允许误差
#define MAX_ERROR_TIME 250//最大的时间限制
#define PROTOCOL_DATA_LENGTH 8//发送和接收数据的长度
typedef enum{
n_StartHigh=0,
n_StartLow,
n_DataTransmission,
n_EndHigh,
n_EndLow,
}StepEnum_t;
typedef struct
{
#ifdef USE_RECV
//接收
uint8_t RecvTempArr[PROTOCOL_DATA_LENGTH];
StepEnum_t RecvStep;
uint8_t RecvHighCount;//高电平计数

最低0.47元/天 解锁文章
2117

被折叠的 条评论
为什么被折叠?



