Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
29.12.2009, 18:13
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Функция для расчета CRC
Нужна функция на Си для расчета CRC. пробовал во эту, не совпадает с реальной CRC
Код:
|
void CRC_Calc(Data)
{
unsigned char temp,count,carry;
for(count=0;count‹8;count++)
{
temp=Data ^ CRC;
carry=0;
if((temp & 0x01)==1)
{
carry=1;
}
temp=CRC;
if(temp !=0)
{
temp=temp ^ 0x18;
}
temp = temp ››1;
temp &=0x7F; // ensure bit 8 is clear
if(carry==1)
{
temp |= 0x80; // Move carry into top bit
}
CRC=temp; // Store the CRC
Data = Data ››1; // position the next data for adding to the CRC
}
} |
Пробую на датчике DS18B20.
|
|
|
|
29.12.2009, 19:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Функция для расчета CRC
Код:
|
unsigned char calc_crc (unsigned char *mas)
{
unsigned char i,data,crc,fb,st_byt;
st_byt=0;
crc=0;
do{
data=mas[st_byt];
for (i=0;i‹8;i++)// счетчик битов в байте
{
fb =crc ^ data;
fb&=1;
crc ››= 1;
data ›› =1;
if (fb == 1)crc^=0x8c;// полином, мля
}
st_byt++;
}while (st_byt != 8);// счетчик байтов в массиве
return crc;
} |
|
|
|
|
30.12.2009, 10:03
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: Функция для расчета CRC
Код:
|
while (st_byt != 8);// счетчик байтов в массиве |
Здесь задаем размер массива?
Если ставим 7, будет корректно считать CRC для 7 байт?
|
|
|
|
30.12.2009, 10:16
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: Функция для расчета CRC
Все работает. Спасибо!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:51.
|
|