Postat: 4 oktober 2006, 15:00:05
Har ändrat en del i koden sen sist jag postade den. Här kommer den igen.
Som sagt, problemet är att displayen töms inte och cursorn hoppar fram 5 tecken.
Sodjan:
Jag tror att det blir W xor W, altså den töms?
Som sagt, problemet är att displayen töms inte och cursorn hoppar fram 5 tecken.
Sodjan:
Jag tror att det blir W xor W, altså den töms?
Kod: Markera allt
;*********************************************
;* Delay på 5mSek, genererad från
;* http://www.piclist.com/techref/piclist/codegen/delay.htm *
;*********************************************
; Delay = 0.005 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.005 seconds = 5000 cycles
; Error = 0 %
Delay_5ms:
;4998 cycles
MOVLW h'E7'
MOVWF TIMER1
MOVLW h'04'
MOVWF TIMER2
Delay_5ms_0:
DECFSZ TIMER1, 1
GOTO $+2
DECFSZ TIMER2, 1
GOTO Delay_5ms_0
;3 cycles
GOTO $+1
;2 cycles (including call)
RETURN
;*********************************************
;* Sänder data till display *
;*********************************************
DISPLAY_SEND:
IORLW DISP_STAT ;Lägger till eventuella status-bitar som E och RS
MOVWF PORTB ;Skickar till displayen
XORLW DISP_E ;Tar bort Enable
MOVWF PORTB
CALL Delay_5ms ;Dröjer 5mSek
MOVLW b'00000000'
MOVWF PORTB
;CALL Delay_5ms ;Dröjer 5mSek
RETURN
;*********************************************
;* Initiera display *
;*********************************************
DISPLAY_INIT:
CALL Delay_5ms
CALL Delay_5ms
CALL Delay_5ms
CALL Delay_5ms ;Låter displayen starta upp i 20mSek
MOVLW b'00110000'
CALL DISPLAY_SEND ; 8-bit
MOVLW b'00110000'
CALL DISPLAY_SEND ; 8-bit
MOVLW b'00110000'
CALL DISPLAY_SEND ; 8-bit
MOVLW b'00100000'
CALL DISPLAY_SEND ; 4-bit!
MOVLW b'00100000'
CALL DISPLAY_SEND
MOVLW b'10000000'
CALL DISPLAY_SEND ; 2rader och 5x7pixlars font
MOVLW b'00000000'
CALL DISPLAY_SEND
MOVLW b'10000000'
CALL DISPLAY_SEND ; Display off, curs off, blink off
MOVLW b'00000000'
CALL DISPLAY_SEND
MOVLW b'00010000'
CALL DISPLAY_SEND ; Clear display
CALL Delay_5ms
MOVLW b'00000000'
CALL DISPLAY_SEND
MOVLW b'01100000'
CALL DISPLAY_SEND ; Display shift off
MOVLW b'00000000'
CALL DISPLAY_SEND
MOVLW b'11110000'
CALL DISPLAY_SEND ; Display on, curs on, blink on
RETURN
;*********************************************
;* Start rutinen *
;*********************************************
START:
;###Initiera PICen
MOVLW b'00000111'
MOVWF CMCON ;Alla pinnar ska vara digitala
BSF STATUS, RP0 ;Switchar till Bank1
MOVLW b'11111'
MOVWF TRISA ;Alla pinnar på PortA är inputs
MOVLW b'00000000'
MOVWF TRISB ;Alla pinnar på PortB är outputs
BCF STATUS, RP0 ;Switchar tillbaka till Bank0
;###
BSF DISP_STAT,DISP_EBIT ;Sätter Enable pinnen
CALL DISPLAY_INIT ;Initiera displayen
BSF DISP_STAT,DISP_RS ;Sätter RS-flaggan så det är tecken vi handskas med nu