Forum: Mikrocontroller und Digitale Elektronik 3 byte aus 16 bit, AVR ASM


von Stefan (Gast)


Lesenswert?

Hallo,
Ich bin ziemlicher Anfänger im Bereich der Mikrocontroller. Bei einem 
Programm das ich gerade schreibe benötige ich eine Funktion die ich 
einfach nicht hinkriege. Ich habe eine 16 bit Zahl (natürlich aufgeteilt 
in 2 Register). Diese 16 bit Zahl will ich auf 3 weitere Register 
verteilen, und zwar so, dass in jedem der 3 Register 5 Bit der 16bit 
Zahl liegen. Das MSB der 16 bit Zahl kann verworfen werden.
Also folgendes soll als Endergebniss rauskommen:

Register1: 0,0,0,b14,b13,b12,b11,b10
Register1: 0,0,0,b9,b8,b7,b6,b5
Register1: 0,0,0,b4,b3,b2,b1,b0

mit bx sind die entsprechenden Bit der 16Bit Zahl gemeint.

Vielen Dank für eure Hilfe!!

von Sam .. (sam1994)


Lesenswert?

folgende instruktionen brauchst du dafür:
mov
andi
ori
lsl
lsr

und swap könnte auch hilfreich sein.

von Oliver J. (skriptkiddy)


Lesenswert?

Versuchs mit Shiftbefehlen.

von der alte Hanns (Gast)


Lesenswert?

Sicher nicht die eleganteste Lösung, aber einfach und schnell 
programmiert: bst und bld.

von Jobst M. (jobstens-de)


Lesenswert?

1
; input sind r1 (lsb) und r3 (msb)
2
3
; mittlere 5 Bit
4
  mov r2, r1
5
  andi r2, 0xE0 ; 3 Bit vom unteren Byte ...
6
  swap r2
7
  lsr r2 ; ... an die richtige Stelle schieben
8
  mov r4, r3
9
  andi r4, 0x02 ; und die 2 unteren Bit des oberen Bytes ...
10
  swap r4
11
  lsr r4 ; ... richtig positionieren ...
12
  and r2, r4 ; ... und zu den unteren 3 hinzufügen
13
14
; untere 5 Bit
15
  andi r1, 0x1F ; nur die unteren 5 Bit übernehmen
16
17
; obere 5 Bit
18
  lsr r3
19
  lsr r3 ; ... richtig positionieren ...
20
  andi r3, 0x1F ; Bit 15 verwerfen
21
22
; output sind r1 - r3

Heute mal fast eine Silbertablettlösung, weil ich im Bett liege und 
gerade nichts anderes zu tun habe.

Aber damit Du Dich damit auseinandersetzt, habe ich einen klitzekleinen 
Fehler eingebaut. :-)


Gruß

Jobst

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.