Forum: Mikrocontroller und Digitale Elektronik MSP430 Bit schieben


von Henne (Gast)


Lesenswert?

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 ?

von TM F. (p_richner)


Lesenswert?

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
von Henne (Gast)


Lesenswert?

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

von Henne (Gast)


Lesenswert?

Ist ein Empty Assembly- only Project

von TM F. (p_richner)


Lesenswert?

könntest du etwas zu uC, Sprache, IDE, etc. sagen?

von Henne (Gast)


Lesenswert?

Er ist von Texas Instruments
LaunchPad

Und der Chip der draus ist ist der M430G2553

von Klaus R. (klara)


Lesenswert?

Und welche IDE? Könnte wichtig sein.
mfg klaus

von Henne (Gast)


Lesenswert?

Wo finde ich die ?

Auf dem Board steht noch MSP-EXP430G2

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Henne (Gast)


Lesenswert?

Aso.
Da ist Code Composer Studio

von Henne (Gast)


Lesenswert?

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

von TM F. (p_richner)


Lesenswert?

Dann poste mal deinen Code

von m ov.b (Gast)


Lesenswert?

>mov.b  #R14 <<4 ,R14

Gibts diesen Assemblerbefehl denn wirklich?

von ... (Gast)


Lesenswert?

versuch mal
RLA (Rotate left arithmetically)
RLC (Rotate left through carry)

von Henne (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Poster (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?


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.