CRC16 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » CRC16 (реализация в протоне)
CRC16
DimDIk Дата: Вт, 21.04.2009, 22:09  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 28.12.2008

Статус: Offline

Подскажите пожалуйста, как в протоне реализовать расчет контрольной суммы, а именно CRC16? Может у кого есть исходники поделитесь,буду очень признателен.
ЯНДЕКС Дата: 21.04.2009
demanik Дата: Вт, 21.04.2009, 23:46  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Вот кусок проги от датчика SHT только не помню это CRC16 или CRC8 у них алгоритм похожий.
Code

GetSHTCRC:'---- Расчет CRC ------------------------------
     CRCCalc = 0                 
     DataByte = tmp1
     GOSUB Calc_CRC
     DataByte = RawData.HIGHBYTE
     GOSUB Calc_CRC
     DataByte = RawData.LOWBYTE
     GOSUB Calc_CRC
     CRC = CRC REV 8
     RETURN

Calc_CRC:'------------ CRC Bit Calcuation Method -----------------------------
     FOR tmp = 0 TO 7
     DataBit = CRCCalc.7 ^ DataByte.7
     DataByte = DataByte << 1
     IF DataBit = 0 THEN ShiftSHT
     CRCCalc = CRCCalc ^ $18
ShiftSHT:
     CRCCalc = CRCCalc << 1
     CRCCalc.0 = DataBit
     NEXT tmp
     RETURN


Попробуй всё и вся... может быть пол...

DimDIk Дата: Ср, 22.04.2009, 18:27  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 28.12.2008

Статус: Offline

Большое спасибо!
demanik Дата: Ср, 22.04.2009, 20:41  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Еще один кусочек правда на ПБП:
Code

crc__16:'--------Функция расчета контрольной суммы CRC16 ------------
      Generator var WORD
      Temp var WORD
      CRC var WORD
      j var BYTE
      BitVal var BIT
       CRC = 65535
      Generator = 40961
       FOR i = 1 TO Length
          Temp = buffer[i]
          CRC = CRC ^ Temp
          FOR j = 1 TO 8
              BitVal = CRC.0
              CRC = CRC >> 1
              IF BitVal THEN
                 CRC = CRC ^ Generator
              ENDIF
           NEXT j
      NEXT i
      crc16[1] = (CRC // 256)    ' CRC16 low byte
      crc16[2] = (CRC / 256)    ' CRC16 high byte
RETURN'------------------------------------------------------------------------

и еще один на ПБП:
Code

Calcul_CRC16:
     CRC16=$FFFF  
     For i=0 to Nbr-3
         CRC16=CRC16^BufTx[i]
         For j=1 to 8  
             IF CRC16.Bit0=1 Then  
                 CRC16=$A001^(CRC16>>1)
             Else  
                 CRC16=CRC16>>1
             EndIF
         Next j
     Next i
Return


Попробуй всё и вся... может быть пол...


Сообщение отредактировал demanik - Ср, 22.04.2009, 20:45
DimDIk Дата: Ср, 20.05.2009, 15:34  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 28.12.2008

Статус: Offline

demanik, а вы бы не могли пояснить какая переменная для чего используется вот в этом примере? :

Вот кусок проги от датчика SHT только не помню это CRC16 или CRC8 у них алгоритм похожий.
Code

GetSHTCRC:'---- Расчет CRC ------------------------------
CRCCalc = 0
DataByte = tmp1
GOSUB Calc_CRC
DataByte = RawData.HIGHBYTE
GOSUB Calc_CRC
DataByte = RawData.LOWBYTE
GOSUB Calc_CRC
CRC = CRC REV 8
RETURN

Calc_CRC:'------------ CRC Bit Calcuation Method -----------------------------
FOR tmp = 0 TO 7
DataBit = CRCCalc.7 ^ DataByte.7
DataByte = DataByte << 1
IF DataBit = 0 THEN ShiftSHT
CRCCalc = CRCCalc ^ $18
ShiftSHT:
CRCCalc = CRCCalc << 1
CRCCalc.0 = DataBit
NEXT tmp
RETURN

demanik Дата: Ср, 20.05.2009, 18:45  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (DimDIk)
а вы бы не могли пояснить какая переменная для чего используется вот в этом примере?

В "DataByte" по очереди заносятся принятые байты
В "CRC" получаем саму контрольную сумму


Попробуй всё и вся... может быть пол...

Форум Picbasic.ru » Программирование МК » Proton PicBasic » CRC16 (реализация в протоне)
Страница 1 из 11
Поиск: