"); //-->
#include "io430.h" #include<stdio.h> #include<stdlib.h> typedef unsigned int uint16; typedef unsigned char uint8; uint8 data1[2] = { 0x35,0x34}; void InvertUint8(unsigned char *dBuf,unsigned char *srcBuf) { int i; unsigned char tmp[4]; tmp[0] = 0; for(i=0;i< 8;i++) { if(srcBuf[0]& (1 << i)) tmp[0]|=1<<(7-i); } dBuf[0] = tmp[0]; } void InvertUint16(unsigned short *dBuf,unsigned short *srcBuf) { int i; unsigned short tmp[4]; tmp[0] = 0; for(i=0;i< 16;i++) { if(srcBuf[0]& (1 << i)) tmp[0]|=1<<(15 - i); } dBuf[0] = tmp[0]; } unsigned int CRC16_MODBUS(unsigned char *puchMsg, unsigned int usDataLen) { unsigned short wCRCin = 0xFFFF; unsigned short wCPoly = 0x8005; unsigned char wChar = 0; while (usDataLen--) { wChar = *(puchMsg++); InvertUint8(&wChar,&wChar); wCRCin ^= (wChar << 8); for(int i = 0;i < 8;i++) { if(wCRCin & 0x8000) wCRCin = (wCRCin << 1) ^ wCPoly; else wCRCin = wCRCin << 1; } } InvertUint16(&wCRCin,&wCRCin); return (wCRCin) ; } int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; unsigned int data; data = CRC16_MODBUS(data1,2); //data = CRC16_USB(data1,2); printf("0x%x",data);//0xc9cb return 0; }
运行调试
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。