Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Помогите с CRC-8(16)!!! Совсем я замучался... Добавлено: 26.01.05 14:36  

Автор вопроса:  Stn

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 16
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #16
Добавлено: 31.01.05 19:06
Я пример вычисления CRC8 привел, а ты CRC16

Ответить

Номер ответа: 17
Автор ответа:
 Stn



Вопросов: 1
Ответов: 14
 Профиль | | #17 Добавлено: 31.01.05 21:40
Шарп, ну погоди, не нервничай :о))
Давай по порядку... В теме ветки я все обозначил... Алгоритмы crc 8 и (заметь!) 16тый... Прально? прально.
Теперь относительно самих процедур. Та, которую выложил ты, у меня есть и статья Вильямса тоже есть, давно уже. Моя процедура работает не правильно, потому я ее на всякий пожарный тоже выложил...
А что касается 8ого crc, то у меня пока он тоже не работает, точнее не тот crc на выходе.

Если есть какой нибудь софт, способный crc8 вычислить (у меня есть, могу поделиться), то скажи мне crc этой строки: "123456789" (есть вариант, что при crc16 ответ будет - е5сс), а при crc8 (теоретически. посчитал на калькуляторе :о) ) - dd01 (а если берем один байт, то просто - DD).На 256 можно даже не делить...

Вот такие дела...
Пойду отдохну, иконы попишу... :о))

Всего самого наилучшего!
и до новых встреч!

Ответить

Номер ответа: 18
Автор ответа:
 Stn



Вопросов: 1
Ответов: 14
 Профиль | | #18 Добавлено: 02.02.05 00:23
Может кому пригодится...
;*****************************************************************************
;* ПРОЦЕДУРА ВЫЧИСЛЕНИЯ 8-БИТНОЙ CRC для MCS51 *
;*****************************************************************************
;Пример использования:
   mov CRC,#0 ;Перед вычислением надо обнулять CRC.
     mov A,BYTE1 ;Названия байтов к примеру.
   call DO_CRC
;В CRC сейчас находится контрольная сумма байта BYTE1.
   mov A,BYTE2
   call DO_CRC
;В CRC сейчас находится контрольная сумма байтов BYTE1 и BYTE2.
   mov A,BYTE3
   call DO_CRC
;В CRC сейчас находится контрольная сумма байтов BYTE1, BYTE2, BYTE3.
;И так далее.

;-----------------------------------------------------------------------------

; Контрольная сумма.
CRC DATA 1Bh ;переменная CRC
;-----------------------------------------------------------------------------
; Процедура обновления CRC (циклическая контрольная сумма). Параметр в A.
DO_CRC:
   PUSH ACC ;сохранить аккумулятор в стеке
   PUSH B ;сохранить B в стеке
   PUSH ACC ;сохранить аккумулятор в стеке
   MOV B,#8 ;счетчик сдвигов = 8
CRC_LOOP:
   XRL A,CRC ;"исключающее ИЛИ" над ACC и предыдущим операндом
   RRC A ;крутить вправо на бит через флаг переноса
   MOV A,CRC ;получить предыдущее значение CRC
   JNC ZERO ;пропустить если был 0
   XRL A,#18H ;"исключающее ИЛИ" над ACC и операндом 18H
ZERO:
   RRC A ;крутить вправо на бит через флаг переноса
   MOV CRC,A ;сохранить текущее значение CRC
   POP ACC ;получить предыдущее значение
   RR A ;крутить вправо
   PUSH ACC ;сохранить результат на стеке
   ;DJNZ B,CRC_LOOP ;повторять 8 раз
   POP ACC ;чистка стека
   POP B ;восстановить B
   POP ACC ;восстановить аккумулятор
   RET ;выход
;-----------------------------------------------------------------------------

Ответить

Номер ответа: 19
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #19 Добавлено: 02.02.05 00:49
Так что, нашёл таки подходящую, или выдрал из телефона?

Ответить

Номер ответа: 20
Автор ответа:
 Stn



Вопросов: 1
Ответов: 14
 Профиль | | #20 Добавлено: 02.02.05 12:37
Креста, так получается, что все процедуры, которые я попробовал, работают не верно.
Пришлось писать самому. А из аппарата дергать crc не зачем, он и так ее в порт кидает... Вопрос в другом - то, что посылает моя прога телефону должна правильно им обрабатываться, т.е. crc сходиться должен. Пока только часть алгоритма готова... Допишу, выложу.

Если скучно, вот интересный вопрос - как реализовать тень иконки программно? (мучал меня этот вопр. в свое время... :о))) )
Причем в теории то я все разложил по полочкам, даже какой то код появился, но потом все бросил и забыл... Можно реанимировать и забацать на vb & asm :о))
И народу приятно будет.

Ответить

Номер ответа: 21
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #21 Добавлено: 02.02.05 15:36
Смотрел я какой-то исходник контрола меню на асме, там вроде иконка при наведении мыши на пункт меню перерисовывается по OffsetRect -1,-1 (влево-вверх), а в том место, которое освободилось, серой кистью рисуются две полосочки - вертикальная(по правой границе иконки) и горизонтальная (по нижней). И всё.

Ответить

Номер ответа: 22
Автор ответа:
 Stn



Вопросов: 1
Ответов: 14
 Профиль | | #22 Добавлено: 03.02.05 13:07
Креста, не все так просто :о))
с "тенями" можно так заморочиться... череп треснет :о)

Ответить

Номер ответа: 23
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #23 Добавлено: 03.02.05 16:25
Забейте, народ, считайте лучше Internet CRC - самая быстрая и удобная вешь :)

Ответить

Номер ответа: 24
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #24 Добавлено: 03.02.05 18:32
Да можно по всякому придумать тень: высветлить например иконку, вернее hDC, где она будет рисоваться, через SetColorAdjustment и рисовать иконку, она получится бледная, а затем вернуть исходное состояние hDC и нарисовать уже в полный цвет ту же иконку со смещением. Но это не самый стандартный путь. Хотя стандартный не подразумевает наличие тени.

Ответить

Номер ответа: 25
Автор ответа:
 Stn



Вопросов: 1
Ответов: 14
 Профиль | | #25 Добавлено: 04.02.05 14:44
ЛамерОнЛайн, а поподробнее????
ил ты имеешь ввиду стримCRC? или.... ???
Вобщем, расскажи поподробнее или примерчик какой нить выложи.
Спасибо!

Ответить

Номер ответа: 26
Автор ответа:
 Stn



Вопросов: 1
Ответов: 14
 Профиль | | #26 Добавлено: 04.02.05 18:27
Вот, еще процедурка на бас.:

' BASIC ROUTINE TO CALCULATE CRC16-CCITT
' WAGNER LIPNHARSKI - NOV/1999 - HTTP://WWW.USTR.NET
'
' A = 16 bits counter - CRC16 CCITT - Accumulator result.
' A should be preset to ZERO at the start.
' C = 8 Bits processing byte, value from zero to 255.
' After processing all "C" bytes, A value should be
' converted to Hex and have bytes inverted,
'
' A$ = "0000" + HEX$(A)
' A$ = RIGHT$(A$,4)
' A$ = RIGHT$(A$,2)+LEFT$(A$,2)
' A1 = VAL(LEFT$(A$,2))
' A2 = VAL(RIGHT$(A$,2))
' A1$ = CHR$(A1)
' A2$ = CHR$(A2)
'
' Transmit A1$, then A2$, as the CRC bytes.
'
' For testing purposes, processing 10 bytes values
' from 00h to 09h, crc to be transmitted is 04h 42h


' The following is the demo example with 10 bytes
A = 0
DATA 0,1,2,3,4,5,6,7,8,9
FOR N = 1 TO 10
    READ C
    GOSUB CALCCRC
    NEXT N
' Here reordening LSB byte is transmitted first.
A$ = HEX$(A)
A$ = RIGHT$("0000" + A$, 4)
A$ = RIGHT$(A$, 2) + LEFT$(A$, 2)
PRINT "FINAL CRC: "; LEFT$(A$, 2); " "; RIGHT$(A$, 2)
END


' The following is the CRC16-CCITT calculation
CALCCRC:
FOR V = 1 TO 8: ' 8 bits in C to process
    CY = (A MOD 2) + (C MOD 2): ' If = 1 carry bits different
    A = INT(A / 2): ' Shift Right 16 bits A
    C = INT(C / 2): ' Shift Right 8 bits C
    IF CY = 1 THEN A = A XOR 40961: ' Apply Algoritm
    NEXT V
RETURN

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам