#define BUFLEN 512 。彌_區(qū)大小———*/
#define ETB (byte)0x20。獔笪慕Y束符——*/
byte crc0=0,crc1=0; 。止(jié)變量———*/
void main(void)
{。鶕(jù)要求編寫主程序,調用crcvalue()子程序———*/。
word crcvalue(byte*crcbuf) /*計算報文的CRC值,crcbuf是緩沖區(qū)*/
{ word count;
for(crc0=crc1=0,count=1;crcbuf[count]。紼TB&&count
<BUFLEN;count++)
crccount(crcbuf[count]);
if(count+4>=BUFLEN)return 0; crccount(crcbuf[count]);
crcbuf(++count)=crc0;crcbuf(++count)=crc1;crcbuf(++
count)=crc0;
crcbuf(++count)=crc1;crcbuf(++count)=crc0;crcbuf(++
count)=crc1;
return 。玞ount; 。
viod crccount(byte crc100) /*計算一個字節(jié)的CRC值*/
{ byte crc10,crc11,crc20,crc21; word crclen;
crclen=(word)crc100; crclen=(crclen&0xff)<<1; crc10=crcclar
[crclen++];
crc11=crcclar[crclen++]; crc11=crc100^crc0^crc11;
crc10=crc1 ^crc10;
crclen=(word)crc0; crclen=(crclen&0xff)<<1; crc20=
crcclar[crclen++];
crc21=crcclar[crclen++]; crc0=drd^crc20; crc1=crc11^
crc21; 。
4 CRC算法的優(yōu)缺點
用軟件實現(xiàn)的CRC算法,其主要優(yōu)點是突出了一個“快”字,為了提高校驗速度,把參數(shù)表和應用程序一起寫入單片機的EPROM內,當進行CRC校驗時,對需要發(fā)送的每一字節(jié),按上述的方法進行計算,就可得到該字節(jié)的校驗值。從而提高了速度,較好地克服了異步傳輸中校驗和發(fā)送時間很不匹配的矛盾。
CRC算法的缺點是由于要存儲512字節(jié)的參數(shù)表,需要更多的存儲空間,但是在單片機的應用中,這種以空間換取時間的方法是值得提倡的。
5 結束語
<!--→參考文獻CH(開始)-->
[2] 劉樂善,等.微型計算機接口技術及應用[M].華中理工大學出版社,1994.3.
[3] 俸遠禎,等.計算機組成原理[M].電子工業(yè)出版社,1996.8.
[4] Herbert Schildt.最新C語言大全[M].中科院希望高級電腦技術公司,1991.5.





