Ответ: Может этот пример поможет (100 лет в обед под PIC на Hi-Tech, что называется ;-), но главное-ппринцип.) Всё работает, как часы.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Serg_Ant 11 июля 2003 г. 12:01
В ответ на: Даллосовская CRC (кажется так :) ??? (+) отправлено BIGNICK 11 июля 2003 г. 10:18


//Примерчик хорошо наблюдается в MPLAB прогоном и контр. соотвю. рег.!

/*****************************************************/
/* Пpогpамма демонстрации */
/* расчёта CRC для TM DS1990A */
//--------------------------------------------------

#include

static char CRC @ 0x30;//контрольный рег. CRC!
static bit C2 @ (unsigned)&CRC*8+2;
static bit C3 @ (unsigned)&CRC*8+3;
static bit C7 @ (unsigned)&CRC*8+7;
//--------------------------------------------------------------
static char DAT @ 0x31;//Регистр тек. байта кодовой посл. ТМ.
//--------------------------------------------------------------
static char BIT_FL @ 0x33;//буф. рег. флагов.
static bit B0 @ (unsigned)&BIT_FL*8+0;
static bit B2 @ (unsigned)&BIT_FL*8+2;
static bit B3 @ (unsigned)&BIT_FL*8+3;
//--------------------------------------------------------
static char NOM @ 0x40;//Счётчик 8 бит сдвига тек. байта
static char NOM1 @ 0x41;//Счётчик 7байт кодовой последов. ТМ.
static char KOD[8] @ 0x42;//массив принятого кода ТМ-Ключа
//--------------------------------------------------
void Init(void);// Подпрограмма иннициализации!

/*Тело пpогpаммы*/
void main(void)
{ Init();
//-----Процедура расчёта-----------------------
for (NOM1=0;NOM1<7;NOM1++)
{ DAT=KOD[NOM1];
//---Цикл для одного байта-----------------
for (NOM=0;NOM<8;NOM++)
{
BIT_FL=CRC^DAT;
CRC=CRC>>1;
C7=B0; B3=B0; B2=B0;
BIT_FL=CRC^BIT_FL;
C3=B3;C2=B2;
//-------
DAT=DAT>>1;
}//for
}//FOR
//----------------------------------------
while (1) {;}//Stop

}//main

void Init(void)
{ CRC=0;
//------Назначение кода TM (Пример)---------------
KOD[0]=0x01;//Ser.
KOD[1]=0x99;
KOD[2]=0x13;
KOD[3]=0xAC;
KOD[4]=0x02;
KOD[5]=0x00;
KOD[6]=0x00;
KOD[7]=0xDC;//CRC
}//Init

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru