資源描述:
《總線論壇-fieldbus》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、總線論壇-Fieldbus首頁?現(xiàn)場總線和工業(yè)以太網(wǎng)技術(shù)?Modbus?MODBUS協(xié)議的CRC校驗(yàn)子程序代碼,包括VB,VC和asm51匯編lidan-2007-4-197:37:00MODBUS協(xié)議規(guī)定:上位機(jī)發(fā)送8個(gè)字節(jié)召測指令,其中地址、設(shè)備類別、通信路由、指令類別、指令長度、指令各占1個(gè)字節(jié),CRC校驗(yàn)碼占2個(gè)字節(jié);下位機(jī)應(yīng)答7個(gè)字節(jié),地址、設(shè)備類別、數(shù)據(jù)長度各占1個(gè)字節(jié),數(shù)據(jù)、CRC校驗(yàn)碼各占2個(gè)字節(jié)。MODBUS協(xié)議規(guī)定CRC校驗(yàn)規(guī)則:CRC初始化為&HFFFF(CRC_L=&HFF,CRC_H=&HFF),將CR
2、C_L與傳輸?shù)牡谝粋€(gè)字節(jié)進(jìn)行異或運(yùn)算,然后將CRC進(jìn)行右移(不循環(huán))并判斷:如移出的位為1,則CRC再與&HA001進(jìn)行一次異或運(yùn)算;如移出的位為0,則CRC不變。如此右移8次即完成第一個(gè)字節(jié)的校驗(yàn),重復(fù)上述運(yùn)算及右移直至將全部字節(jié)校驗(yàn)完畢,所生成的CRC(16位)即為傳輸校驗(yàn)碼。為方便讀者使用MODBUS協(xié)議,將VC、VB、ASM51環(huán)境下MODBUS協(xié)議的CRC校驗(yàn)子程序代碼一并給出,供讀者參考。VC源代碼CODE://***CRCCalculationforMODBUSProtocolforVC***////數(shù)組snd為地
3、址等傳輸字節(jié),num為字節(jié)數(shù),發(fā)為6收為5//unsignedintmb_crc(BYTE*snd,intnum){inti,j;unsignedintc,crc=0xFFFFfor(i=0;i>=1;crc^=0xA001;}elsecrc>>=1}}return(crc);}VB源代碼CODE:'//***CRCCalculationforMODBUSProtocolforVB**
4、*//Functionmb_crc(ByRefsnd()asBYTE,numasinteger)asLongcrc_l=crc_h=&HFFfori=1tonumcrc_l=crc_lXORsnd(i)forj=1to8ifcrc_lAND1thencrc_l=(crc_l-1)/2ifcrc_hand1thencrc_l=crc_l128crc_h=(crc_h-1)/2endifcrc_l=crc_lXOR&HA0crc_h=crc_hXOR&H01else:crc_l=crc_l/2ifcrc_ha
5、nd1thencrcl_l=crc_l128crc_h=(crc_h-1)/2else:crc_h=crc_h/2endifendifnextjnextimb_crc=crc_lcrc_h*256EndFunctionASM51源代碼CODE:;CRCCalculationforMODBUSProtocolforASM51;R1為發(fā)送(接收)字節(jié)的緩存首地址;R2為發(fā)送(接收)字節(jié)的字節(jié)數(shù)(不含CRC字節(jié)),;R3為CRC校驗(yàn)低位字節(jié),;R4為CRC校驗(yàn)高位字節(jié),CRC:MOVA,#0FFHMOVR4,AMOVR3,ACRC1:
6、MOVA,@R1XRLA,R3MOVR3,AMOVR2,#08HCRC8:CLRCMOVA,R4RRCAMOVR4,AMOVA,R3RRCAMOVR3,AJNCCRC10MOVA,R3XRLA,#01HMOVR3,AMOVA,R4XRLA,#0A0HMOVR4,ACRC10:DJNZR2,CRC8INCR1DJNZCRC1RET