Forum: Mikrocontroller und Digitale Elektronik MSP430 LCD-Positionierung in Assembler


von Peter U. (saint)


Lesenswert?

Hallo,
ich habe ein kleines Problem mit einen LCD Display, ich kann zwar Daten 
hinschicken, die auch angezeigt werden, allerdings hab ich keine Ahnung 
wie ich sie positionieren soll. Das LCD Display fängt immer am Anfang 
der ersten Zeile an...ich hab aber keine Ahnung wie ich in die zweite 
komm!


#include <msp430x12x2.h>

;----------------------------------------------------------------------- 
-------
; initialisation
;----------------------------------------------------------------------- 
-------

RESET           ORG  0E000h                            ; Flash

                mov     #WDTPW + WDTHOLD, &WDTCTL               ; stop

             call    #LCD_INIT
                eint






;----------------------------------------------------------------------- 
-------

main
                mov       #1, R10
              mov       #000h, R11
              call      #SEND       ; first nibble of display clear
              mov       #1, R10
              mov       #001h, R11
              call      #SEND


; send 'U' to display (ASCII 4Dh)
              bis.b     #BIT1, &P3OUT                   ; RS = 1 means 
data
              mov       #1, R10
              mov       #005h, R11                      ; high-nibble 
first
              call      #SEND
              mov       #1, R10
              mov       #005h, R11                      ; low-nibble
              call      #SEND
              bic.b     #BIT1, &P3OUT
;

;----------------------------------------------------------------------- 
-------
; LCD initialisation sub routine
;----------------------------------------------------------------------- 
-------

LCD_INIT      mov.b     #000h, &P1OUT   ; set data lines DB4-DB7
              mov.b           #00fh, &P1DIR
              mov.b           #000h, &P3OUT   ; set EN and RS line
              mov.b           #003h, &P3DIR
              mov       #16, R10         ; counter (16 * 1ms)
              call      #DELAY            ; wait R10 * 1ms
              mov       #003h, R11       ; standard init routine
              mov       #5, R10
              call      #SEND           ; send init code first time
              mov       #1, R10
              call      #SEND          ; send init code second time
              mov       #1, R10
              call      #SEND          ; send init code third time
              mov       #1, R10
              mov       #002h, R11
              call      #SEND         ; define 4-Bit communication

              mov       #1, R10
              mov       #002h, R11
              call      #SEND       ; first nibble of function set
              mov       #1, R10
              mov       #008h, R11
              call      #SEND       ; second nibble of function set
                                            ; 2 lines, 5x7 dots
              mov       #1, R10
              mov       #000h, R11
              call      #SEND     ; first nibble of display control
              mov       #1, R10
              mov       #00Ch, R11
              call      #SEND    ; second nibble of display control
                                         ; display on, cursor off
              mov       #1, R10
              mov       #000h, R11
              call      #SEND     ; first nibble of display clear
              mov       #1, R10
              mov       #001h, R11
              call      #SEND     ; second nibble of display clear

              mov       #1, R10
              mov       #000h, R11
              call      #SEND     ; first nibble of entry mode set
              mov       #1, R10
              mov       #006h, R11
              call      #SEND     ; second nibble of entry mode set
                                           ; increment address counter
                ret

;-------------------------------- 
----------------------------------------------
; send Data via Port1 (P1.0-P1.3) to LCD - subroutine
;----------------------------------------------------------------------- 
-------

SEND          bis.b     #BIT0, &P3OUT      ; EN = 1
              mov.b            R11, &P1OUT       ; data to DB4-DB7
              bic.b     #BIT0, &P3OUT      ; EN = 0
              call      #DELAY
              ret

;----------------------------------------------------------------------- 
-------
; Delay - sub routine
;----------------------------------------------------------------------- 
-------
DELAY          mov           #03E8h,R12       ; value for counting back
LOOP           dec           R12
              jnz           LOOP
              dec           R10                ; multipier for LOOP
              jnz           DELAY
              ret


;
; Interrupt Vectors Used MSP430x1232
;----------------------------------------------------------------------- 
-------
           ORG         0FFFEh    ; MSP430 RESET Vector
                DW          RESET
                END

von Falk (Gast)


Lesenswert?

Du musst die DD RAM ADDRESS setzen mit Kommando 0b001xxxxx, wobei xxxxx 
die Adresse ist. Vorsicht, die Adressen sind nicht ganz linear verteilt. 
Siehe Datenblatt.

MFG
Falk

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.