📄 communication.c
字号:
#include "define.h"
void rx_data(void) //接收报文头并判断 /接收所有字节并验证
{
unsigned char rx_data;
if (write_timeover>0)
{
while(rx_counter>0)
{
getchar ();
}
}
while(rx_counter>0)
{
rx_data = getchar ();
if (rx_head < 3) //判断接收缓冲器是否有数据
{
if (rx_data == 0x76)
{
rx_head++; //判3个报文头
rx_timeover = 2 ; //超时保护启动
}
else
{
rx_head = 0;
rx_timeover = 0 ; //超时保护关闭
}
}
else if ( rx_head >= 3 )
{
rx_timeover = 2; //超时保护启动
if (rx_length == 0) //接收报文长度
{
rx_buffer_index = 1;
rt_buffer[0]=rx_data;
if (rx_data==0x11)
rx_length = 0x41;
else if (rx_data==0x12)
rx_length = 0x01;
else //
{
rx_head = 0;
rx_length = 0;
rx_timeover = 0;
}
}
else if (rx_length>0) //接收报文长度后的字节
{
rt_buffer[rx_buffer_index] = rx_data;
rx_buffer_index++ ;
rx_length--;
if (rx_length==0)
{
b_rx_end = 1;
rx_head = 0;
rx_length = 0;
rx_timeover = 0; //超时保护关闭
}
}
}
}
}
void rx_access(void) //处理数据
{
unsigned char a,b,i;
b_tx_sign = 0;
tx_code = rt_buffer[0];
switch(tx_code)
{
case 0x11: //写入一页
write_timeover=100;
step=1;
rt_buffer[0]=0x91;
break;
case 0x12: //读出一页
b_tx_sign=1;
rt_buffer[0]=0x92;
a=rt_buffer[1];
b=a&0x7f;
b>>=2;
a<<=6;
for (i=0;i<64;i++)
{
rt_buffer[2+i]=read_flash(a+i,b);
}
break;
default:
b_tx_sign=0;
break;
}
}
void tx_data(void) //发送字节 应答
{
unsigned char i,j=0;
putchar(0x76);
putchar(0x76);
putchar(0x76);
if (rt_buffer[0]==0x91)
j=1;
else if (rt_buffer[0]==0x92)
j=0x42;
for (i=0;i<j;i++)
{
putchar(rt_buffer[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -