我實際上想在matlab中爲Modbus協議生成crc,並且我在matlab中使用了以下代碼。我也給消息數組作爲message=uint16([hex2dec('01') hex2dec('02') hex2dec('00') hex2dec('C4') hex2dec('00') hex2dec('16')]);
和BITAND並在最後0xFFFF的完成,但無法給出正確的CRC ..CRC 16 in matlab
我的代碼的下方,預計CRC是B839按了Modbus CRC計算器但它給予B8DD(47325十進制)。如果代碼中有任何更改,請幫助我。謝謝。
function crc_val = crc3 (~)
crc = uint16(hex2dec('1D0F')); % Non-augmented initial value equivalent to augmented initial value 0xFFFF
polynomial = hex2dec('1021'); % Polynomial
message=uint16([hex2dec('01') hex2dec('02') hex2dec('00') hex2dec('C4') hex2dec('00') hex2dec('16') hex2dec('00') hex2dec('00')]);
for i = 1:(length(message)-2) % Not taking the last 2 bytes because they are the CRC.
crc = bitxor(crc, bitsll(message(i), 8));
for j = 1:8
if (bitand(crc, hex2dec('8000')) > 0);
crc = bitxor(bitsll(crc, 1), polynomial);
else
crc = bitsll(crc, 1);
end
end
end
crc_val = bitand(crc, hex2dec('ffff'));
end
鏈接的[CRC 16 FEX提交](http://www.mathworks.in/matlabcentral/fileexchange/26741-crc-16/content/crc16.m)包含大約4行實際代碼,它們似乎可以滿足您的所有需求。嘗試理解這些,並直接使用它們,或者首先嚐試改進你的代碼。 –