3 byte aus 16 bit, AVR ASM

Gast #2648171
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!!
#2648905
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren