Hallo, ich möchte einen Wert aus einem Register gerne um 4 Bits nach links verschieben und über die Ports vom Board ausgeben. Halbe viel im Internet gefunden aber es klappt nichts davon. Kann mir jemand weiterhelfen ?
1 | int myvariable; |
2 | myvariable= register; |
3 | |
4 | myvariable << 4; // 4 schieben |
5 | |
6 | PINA = register; // PINA für PortA, kommt auf uC an |
:
Bearbeitet durch User
sowas erkennt er nicht. bei mir sieht das so aus: schleife mov.b #0b,R14 S1 bic.b #11110111b,P1OUT ; alle Ausgänge aus mov.b #R14 <<4 ,R14 ( hier sollte er eigentlich schieben zeigt aber eine Warnung an ) bis.b R14, &P1OUT
Er ist von Texas Instruments LaunchPad Und der Chip der draus ist ist der M430G2553
Henne schrieb: > zeigt aber eine Warnung an Welche? Dass #R14 ein Konstante ist? Lies mal das da: http://www.embeddedrelated.com/showthread/msp430/2386-1.php Henne schrieb: > Wo finde ich die ? Du siehst dir auf deinem PC mal an, wie das Programm heißt, dass du zum Entwickeln nimmst... https://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung
Das sind die Warnungen: Multiple markers at this line - [W1500] warning: relocation template 277 not found; returning OFR_INVALID - [W1500] warning: relocation template 275 not found; returning OFR_INVALID - [W1500] warning: relocation template 266 not found; returning OFR_INVALID
versuch mal RLA (Rotate left arithmetically) RLC (Rotate left through carry)
RLA und RLC funktionieren zwar. Es soll aber nicht rotieren.
1 | ;------------------------------------------------------------------------------- |
2 | ; MSP430 Assembler Code Template for use with TI Code Composer Studio |
3 | ; |
4 | ; |
5 | ;------------------------------------------------------------------------------- |
6 | .cdecls C,LIST,"msp430.h" ; Include device header file |
7 | |
8 | ;------------------------------------------------------------------------------- |
9 | .def RESET ; Export program entry-point to |
10 | ; make it known to linker. |
11 | ;------------------------------------------------------------------------------- |
12 | .text ; Assemble into program memory. |
13 | .retain ; Override ELF conditional linking |
14 | ; and retain current section. |
15 | .retainrefs ; And retain any sections that have |
16 | ; references to current section. |
17 | |
18 | ;------------------------------------------------------------------------------- |
19 | RESET mov.w #__STACK_END,SP ; Initialize stackpointer |
20 | StopWDT mov.w #WDTPW|WDTHOLD,&WDTCTL ; Stop watchdog timer |
21 | SetupP1 mov.b #11110111b,&P1DIR ; P1DIR= Data direction (welche Richtung die BITS gehen) |
22 | ; 0= INPUT / 1=OUTPUT // P1.3 Eingang (S2 =Taster)(5te stelle) der Rest Ausgänge |
23 | mov.b #00001000b,&P1REN ; PULL-UP-Widerstand !!! (alle) (bei Ausgängen egal) |
24 | ;->(bei 1.3P ist der resistor eingeschaltet) |
25 | |
26 | bis.b #00001000b,&P1OUT ; Resistor als Pull UP geschaltet. (an P1.3 |
27 | bic.b #11110111b,P1OUT ; alle Ausgänge aus |
28 | |
29 | |
30 | ;------------------------------------------------------------------------------- |
31 | ; Main loop here |
32 | ;------------------------------------------------------------------------------- |
33 | ; Main loop here |
34 | mov.b #00000010b,R14 |
35 | |
36 | |
37 | bic.b #11110111b,P1OUT ; alle Ausgänge aus |
38 | mov.b #R14 <<4 ,R14 ; hier sollte er das R14 um 4 Bits nach Links verschieben |
39 | bis.b R14, &P1OUT |
40 | |
41 | |
42 | wait mov.w #50000,R15 ; (ohne b = dezimal)(Verzögerungswert in R 15) |
43 | L1 dec.w R15 ;Wert in R15 minus 1 |
44 | jnz L1 ; solange 0 nicht erreicht springe zu Marke L1 |
45 | |
46 | |
47 | ;------------------------------------------------------------------------------- |
48 | ; Stack Pointer definition |
49 | ;------------------------------------------------------------------------------- |
50 | .global __STACK_END |
51 | .sect .stack |
52 | |
53 | ;------------------------------------------------------------------------------- |
54 | ; Interrupt Vectors |
55 | ;------------------------------------------------------------------------------- |
56 | .sect ".reset" ; MSP430 RESET Vector |
57 | .short RESET |
Henne schrieb: > RLA und RLC funktionieren zwar. Es soll aber nicht rotieren. Du wirst RLC nehmen und das Carry zwischendurch löschen müssen. Oder vorher die oberen Bits auf 0 setzen. Oder nachher die unteren Bits. Oder du kannst es so machen: add.b R14,R14 add.b R14,R14 add.b R14,R14 add.b R14,R14
:
Bearbeitet durch Moderator
Ich weis zwar nicht on die CPU das kann. Aber bei 4 Bit würde ich eher ein Swap verwenden, Das tauscht die oberen gegen die unteren 4 Bit
Poster schrieb: > Ich weis zwar nicht on die CPU das kann. Sie kann es nicht. https://books.google.de/books?id=qVjhtNYvGGAC&pg=PA136&lpg=PA136&dq=msp430+swap+nibbles&source=bl&ots=C8n3cuoiW0&sig=rMWPEgi8HGq4Nxwnz6oF7dLENwg&hl=de&sa=X&ved=0ahUKEwiIp5zWlPLJAhXGXQ8KHXSUA9cQ6AEIMDAB#v=onepage&q=msp430%20swap%20nibbles&f=false
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.