Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: ext. LCD mit Assembler Kategorie: Progr. Assembler, TaskingTools, OS (von Thomas, http://www.tho-bai.de - 4.09.2005 21:09)
Als Antwort auf Re: ext. LCD mit Assembler von TManiac - 8.06.2005 11:27

Hi,

also ich habe mittlerweile eine Assembler-Rountine für
die Initialisierung des ext. Displays geschrieben. Hier
der Quellcode:


init_display    PROC    near
                MOV     R2,#30h                 ;8-Bit
                CALL    write_nibble
                MOV     R2,#08h                 ;2-zeilig
                CALL    write_nibble
                MOV     R2,#20h                 ;4-Bit, 1-zeilig, 5x8 Punkte
                CALL    write_nibble
                MOV     R2,#04h                 ;Entry-Mode
                CALL    write_cmd
                MOV     R2,#01h                 ;Display loeschen
                CALL    write_cmd
                MOV     R2,#0Ch                 ;Cursor aus
                CALL    write_cmd
                RET                             ;Ruecksprung
init_display    ENDP
;---------------------------------------------------
;Prozedur zum Uebertragen eines Kommandos an das LCD
;---------------------------------------------------
write_cmd       PROC    near                    ;Daten in R2
                BCLR    P1L.0                   ;Funktionsmodus
                BCLR    P1L.1                   ;Schreibmodus
                CALL    write                   ;Daten schreiben
                RET
write_cmd       ENDP

;---------------------------------------------------
;Prozedur zum Uebertragen eines Zeichens in das LCD
;---------------------------------------------------
write_data      PROC    near
                BSET    P1L.0                   ;Datenmodus
                BCLR    P1L.1                   ;Schreibmodus
                CALL    write                   ;Daten schreiben
                RET
write_data      ENDP
;-------------------------------------------------
;Prozedur zum Uebertragen von Daten im 4-Bit-Modus
;-------------------------------------------------
write           PROC    near
                MOV     R3,R2
                MOV     R1,P1L                  ;P1L auslesen
                AND     R1,#0Fh                 ;Highnibble auf 0 setzen
                AND     R2,#0F0h                ;Lownibble auf 0 setzen
                OR      R1,R2                   ;Highnibble schreiben
                MOV     P1L,R1
                CALL    pulse

                MOV     R2,R3
                MOV     R1,P1L                  ;P1L auslesen
                AND     R1,#0Fh                 ;Highbyte auf 0 setzen
                SHL     R2,#4                   ;Datenbits Low->High
                OR      R1,R2                   ;Lownibble schreiben
                MOV     P1L,R1
                CALL    pulse
                RET                             ;Ruecksprung
write           ENDP
;-------------------------------------------------
;Prozedur zum Uebertragen von Daten im 8-Bit-Modus
;-------------------------------------------------
write_nibble    PROC    near
                BCLR    P1L.0                   ;Funktionsmodus
                BCLR    P1L.1                   ;Schreibmodus
                MOV     R3,R2
                MOV     R1,P1L                  ;P1L auslesen
                AND     R1,#0Fh                 ;Highnibble auf 0 setzen
                AND     R2,#0F0h                ;Lownibble auf 0 setzen
                OR      R1,R2                   ;Highnibble schreiben
                MOV     P1L,R1
                CALL    pulse
                RET
write_nibble    ENDP
;--------------------------------------------------------
;Prozedur zum Einleiten des internen Lese/Schreibvorgangs
;--------------------------------------------------------
pulse           PROC    near
                ;Lesen/Schreiben (abhaengig von P1L.1) einleiten
                BSET    P1L.2                   ;E auf High-Pegel
                BCLR    P1L.2                   ;E auf Low-Pegel
                MOV     R15, #2
                CALL    sleep                   ;Sleep 2
                RET
pulse           ENDP



Hoffe das hilft dem ein oder anderen...

GruÃ?

Thomas

Meine Seite: http://www.tho-bai.de


    Antwort schreiben


Antworten: