⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
  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 + -