list p=18f242 ;************************************************************** ;* Pinbelegung ;* ---------------------------------- ;* ;* PORTB: 0 - 7 LC- Display D0 .. D7 ;* PORTC: 4 RS ;* 5 R/W ;* 6 Enable ;* ;************************************************************** ; ; Obi (Erstellt am 30.06.2008) ; ; LCD-Display "Hello World" ; ; Taktquelle: 10 MHz ; ;************************************************************** ; Includedatei für den 18F242 einbinden #include ; Configuration festlegen ; bis 4 MHz: Power on Timer, kein Watchdog, HS-Oscillator CONFIG OSC = HS ; HS 10 MHz CONFIG PWRT = ON ; power up timer on CONFIG BOR = OFF ; brown out detect off CONFIG WDT = OFF ; watchdog off CONFIG LVP = OFF ; lvp off ;************************************************************** ; Variablen festlegen LcdDaten Equ 0x22 LcdStatus Equ 0x23 loops Equ 0x24 loops2 Equ 0x25 ; Konstanten festlegen LcdE equ 6 ; enable Lcd LcdRw equ 5 ; read Lcd LcdRs equ 4 ; Daten Lcd (nicht control) ;******************************************************** ; Das Programm beginnt mit der Initialisierung ORG 0x0000 Init movlw B'10001111' ; RC0 .. RC3 inputs, RC4 - RC6 output, RC7 input movwf TRISC clrf TRISB clrf LATC clrf LATB call InitLCD ; Display initialisieren call Main ; am LCD "Hallo" ausgeben Main movlw 'H' ; zeile 1 movwf LcdDaten call OLD movlw 'a' movwf LcdDaten call OLD movlw 'l' movwf LcdDaten call OLD movlw 'l' movwf LcdDaten call OLD movlw 'o' movwf LcdDaten call OLD call LB ; zeile 2 movlw B'10101000' movwf LATB bsf LATC, LcdE nop bcf LATC, LcdE movlw 'W' movwf LcdDaten call OLD movlw 'i' movwf LcdDaten call OLD movlw 'e' movwf LcdDaten call OLD movlw B'00100000' movwf LcdDaten call OLD movlw 'g' movwf LcdDaten call OLD movlw 'e' movwf LcdDaten call OLD movlw 'h' movwf LcdDaten call OLD movlw 't' movwf LcdDaten call OLD movlw B'00100111' movwf LcdDaten call OLD movlw 's' movwf LcdDaten call OLD movlw B'00100000' movwf LcdDaten call OLD movlw 'd' movwf LcdDaten call OLD movlw 'i' movwf LcdDaten call OLD movlw 'r' movwf LcdDaten call OLD movlw B'00100000' movwf LcdDaten call OLD movlw '?' movwf LcdDaten call OLD movlw '?' movwf LcdDaten call OLD movlw '?' movwf LcdDaten call OLD movlw '?' movwf LcdDaten call OLD movlw '?' movwf LcdDaten call OLD call LB ; zeile 3 movlw B'10010100' movwf LATB bsf LATC, LcdE nop bcf LATC, LcdE movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'11111111' movwf LcdDaten call OLD call LB ; zeile 4 movlw B'10111100' movwf LATB bsf LATC, LcdE nop bcf LATC, LcdE movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'10100101' movwf LcdDaten call OLD movlw B'00101110' movwf LcdDaten call OLD movlw B'11111111' movwf LcdDaten call OLD movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT movlw D'1000' movwf loops call WAIT call LB ; clear movlw B'00000001' movwf LATB bsf LATC, LcdE nop bcf LATC, LcdE goto Main ;***************************************************************** ;Zeitverzögerung um loops * 1 ms ; 4MHz externer Takt bedeutet 1MHz interner Takt ; also dauert 1 ms genau 1000 Befehle ; 110 Schleifen a 9 Befehle sind 990 Befehle = 0.99 ms ; die restlichen 10 Befehle für Einsprung und Rücksprung WAIT top movlw .254 ; timing adjustment variable (1ms) für 10mhz movwf loops2 top2 nop ; sit and wait nop nop nop nop nop decfsz loops2, F ; inner loops complete? goto top2 ; no, go again ; decfsz loops, F ; outer loops complete? goto top ; no, go again retlw 0 ; yes, return from subWAIT ;********************************************************** ; Initialisierung des LCD-Displays InitLCD movlw D'255' ; 250 ms Pause nach dem Einschalten movwf loops call WAIT movlw B'00110000' ; 1 call C8b movlw D'40' ; 40 ms Pause movwf loops call WAIT movlw B'00110000' ; 2 call C8b movlw B'00110000' ; 3 call C8b movlw B'00111000' ; 8Bit-Modus, mehrzeilig, 5x7Dot call C8b movlw B'00001110' ; display ein, cursor wird angezeigt, zeichen blinkt nicht call C8b movlw B'00000110' ; automatisch inkrement call C8b movlw B'00000010' ; home call C8b return ; ein Steuerbyte 8-bittig übertragen C8b movwf LATB bsf LATC, LcdE nop bcf LATC, LcdE movlw D'10' movwf loops call WAIT return ; darauf warten, daß das Display bereit zur Datenannahme ist LB ;LcdBusy movlw B'11111111' ; PortB alle inputs movwf TRISB BL ;BusyLoop bcf LATC, LcdRs bsf LATC, LcdRw ; Lesen bsf LATC, LcdE nop movf PORTB, w movwf LcdStatus bcf LATC, LcdE nop bsf LATC, LcdE ; Enable nop bcf LATC, LcdE btfsc LcdStatus, 7 ; teste bit 7 goto BL bcf LATC, LcdRw clrf TRISB return ; ein Datenbyte von LCDDaten zum Display übertragen OLD ;OutLcdDaten movlw D'1000' movwf loops call WAIT call LB movf LcdDaten, w movwf LATB ; Daten schreiben bsf LATC, LcdRs ; Daten bsf LATC, LcdE ; Enable LcdBus nop bcf LATC, LcdE ; Disable LcdBus bcf LATC, LcdRs ; return end