2 Byte zu 1 ???

Gast #69265
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
Gast #69266
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.
Gast #69267
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
Gast #69268
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).

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.