Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Вниз

CRC16 для MODBUS с помощью таблицы   Найти похожие ветки 

 
GEN++ ©   (2006-08-11 11:21) [0]

На ATmega128 необходимо реализовать протокол MODBUS RTU.
В этом протоколе необходитмо считать CRC16.
Рассчет по стандартному алгоритму занимает слишком
много времени. Существует табличый алгоритм для CRC16 - более быстрый.
Кто располагает реализацией на (СИ/Pascal/ASM Avr/ASC Pic - все равно)
поделитесь пожулуйста здесь или на port.e@mail.ru.
Заранее благодарен.


 
Карелин Артем ©   (2006-08-11 11:21) [1]

Форум на Atmel.ru тебе в Help


 
Карелин Артем ©   (2006-08-11 11:32) [2]

На http://8052.com/ по-моему где-то было


 
Шпиён   (2006-08-11 11:55) [3]


type
Vmessage   = array [0..255] of byte;
PVMessage  = ^Vmessage;

const
(* Table of CRC values for high-order byte *)
auchCRCHi:array[0..255] of byte=(
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,
$80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0,
$80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40,
$00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1,
$81, $40, $01, $C0, $80, $41, $01, $C0, $80, $41,
$00, $C1, $81, $40, $01, $C0, $80, $41, $00, $C1,
$81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,
$80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,
$01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1,
$81, $40, $01, $C0, $80, $41, $00, $C1, $81, $40,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,
$80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,
$01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0,
$80, $41, $01, $C0, $80, $41, $00, $C1, $81, $40,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,
$80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $00, $C1, $81, $40, $01, $C0,
$80, $41, $00, $C1, $81, $40, $01, $C0, $80, $41,
$01, $C0, $80, $41, $00, $C1, $81, $40, $01, $C0,
$80, $41, $00, $C1, $81, $40, $00, $C1, $81, $40,
$01, $C0, $80, $41, $01, $C0, $80, $41, $00, $C1,
$81, $40, $00, $C1, $81, $40, $01, $C0, $80, $41,
$00, $C1, $81, $40, $01, $C0, $80, $41, $01, $C0,
$80, $41, $00, $C1, $81, $40
);

(* Table of CRC values for low-order byte *)
auchCRCLo:array[0..255]of byte = (
$00, $C0, $C1, $01, $C3, $03, $02, $C2, $C6, $06,
$07, $C7, $05, $C5, $C4, $04, $CC, $0C, $0D, $CD,
$0F, $CF, $CE, $0E, $0A, $CA, $CB, $0B, $C9, $09,
$08, $C8, $D8, $18, $19, $D9, $1B, $DB, $DA, $1A,
$1E, $DE, $DF, $1F, $DD, $1D, $1C, $DC, $14, $D4,
$D5, $15, $D7, $17, $16, $D6, $D2, $12, $13, $D3,
$11, $D1, $D0, $10, $F0, $30, $31, $F1, $33, $F3,
$F2, $32, $36, $F6, $F7, $37, $F5, $35, $34, $F4,
$3C, $FC, $FD, $3D, $FF, $3F, $3E, $FE, $FA, $3A,
$3B, $FB, $39, $F9, $F8, $38, $28, $E8, $E9, $29,
$EB, $2B, $2A, $EA, $EE, $2E, $2F, $EF, $2D, $ED,
$EC, $2C, $E4, $24, $25, $E5, $27, $E7, $E6, $26,
$22, $E2, $E3, $23, $E1, $21, $20, $E0, $A0, $60,
$61, $A1, $63, $A3, $A2, $62, $66, $A6, $A7, $67,
$A5, $65, $64, $A4, $6C, $AC, $AD, $6D, $AF, $6F,
$6E, $AE, $AA, $6A, $6B, $AB, $69, $A9, $A8, $68,
$78, $B8, $B9, $79, $BB, $7B, $7A, $BA, $BE, $7E,
$7F, $BF, $7D, $BD, $BC, $7C, $B4, $74, $75, $B5,
$77, $B7, $B6, $76, $72, $B2, $B3, $73, $B1, $71,
$70, $B0, $50, $90, $91, $51, $93, $53, $52, $92,
$96, $56, $57, $97, $55, $95, $94, $54, $9C, $5C,
$5D, $9D, $5F, $9F, $9E, $5E, $5A, $9A, $9B, $5B,
$99, $59, $58, $98, $88, $48, $49, $89, $4B, $8B,
$8A, $4A, $4E, $8E, $8F, $4F, $8D, $4D, $4C, $8C,
$44, $84, $85, $45, $87, $47, $46, $86, $82, $42,
$43, $83, $41, $81, $80, $40
);

function crc16(Start:byte; UsDataLen:byte; PMes:PVMessage):word;
var
   i:word;
   uIndex:byte ; (* will index into CRC lookup*)
   uchCRCHi : byte;
   uchCRCLo :byte;
begin
   uchCRCHi := $FF ; (* high CRC byte initialized *)
   uchCRCLo := $FF ; (* low CRC byte initialized  *)
   for i:=Start to UsDataLen-1 do
  begin
    uIndex := uchCRCHi xor PMes^[i] ;      (* calculate the CRC*)
    uchCRCHi := uchCRCLo xor auchCRCHi[uIndex] ;
    uchCRCLo := auchCRCLo[uIndex] ;
  end;
       crc16:= (uchCRCHi shl 8 or uchCRCLo) ;
end;



 
Jeer ©   (2006-08-11 12:23) [4]

app note avr236 на atmel.com


 
GEN++ ©   (2006-08-12 21:50) [5]

Тема успешно закрыта.
Спасибо за информацию.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
15-1154954506
antonn
2006-08-07 16:41
2006.09.03
ищу музончик...


15-1155209259
ArtemESC
2006-08-10 15:27
2006.09.03
Не найдеться ли у кого звуков пишущей машинки...


2-1155304942
Demand
2006-08-11 18:02
2006.09.03
Перетаскивание формы


3-1151441197
Vosik
2006-06-28 00:46
2006.09.03
Триггеры на системных таблицах в InterBase


15-1155452450
БарЛог
2006-08-13 11:00
2006.09.03
Смеялся по потери пульса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский