Endlich habe ich alles in den Griff bekommen!
Habe nun alle "Bugs" gefunden und bin nun in der Lage Zeichen auf dem LCD anzeigen zu lassen. Nach Tagen...![]()
Hier der neue CODE:
falls es jemandem irgendwie weiterhelfen sollte...Code:list p=16f84a ;******************************************************************************* ;* PIN Belegung ;* ;* PORTA: 0 - RS ;* 1 - RW ;* 2 - E1 ;* 3 - TEST LED ;* ;* PORTB: 0..7 - D0..D7 ;* ;******************************************************************************* ;******************************************************************************* #include <p16f84a.inc> ;******************************************************************************* ;* Config __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC ;****************************************************************************** ; Variablen count equ 0x20 time equ 0x21 confg equ 0x22 daten equ 0x23 flag equ 0x24 ; Konstanten #define RS PORTA, 0 #define RW PORTA, 1 #define E1 PORTA, 2 #define LED PORTA, 3 ;_____________________________________________________________________________ ;***************************************************************************** ; PROGRAMM START ;************************** ;* PIC Initialisierung * ;************************** Init bsf STATUS, RP0 ; Bank 1 movlw B'00000000' ; RA0 ..RA4 outputs movwf TRISA ; movlw B'00000000' ; PortB alle outputs movwf TRISB bcf STATUS, RP0 ; Bank 0 clrf PORTA clrf PORTB ;************************** ;* LCD Initialisierung * ;************************** InitLCD movlw D'255' ; 250 ms Pause nach dem Einschalten movwf time call w_ms movlw B'00110000' movwf PORTB bsf E1 nop bcf E1 movlw .5 ; 5 ms Pause movwf time call w_ms movlw B'00110000' movwf PORTB bsf E1 nop bcf E1 movlw .20 ; 100 mikro sekunden warten movwf time call w_us movlw B'00110000' movwf PORTB bsf E1 nop bcf E1 movlw B'00110000' ; function set, 8-bit 2-zeilig, 5x7 call Lcd_set movlw B'00001000' ; off call Lcd_set movlw B'00000110' ; entry mode, increment, cursr shift call Lcd_set movlw B'00000011' ; cursor home call Lcd_set movlw B'00001111' ; on call Lcd_set ;********************************************** ;* Zeichen Test * ;* * ;* (test)!! * ;********************************************** bsf LED call w_ms bcf LED movlw '1' movwf daten call wrte bsf LED bcf LED movlw '2' movwf daten call wrte bsf LED bcf LED movlw '3' movwf daten call wrte bsf LED bcf LED movlw '4' movwf daten call wrte bsf LED bcf LED movlw '5' movwf daten call wrte bsf LED bcf LED noend goto noend ;************************************ ;* LCD Config (write) * ;* Steuerbefehle ausführen * ;************************************ Lcd_set ; OK movwf confg call BusyFlag ; !! RS RW = 0 zu dem Zeitpunkt !! movf confg, w movwf PORTB ; Daten schreiben bsf E1 nop bcf E1 ; Disable LcdBus return ;*********************************** ;* LCD Ausgabe * ;* Zeichen ausgeben * ;*********************************** wrte bsf LED ; Test LED on movwf daten call BusyFlag movf daten, w movwf PORTB ; Daten schreiben bsf RS ; Daten bsf E1 ; Enable LcdBus nop bcf E1 ; Disable LcdBus bcf RS ; bcf LED ; Test LED off return ;************************** ;* CHCK BusyFlag * ;************************** BusyFlag bsf LED ; Test LED on bsf STATUS, RP0 ; make Port B0..7 input movlw B'11111111' movwf TRISB bcf STATUS, RP0 BusyLoop bcf RS bsf RW ; LESEN bsf E1 nop movf PORTB, w movwf flag bcf E1 nop bsf E1 ; Enable nop bcf E1 btfsc flag, 7 ; teste bit 7 goto BusyLoop bcf RW bsf STATUS, RP0 ; make Port B4..7 output movlw B'00000000' andwf TRISB, f bcf STATUS, RP0 bcf LED ; Test LED off return ;************************* ;* Warteschleife µs * ;************************* w_us loop nop nop decfsz time, f goto loop return ;************************* ;* Warteschleife ms * ;************************* w_ms movlw .112 movwf count loop_ms nop nop nop nop nop nop decfsz count, f goto loop_ms decfsz time, f goto w_ms return end
Gruß
Lukas





Zitieren


Lesezeichen