Главная страница
    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.23 c
1-1153755637
Alex Bakulin
2006-07-24 19:40
2006.09.03
Splash Screen с прогрессбаром


6-1144817098
Попрошайка
2006-04-12 08:44
2006.09.03
Получения параметров IE для прокси


1-1153547589
alek_1
2006-07-22 09:53
2006.09.03
RSS


2-1155553759
lex67
2006-08-14 15:09
2006.09.03
Как разгрузить процессор?


2-1155619285
Mikka Hakkinnen
2006-08-15 09:21
2006.09.03
Вывести на Chart номера точек PointSeries





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский