Code:
list P=16F84.inc
; PORTA: 0 -
; 1 -
; 2 -
; 3 -
; 4 -
; PORTB: 0 LCD Display E
; 1
; 2 LCD Display RS
; 3 LCD Display R/W
; 4-7 LCD Display D4 .. D7
#include <P16f84.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC
w_copy Equ 0x20
s_copy Equ 0x21
LcdDaten Equ 0x22
LcdStatus Equ 0x23
loops EQU 0x24
loops2 EQU 0x25
; Constanten festlegen
PORTControl equ PORTB
PORTData equ PORTB
LcdEnable equ 0
LcdRw equ 3
LcdRs equ 2
Ini_con Equ B'00000000'
Ini_opt Equ B'00000010'
Init bsf STATUS, RP0
movlw Ini_opt
movwf OPTION_REG
movlw B'11111000'
movwf TRISA
movlw B'00000000'
movwf TRISB
bcf STATUS, RP0
clrf PORTA
clrf PORTB
movlw Ini_con
movwf INTCON
call InitLCD
InitLCD
movlw D'255'
movwf loops
call WAIT
movlw B'00110000'
movwf PORTB
bsf PORTB, LcdEnable
nop
bcf PORTB, LcdEnable
movlw D'50'
movwf loops
call WAIT
movlw B'00110000'
call Control8Bit
movlw B'00110000'
call Control8Bit
movlw B'00100000'
call Control8Bit
movlw B'00000001'
call OutLcdControl
movlw B'00101000'
call OutLcdControl
movlw B'00001000'
call OutLcdControl
movlw B'00000110'
call OutLcdControl
movlw B'00000011'
call OutLcdControl
movlw B'00001111'
call OutLcdControl
return
Control8Bit
movwf PORTB
bsf PORTB, LcdEnable
nop
bcf PORTB, LcdEnable
movlw D'10'
movwf loops
call WAIT
return
OutLcdControl
movwf LcdDaten
call LcdBusy
movf LcdDaten, w
andlw H'F0'
movwf PORTData
bsf PORTControl, LcdEnable
nop
bcf PORTControl, LcdEnable
swapf LcdDaten, w
andlw H'F0'
movwf PORTData
bsf PORTControl, LcdEnable
nop
bcf PORTControl, LcdEnable
return
WAIT
top movlw .110
movwf loops2
top2 nop
nop
nop
nop
nop
nop
decfsz loops2, F
goto top2
decfsz loops, F
goto top
retlw 0
LcdBusy
bsf PORTA, 1
bsf STATUS, RP0
movlw B'11110000'
iorwf TRISB, f
bcf STATUS, RP0
BusyLoop
bcf PORTControl, LcdRs
bsf PORTControl, LcdRw
bsf PORTControl, LcdEnable
nop
movf PORTData, w
movwf LcdStatus
bcf PORTControl, LcdEnable
nop
bsf PORTControl, LcdEnable
nop
bcf PORTControl, LcdEnable
btfsc LcdStatus, 7
goto BusyLoop
bcf PORTControl, LcdRw
bsf STATUS, RP0
movlw B'00001111'
andwf TRISB, f
bcf STATUS, RP0
bcf PORTA, 1
return
OutLcdDaten
bsf PORTA, 2
movwf LcdDaten
call LcdBusy
movf LcdDaten, w
andlw H'F0'
movwf PORTData
bsf PORTControl, LcdRs
bsf PORTControl, LcdEnable
nop
bcf PORTControl, LcdEnable
swapf LcdDaten, w
andlw H'F0'
movwf PORTData
bsf PORTControl, LcdRs
bsf PORTControl, LcdEnable
nop
bcf PORTControl, LcdEnable
bcf PORTControl, LcdRs
bcf PORTA, 2
return
end
Bereit
movlw 'B'
movwf LcdDaten
call OutLcdDaten
movlw 'e'
movwf LcdDaten
call OutLcdDaten
movlw 'r'
movwf LcdDaten
call OutLcdDaten
movlw 'e'
movwf LcdDaten
call OutLcdDaten
movlw 'i'
movwf LcdDaten
call OutLcdDaten
movlw 't'
goto Main
Main
BTFSC STATUS, RA0
goto Alarm1
btfsc Status, RA1
goto Alarm2
btfsc Status, RA2
goto Alarm3
btfsc Status, RA3
goto Alarm4
btfsc Status, RA4
goto Alarm5
goto Main
Alarm1
goto clrdisplay
movlw 'A'
movwf LcdDaten
call OutLcdDaten
movlw 'l'
movwf LcdDaten
call OutLcdDaten
movlw 'a'
movwf LcdDaten
call OutLcdDaten
movlw 'r'
movwf LcdDaten
call OutLcdDaten
movlw 'm'
movwf LcdDaten
call OutLcdDaten
movlw '1'
movwf LcdDaten
call OutLcdDaten
Goto check1
Alarm2
goto clrdisplay
movlw 'A'
movwf LcdDaten
call OutLcdDaten
movlw 'l'
movwf LcdDaten
call OutLcdDaten
movlw 'a'
movwf LcdDaten
call OutLcdDaten
movlw 'r'
movwf LcdDaten
call OutLcdDaten
movlw 'm'
movwf LcdDaten
call OutLcdDaten
movlw '2'
movwf LcdDaten
call OutLcdDaten
Goto check2
Alarm3
goto clrdisplay
movlw 'A'
movwf LcdDaten
call OutLcdDaten
movlw 'l'
movwf LcdDaten
call OutLcdDaten
movlw 'a'
movwf LcdDaten
call OutLcdDaten
movlw 'r'
movwf LcdDaten
call OutLcdDaten
movlw 'm'
movwf LcdDaten
call OutLcdDaten
movlw '3'
movwf LcdDaten
call OutLcdDaten
Goto check3
Alarm4
goto clrdisplay
movlw 'A'
movwf LcdDaten
call OutLcdDaten
movlw 'l'
movwf LcdDaten
call OutLcdDaten
movlw 'a'
movwf LcdDaten
call OutLcdDaten
movlw 'r'
movwf LcdDaten
call OutLcdDaten
movlw 'm'
movwf LcdDaten
call OutLcdDaten
movlw '4'
movwf LcdDaten
call OutLcdDaten
Goto check4
Alarm5
goto clrdisplay
movlw 'A'
movwf LcdDaten
call OutLcdDaten
movlw 'l'
movwf LcdDaten
call OutLcdDaten
movlw 'a'
movwf LcdDaten
call OutLcdDaten
movlw 'r'
movwf LcdDaten
call OutLcdDaten
movlw 'm'
movwf LcdDaten
call OutLcdDaten
movlw '5'
movwf LcdDaten
call OutLcdDaten
Goto check5
check1
btfsc Status, RA0
goto check1
clrdisplay
goto Main
check2
btfsc Status, RA1
goto check2
clrdisplay
goto Main
check3
btfsc Status, RA2
goto check3
clrdislay
goto Main
check4
btfsc Status, RA3
goto check4
clrdisplay
Goto Main
check5
btfsc Status, RA4
goto check5
clrdisplay
Goto Main
clrdisplay
movlw D'255'
movwf loops
call WAIT
movlw B'00110000'
movwf PORTB
bsf PORTB, LcdE
nop
bcf PORTB, LcdE
movlw D'50'
movwf loops
call WAIT
movlw B'00110000'
call Control8Bit
movlw B'00110000'
call Control8Bit
movlw B'00100000'
call Control8Bit
movlw B'00000001'
call OutLcdControl
movlw B'00101000'
call OutLcdControl
movlw B'00001000'
call OutLcdControl
movlw B'00000110'
call OutLcdControl
movlw B'00000011'
call OutLcdControl
movlw B'00001111'
call OutLcdControl
return
Lesezeichen