Forum: Mikrocontroller und Digitale Elektronik 2 Byte zu 1 ???


von AVRli (Gast)


Lesenswert?

Hi zusammen,

ich habe zur Zeit folgendes Problem...
ich lese Daten über den UART ein und speichere diese im SRAM.
Ich bekomme bei der Übertragung eine CRC Summe welche ich nun
vergleichen möchte.

Die Checksumme, welche übertragen wird, besteht aus zwei Byte
z.B. 'F7' dies ist in 2 Bytes abgelegt.

Im Assembler hätte ich diese beiden Bytes nun in einem Register.

Also die beiden BYTES  'F7' in ein Register speichern welches dann
den WERT F7 enthält.

Wie macht man sowas? Für jeden Tip währe ich sehr dankbar.

MfG AVRli

von thkais (Gast)


Lesenswert?

Du hast also "F" und "7" als Ascii?
Das ist nicht schwer:
Du nimmst das höherwertige Zeichen ("F"), ziehst das Ascii-Offset ab,
und swap das low ins high-nibble. Dann das niederwertige ("7") und
damit das Gleiche veranstalten, nur ohne den swap. Die beiden
Ergebnisse addieren - fertig.
Das Ascii-Offset kriegst Du folgendermaßen raus:

byte = byte - $30  (Offset für "0")
wenn byte >9 dann byte = byte - 7 (zusätzliches Offset der
                                   Buchstaben A-F abziehen)

Nun ist in byte die Zahl, also bei "F" kommt eine 15 heraus.

von AVRli (Gast)


Lesenswert?

Hi thkais,

ja danke für die Hilfe... das klappt so wie Du geschrieben hattest.
Gut finde ich das Du die Befehle nicht verraten hast denn da lernt man
nicht.
Ich bin absoluter Newbie in Sachen ATMEL's
Ich programmiere ausschließlich in ASM... mit AVR Studio...
Hier mal mein ASM Code...
Kann man den noch verbessern? Oder vereinfachen?
Würde mich auch noch über Tips in der Richtung freuen.

;--- CRC lesen ---
  ld wrI,X+         ; 'F' steht im SRAM
  subi wrI,48
  cpi wrI,10
  brlo CALC_CRC1
  subi wrI,7
CALC_CRC1:
  mov crcRead,wrI
  swap crcRead
  ld wrI,X+         ; '7' steht im SRAM
  subi wrI,48
  cpi wrI,10
  brlo CALC_CRC2
  subi wrI,7
CALC_CRC2:
  add crcRead,wrI


MfG AVRli

von thkais (Gast)


Lesenswert?

Das mit den Befehlen war ja auch so gedacht ;-)
Ich finde gut, daß Du Dich durchgebissen und es nach dem kleinen Schubs
von mir hinbekommen hast.

Du könntest noch die Umrechung als Subroutine schreiben, dann würde
alles ein wenig kürzer (aber ein bisserl langsamer).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.