?? 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 + -