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: |