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

📄 crc.c

📁 该程序实现N4F接口程序
💻 C
字号:
//1999.05.31
#include "..\\inc\\comm.h"
#include "..\\inc\\n4f.h"


// get 16 bits crc_check code */
/*
  crc_check = 0xFFFF;
  byte_count = 6;
  for(i=0;i<byte_count;i++)
     {
       crc_check = crc_check^(WORD)(buffer[i]);
	   for(j=0;j<8;j++)
          { crc_temp = crc_check & 0x0001;
            crc_check = crc_check >> 1;
            if(crc_temp == 0x0001) { crc_check = crc_check ^ 0xA001;}
          }
     }
  buffer[byte_count] = (BYTE)(crc_check);
  buffer[byte_count+1] = (BYTE)((crc_check>>8));
*/


void Get_crc16( int N, char *buffer )  
{ // g(x)=X^16 + X^15 + X^2 + 1
  WORD CRCCODE=(WORD)0xA001;
  WORD crc_check,crc_temp;
  int  byte_count, i, j;

  crc_check = (WORD)0x0000; //for HDWD
  //crc_check = (WORD)0xFFFF;
  byte_count = N;
  for(i=0;i<byte_count;i++)
     {
       crc_check = crc_check^( ((WORD)( *(buffer+i)) & 0x00ff) );
	   for(j=0;j<8;j++)
          { crc_temp = crc_check & (WORD)0x0001;
            crc_check = crc_check >> 1;
            if(crc_temp == (WORD)0x0001) { crc_check = crc_check ^ CRCCODE;}
          }
     }
  *(buffer+byte_count)   = (BYTE)(crc_check);
  *(buffer+byte_count+1) = (BYTE)((crc_check>>8));
}


extern char     rcvbuf[BUFSIZE];
extern int      rcvlen;

int Check_crc()
{ char tmpbuf[BUFSIZE],*tmpbuf_p;
  
  memcpy( tmpbuf, rcvbuf, rcvlen ); 
  tmpbuf_p=tmpbuf; 
  if( (rcvbuf[1]==TYPE_05H)||(rcvbuf[1]==TYPE_1AH) )
  { //check_crc8 
	//1020 Get_crc8( rcvlen, tmpbuf_p );
return(OK);//@@@@@@@@@@
	Get_crc8( rcvlen-1, tmpbuf_p );
    if( (char)(*(tmpbuf_p+rcvlen-1))==rcvbuf[rcvlen-1] )
	{ 
	  return( OK );
	}
	else
	{ printf("!!!!! Check_crc8 error! ( crc= 0x%x )\n",*(tmpbuf_p+rcvlen-1) );
	  return(FAILURE); 
	}
  }
  else
  { //check_crc16
	Get_crc16( rcvlen-2, tmpbuf_p );
    if(   ((*(tmpbuf_p+rcvlen-2))==rcvbuf[rcvlen-2])
		&&((*(tmpbuf_p+rcvlen-1))==rcvbuf[rcvlen-1]) )
	{ 
	  return( OK ); 
	}
    else
	{ printf("!!!!!! Check_crc16 error! ( 0x%x  0x%x )\n",
	          *(tmpbuf_p+rcvlen-2), *(tmpbuf_p+rcvlen-1)   ); 
	  return(FAILURE);
	
	}  
  }
}


//**********************************************************
void Get_crc8( int N, char *buffer )
{ // g(x)=X^7 + X^4 + 1
  char CRCCODE=(char)0x91;
  char crc_check, crc_temp;
  int  byte_count, i, j;

  //crc_check = (char)0xFF; 
  crc_check = (char)0x00;
  byte_count = N;
  for(i=0;i<byte_count;i++)
     {
       crc_check = crc_check^( ((char)(*(buffer+i)) & 0x00ff) );
	   for(j=0;j<8;j++)
          { crc_temp = crc_check & (char)0x01;
            crc_check = crc_check >> 1;
            if( crc_temp == (char)0x01 ) { crc_check = crc_check ^ CRCCODE;}
          }
     }
  *(buffer+byte_count)   = (BYTE)(crc_check);
}
//*************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -