📄 chu_kou.c
字号:
#include <reg52.h>
#include "Chu_kou.h"
void TOGGLE_WD(void);
void Delay(unsigned char DelayCount);
/************************串口初始化*****************************/
void intermit_initialization(void)
{
TMOD = 0x21;
TL1 = TH1 = 0xfc ;
TR1 = 1 ;
TH0 = 0x00;
TL0 = 0x00;
SCON = 0x70 ;
PCON = 0x00;
IE = 0x92 ;
IP = 0x10 ;
send_head_ptr = send_end_ptr = &t_buf[0];
TR0 = 1;
RI = 0;
TI = 0;
have_aa = 0;
sum = 0;
reiv_pack = 0;
//sum_a = 0;
}
/*****************************正应答***********************************/
void ack(void)
{
TOGGLE_WD() ;
*send_end_ptr = 0xaa;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
*send_end_ptr = 0xdd;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
TI = 1;
/* SBUF=0xaa; */
Delay(255);
Delay(255);
Delay(255);
Delay(255);
Delay(255);
}
/*****************************负应答***********************************/
void no_ack(void)
{
TOGGLE_WD() ;
*send_end_ptr = 0xaa;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
*send_end_ptr = 0xee;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
TI = 1;
Delay(255);
Delay(255);
Delay(255);
Delay(255);
Delay(255);
}
intermit() interrupt 4 using 1
{
if(RI)
{
RI = 0;
if(head_package)
{
if(SBUF == 0xaa)
{
have_aa = 1;
head = 1;
head_package = 0;
return;
}
have_aa = 1;
r_temp[sum ++] = SBUF;
if(sum >= SUM_LONG) sum = 0;
crc = crc ^ SBUF;
return;
}
if(end_package)
{
if(SBUF == crc)
{
head_package = 0;
full_package = 1;
end_package = 0;
crc = 0;
ack_code = 1; //置应答标志位
//ack(); //正应答
return;
}
else
{
head_package = 0;
full_package = 1;
end_package = 0;
crc = 0;
ack_code = 0; //清应答标志位
// no_ack(); //负应答
return;
}
}
if(SBUF == 0xaa)
{
if(have_aa)
{
have_aa = 0;
head_package = 1;
r_temp[sum ++] = SBUF;
if(sum >= SUM_LONG) sum = 0;
crc = crc ^ 0xaa ^ 0xaa;
return;
}
else
{
head = 1;
return;
}
}
if(head)
{
head = 0;
if(SBUF == 0xbb)
{
have_aa = 1;
head_package = 1;
crc = crc ^ 0xaa ^ 0xbb;
package_add_h = sum;
return;
}
if(SBUF == 0xcc)
{
have_aa = 0;
head_package = 0;
end_package = 1;
crc = crc ^ 0xaa ^ 0xcc;
package_add_e = sum;
return;
}
//新加程序
if(SBUF == 0xdd)
{
reiv_pack = 0;
reiv_pack1=0x00;
return;
}
if(SBUF == 0xee)
{
reiv_pack = 0x0f;
return;
}
}
}
else if(TI)
{
TI = 0;
if(send_head_ptr != send_end_ptr)
{
SBUF = *send_head_ptr ;
if(++send_head_ptr >= &t_buf[_LONG]) send_head_ptr = & t_buf[0];
}
}
}
void tx_buffer( uchar _long)
{
uchar idata j, _xor;
TOGGLE_WD() ;
reiv_pack1=0x01;
_xor = 0;
*send_end_ptr = 0xaa;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
_xor = _xor ^ 0xaa ;
*send_end_ptr = 0xbb;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
_xor = _xor ^ 0xbb ;
*send_end_ptr = r_buf[0];
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
_xor = _xor ^ r_buf[0] ;
/* if(_long != 0)
{
*send_end_ptr = state;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
_xor = _xor ^ state ;
} */
for ( j = 1 ; j < _long ; j ++ )
{
if(t_temp[j] == 0xaa)
{
*send_end_ptr = 0xaa ;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
_xor = _xor ^ 0xaa ;
}
*send_end_ptr = t_temp[j] ;
_xor = _xor ^ t_temp[j] ;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
}
*send_end_ptr = 0xaa;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
_xor = _xor ^ 0xaa ;
*send_end_ptr = 0xcc;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
_xor = _xor ^ 0xcc ;
*send_end_ptr = _xor;
if((++ send_end_ptr) >= &t_buf[_LONG]) send_end_ptr = &t_buf[0];
reiv_pack = 0;
TI = 1 ;
}
uchar uncoil_package(void)
{
uchar idata j;
uchar idata i;
TOGGLE_WD();
i = 0;
j = 0;
if(full_package)
{
if(ack_code) ack(); //正应答
if(!ack_code) no_ack(); //负应答
for(i = package_add_h; i != package_add_e;)
{
r_buf[j] = r_temp[i ++];
if(i >= SUM_LONG) i = 0;
j ++;
}
full_package = 0;
i = 1;
}
return(i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -