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!!
folgende instruktionen brauchst du dafür: mov andi ori lsl lsr und swap könnte auch hilfreich sein.
Sicher nicht die eleganteste Lösung, aber einfach und schnell programmiert: bst und bld.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.