Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 19.06.2008, 22:49   #1
qaz12345qaz12345
Частый гость
 
Регистрация: 06.12.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
qaz12345qaz12345 на пути к лучшему
По умолчанию вычисление CRC

Господа, подскажите пожалуйста алгоритм вычисления CRC далласовских таблеток, смотрел смотрел даташиту, что то ни чего не пойму там.
Реклама:
qaz12345qaz12345 вне форума  
Непрочитано 20.06.2008, 01:44   #2
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию

Вопрос! А нафига это потребовалось? Температуру и так можно мерять, не забивая голову CRC
marera вне форума  
Непрочитано 20.06.2008, 02:59   #3
HAZARD
Частый гость
 
Регистрация: 28.06.2004
Сообщений: 15
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
HAZARD на пути к лучшему
По умолчанию

Алгоритм вот -

-- Прилагается рисунок: --

HAZARD вне форума  
Непрочитано 20.06.2008, 03:04   #4
HAZARD
Частый гость
 
Регистрация: 28.06.2004
Сообщений: 15
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
HAZARD на пути к лучшему
По умолчанию

исходный текст

unsigned char OW_ComputeCRC8(unsigned char inData, unsigned char seed)
{
unsigned char bitsLeft;
unsigned char temp;
for (bitsLeft = 8; bitsLeft › 0; bitsLeft--)
{
temp = ((seed ^ inData) & 0x01);
if (temp == 0)
{
seed ››= 1;
}
else
{
seed ^= 0x18;
seed ››= 1;
seed |= 0x80;
}
inData ››= 1;
}
return seed;
}


unsigned char Check_Valid_Key(void)
{
unsigned char i,CRC;
CRC=0;
for (i=0;i‹7;i++) CRC=OW_ComputeCRC8(OW_BUF[i],CRC);
if(CRC==OW_BUF[7]) return(1);
return(0);
}
HAZARD вне форума  
Непрочитано 20.06.2008, 03:10   #5
HAZARD
Частый гость
 
Регистрация: 28.06.2004
Сообщений: 15
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
HAZARD на пути к лучшему
По умолчанию

Бывает еще табличный подсчет CRC.
Это если критерий "памать/время" не позволяет заниматься вычислениями, а результат CRC нужен срочно.
HAZARD вне форума  
Непрочитано 20.06.2008, 07:35   #6
sanitar249
Почётный гражданин KAZUS.RU
 
Аватар для sanitar249
 
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
sanitar249 на пути к лучшему
По умолчанию

Для 51 из даташитов на ас-ме.
Код:
;*************************************************
;Подсчет контр суммы CRC в ячейке 0E
;обратываемый байт в аккумуляторе
;*************************************************  *
CRC:			
	PUSH	ACC	; сохраняем 
	 PUSH	B	; 
	  PUSH	ACC	
	MOV	B, #8	; счетчик циклов
CRCLOOP:			
	XRL	A, 0eh  ; XOR с предыдущим значением контрольной суммы
	RRC	A	; сдвиг вправо через флаг переноса
	MOV	A, 0eh	; берем последнее значение CRC
	  JNC	ZERO	; переход, если не было переноса
	XRL	A, #18H	; обновляем значение CRC путем XOR с константой
ZERO:			
	RRC	A	; снова сдвигаем CRC
	  MOV	0eh, A	; сохраняем новое значение CRC
	POP	ACC	; восстанавливаем байт данных
	RR	A	; циклически сдвигаем вправо
	PUSH	ACC	; снова сохраняем значение
	DJNZ	B, CRCLOOP	; повторяем цикл 8 раз 
	POP	ACC	
	 POP	B	; восстанавливаем прежние значения регистров из стека
	  POP	ACC	
	RET
Удачи!
__________________
Я, думаю, нужно подумать...
sanitar249 вне форума  
Непрочитано 20.06.2008, 07:43   #7
sanitar249
Почётный гражданин KAZUS.RU
 
Аватар для sanitar249
 
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
sanitar249 на пути к лучшему
По умолчанию

Сообщение от marera
Вопрос! А нафига это потребовалось? Температуру и так можно мерять, не забивая голову CRC
1-Выра шина, уж больно не помехоустойчивая, и валидность данных проверять настоятельно рекомендуеться....
Удачи!
__________________
Я, думаю, нужно подумать...
sanitar249 вне форума  
Непрочитано 20.06.2008, 08:09   #8
LEAS
Гражданин KAZUS.RU
 
Регистрация: 05.10.2006
Сообщений: 628
Сказал спасибо: 21
Сказали Спасибо 165 раз(а) в 92 сообщении(ях)
LEAS на пути к лучшему
По умолчанию

Не хочется самому трудится ну никак. Все уже обсуждалось.
https://kazus.ru/forum/topics/f_7393...ight=crc#73932
__________________
Быть,а не казаться.
LEAS вне форума  
Непрочитано 20.06.2008, 08:11   #9
olegras
Прохожий
 
Регистрация: 19.12.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
olegras на пути к лучшему
По умолчанию

Сообщение от HAZARD
Бывает еще табличный подсчет CRC.
Это если критерий "памать/время" не позволяет заниматься вычислениями, а результат CRC нужен срочно.
А можно пример табличного CRC в студию?
olegras вне форума  
Непрочитано 20.06.2008, 08:17   #10
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,352
Сказал спасибо: 85
Сказали Спасибо 611 раз(а) в 370 сообщении(ях)
pambaru на пути к лучшему
По умолчанию

Сообщение от olegras

А можно пример табличного CRC в студию?
Вот 8-ми битная CRC. Для каких-то случаев еще бывает CRC16.

typedef unsigned char byte;

flash byte DowTable[]={
0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
};

byte CalcDOWCRC(byte* Data, byte Count){
byte res, i;
res=0;
for (i=0; i‹Count; i++){
res=DowTable[res ^ (*Data)];
Data++;
};
return res;
}
pambaru вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найт алгоритм вычисления CRC для iButton... IgorSHV Цифровые сигнальные процессоры 19 18.01.2012 21:55
Компилятор Hi-Tech, вычисление, на PIC12F675 3ann Микроконтроллеры, АЦП, память и т.д 27 06.07.2009 12:01
DS1990 и crc sergio-nsk Микроконтроллеры, АЦП, память и т.д 13 12.02.2009 11:09
Вычисление параметров синусоиды по отсчетам, снятых с АЦП _DmZ_ Микроконтроллеры, АЦП, память и т.д 11 08.10.2008 16:23
Странное вычисление температуры DS18S20 nagano Микроконтроллеры, АЦП, память и т.д 0 20.08.2008 08:58


Часовой пояс GMT +4, время: 12:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot