CRC Beregning

M

mak_goel

Guest
Dear all,

CRC regnestykket er nødvendig for å legge CRC sjekk med under streng til å kommunisere på RS485 Link har modbus protokollen.

For eksempel: String er 01H 03H 75H 30H 00H 12h.

Egentlig er jeg trenger å vite CRC beregning prosedyre å innlemme det samme i 8051 koding (Assembly Language).

Jeg har lest mange data på nettet, men kunne ikke få noen fruitfull resultater.Venter på den støtten jeg ......

Hilsen
Mak

 
Jeg gikk gjennom dette også.Den beste hjelpen jeg fant var i
http://www.modbus.org/docs/Modbus_over_serial_line_V1.pdf
...nærmer seg slutten er det 'C'-kode for en CRC kalkulator.

Dessverre mine behov ble for HCS08 montasje-koden.For hva det
er verdt, jeg har lagt den til i denne meldingen.
Lykke til.

Wade Hassler

;===============================================
; En "Lookup-table CRC Kalkulator for Freescale 'S08
; MODBUS algoritmen (poly = A001, initialisere til FFFF)
; Meldinger <256 tegn
; Ingen globals (unntatt tabeller)
; Tilpasset fra
; "MODBUS over Serial Line V1.02" pg 43-44

;==========================================
; Kalkulere CRC16 av en rekke bytes
; På oppføring:
; H: X-> rekke tegn
; A = lengden av strengen skal kodes
; Ved avkjørsel:
; H: X = CRC16
; A =?
CRC_INIT_VAL equ $ FFFF; spec sier initialisere med denne

;---- Stabelen forskyvninger for streng kode rutine -----
CRCHigh_ sett 1
CRCLow_ sett 2
CRCLng_ satt 3
CRCAdrH_ sett 4
CRCAdrL_ satt 5

Calc_CRC16:
;==== Oppsett: utføres én gang per utregning ===========
AIS # - (CRCAdrL_); gjøre plass på stakken for temporaries
sthx CRCAdrH_, sp; lagre start-pekeren
sta CRCLng_, sp; lagre lengde-count
ldhx # CRC_INIT_VAL; få første-verdi og gå

;==== Loop: utføres én gang per byte av meldingen ========
CRCCalc_Loop:
sthx CRCHigh_, sp; lagre gjeldende CRC ved starten av gjentar
ldhx CRCAdrH_, sp; peker til neste tegn
Lda 0, x; laste neste tegn
aix # 1; øke adresse
sthx CRCAdrH_, sp; lagre økt adresse
ldhx CRCHigh_, sp; nytt Beregnigner CRC-så langt
bsr CRC16_Update; sette neste tegn i CRC
dbnz CRCLng_, sp, CRCCalc_Loop; Gjenta til ferdig

AIS # (CRCAdrL_); feilrettingsfilen stack før exit
RTS

;=======================================
; Update CRC16 med én byte
; På oppføring
; HX = CRC så langt
; A = byte for å legge til CRC
; Ved avkjørsel
; HX = oppdatert CRC
; A =?
;---- Stack-forskyvninger for byte-legge rutine ----
CRCInx_ sett 1
CRCInp_ sett 2
CRCHsf_ satt 3
CRCLsf_ sett 4

CRC16_Update:
AIS # - (CRCLsf_); gjøre plass til temporaries
sta CRCInx_, sp; midlertidig lagre skriving her
sthx CRCHsf_, sp; store CRCHigh, CRCLow

Lda CRCInx_, sp; få innspill byte
EOR CRCLsf_, sp; XOR med CRCL
skatt; sette indeksen i X (H = 0: bordene 256-byte lang)
clrh; denne HX-paret brukes for både lookups

Lda CRCHsf_, sp; fusjonere i lav byte
EOR CRCTbl_H, x
sta CRCLsf_, sp

Lda CRCTbl_L, x; få høy byte
sta CRCHsf_, sp

ldhx CRCHsf_, sp; retrun den nye CRC
AIS # CRCLsf_; feilrettingsfilen stack før avreise
RTS

nolist

; Table of CRC verdier for high-order byte
CRCTbl_H:
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40, $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41
fcb $ 00, $ C1, $ 81, $ 40, $ 01, $ C0, $ 80, $ 41, $ 01, $ C0, $ 80, $ 41, $ 00, $ C1, $ 81, $ 40

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

 

Welcome to EDABoard.com

Sponsor

Back
Top