📄 crc.c
字号:
IP=0X10;
while(head!=tail){
WatchDog =!WatchDog;
for(i=0;i<8;i++){
testbit=(RX_BUF[tail]>>(7-i))%2;
switch (REVSTATUS){
case 0:check_frame();
break;
case 1:check_transparence();
if(transparence_valid==0){
valid_data=valid_data+(testbit<<(7-valid_data_num));
if(++valid_data_num==8){
if(valid_data==h_address/*aa*/){
// transparence=0;
REVSTATUS=2;
valid_data=0;
valid_data_num=0;
checkdata[0]=h_address/*aa*/;
}else{
transparence=0;
REVSTATUS=0;
valid_data=0;
valid_data_num=0;
}
}
}else{
if(transparence_valid==1&&REVSTATUS==0){
transparence_valid=0;
transparence=0;
valid_data=0;
valid_data_num=0; }
}
break;
case 2: if(transparence_valid==0){
valid_data=valid_data+(testbit<<(7-valid_data_num));
if(++valid_data_num==8){
if(valid_data==l_address/*dd*/){
// transparence=0;
REVSTATUS=3;
valid_data=0;
valid_data_num=0;
checkdata[1]=l_address/*dd*/;
}else{
transparence=0;
REVSTATUS=0;
valid_data=0;
valid_data_num=0;
}
}
}else{
if(transparence_valid==1&&REVSTATUS==0){
transparence_valid=0;
transparence=0;
valid_data=0;
valid_data_num=0; }
}
break;
case 3:check_transparence();
if(transparence_valid==0){
valid_data=valid_data+(testbit<<(7-valid_data_num));
if(++valid_data_num==8){
if(valid_data==0xcc/*cc*/){
//transparence=0;
REVSTATUS=4;
valid_data=0;
valid_data_num=0;
checkdata[2]=0xcc/*cc*/;
}else{
transparence=0;
REVSTATUS=0;
valid_data=0;
valid_data_num=0;
}
}
}else{
if(transparence_valid==1&&REVSTATUS==0){
transparence_valid=0;
transparence=0;
valid_data=0;
valid_data_num=0;
}
}
break;
case 4:check_transparence();
if(transparence_valid==0){
valid_data=valid_data+(testbit<<(7-valid_data_num));
if(++valid_data_num==8){
if(valid_data==0xc1){
//transparence=0;
REVSTATUS=5;
valid_data=0;
valid_data_num=0;
checkdata[3]=0xc1;
}else{
transparence=0;
REVSTATUS=0;
valid_data=4;
valid_data_num=0;
}
}
}else{
if(transparence_valid==1&&REVSTATUS==0){
transparence_valid=0;
transparence=0;
valid_data=0;
valid_data_num=0;
}
}
break;
case 5:check_transparence();
if(transparence_valid==0){
valid_data=valid_data+(testbit<<(7-valid_data_num));
if(++valid_data_num==8){
checkdata[data_num]=valid_data;
data_num++;
REVSTATUS=6;
// transparence=0;
valid_data=0;
valid_data_num=0;
}
}else{
if(transparence_valid==1&&REVSTATUS==0){
transparence_valid=0;
transparence=0;
valid_data=0;
valid_data_num=0;
}
}
break;
case 6:check_transparence();
if(transparence_valid==0){
valid_data=valid_data+(testbit<<(7-valid_data_num));
if(++valid_data_num==8){
checkdata[data_num]=valid_data;
data_num++;
REVSTATUS=6;
//transparence=0;
valid_data=0;
valid_data_num=0;
}
}else if(transparence_valid==1 && transparence==0 && REVSTATUS!=0){
transparence_valid=0;
break;
}else{{
if(transparence_valid==1&&REVSTATUS==0){
transparence_valid=0;
transparence=0;
valid_data=0;
p=&checkdata[0];
check_write=cal_crc(p,(data_num-2));
check_temp=(checkdata[data_num-2]<<8)+checkdata[data_num-1];
data_num=4;
WatchDog =!WatchDog;
if(check_write==check_temp){ //CRC校验相等
// EA=0;
receive_flag=checkdata[4]; //主要标志
second_flag=checkdata[5]; //付标志
com_receive_deal();
valid_data_num=0;
}
}
}
break; }
break;
default:break;
}
}
if(++tail>500)tail=0;
//if(head==0)tail=0;
}
}
void comm() interrupt 4 using 1
{
if(RI==1){
RI=0;
EA=0;
RX_BUF[head]=SBUF;
if(++head>500)head=0;
comm_state=0;//有接收
EA=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -