LIST P=16F1936, R=DEC
#include "P16F1936.inc"
;
 __CONFIG _CONFIG1, 0x09A4
 __CONFIG _CONFIG2, 0x1433
; 
cblock 0x20
 temp1,temp2,temp3,temp4
endc
;
org 0x00
	goto settings
org 0x04
	goto interrupt
settings
	banksel LATA
			clrf LATA
			clrf LATB
			clrf LATC
	banksel ANSELA
			clrf ANSELA
			clrf ANSELB
	banksel TRISA
			movlw b'00111111'
			movwf TRISA
			movlw b'11111111'
			movwf TRISB
			movlw b'00000000'
			movwf TRISC
			movlw 0xFF
			movwf TRISE
	banksel OSCCON
			movlw b'01101010'	; 4 MHz
;			movlw b'01110010'	; 8 MHz
;			movlw b'01111010'	; 16 MHz
			movwf OSCCON
	banksel LCDCON
			clrf LCDCON
	banksel ADCON0
			clrf ADCON0
	banksel ADCON1
			movlw b'10010000'	; 4 MHz
;			movlw b'11010000'	; 8 MHz
;			movlw b'10100000'	; 16 MHz
			movwf ADCON1
	banksel SSPMSK
			clrf SSPMSK
	banksel PORTA
			clrf PORTA
			clrf PORTB
			clrf PORTC
			clrf PORTE
goto main
;
interrupt
; now it must examine which type interrupt had happened?
banksel INTCON
	btfsc INTCON,2				; is it TMR0 overflow?
	call tmr0over
banksel PIR1
	btfsc PIR1,0				; is it TMR1 overflow?
	call tmr1over
banksel PORTA
;
retfie
;
; *******************************************************************
;
tmr0over
return
;
tmr1over
return
;
wait5ms
movlw .5
movwf temp1
A1
movlw .250
movwf temp2
		decfsz temp2,F
		goto $-1
goto A1
return
wait100mks
movlw .50
movwf temp1
		decfsz temp1,F
		goto $-1
return
wait40mks
movlw .20
movwf temp1
		decfsz temp1,F
		goto $-1
return
;
portsim
movwf temp4
clrf PORTC
		btfsc temp4,3
			bsf PORTC,3
		btfsc temp4,2
			bsf PORTC,2		
		btfsc temp4,1
			bsf PORTC,1			
		btfsc temp4,0
			bsf PORTC,0
return
;
lcdcmd
movwf temp3
		swapf temp3,F
		movf temp3,0
		andlw b'00001111'
			call wait40mks
		bcf PORTA,7				;RS
call portsim
		bsf PORTA,6				; EN
		bcf PORTA,6
		swapf temp3,F
		movf temp3,0
		andlw b'00001111'
			call wait40mks
		bcf PORTA,7				;RS
call portsim
		bsf PORTA,6				; EN
		bcf PORTA,6
return
lcddata
movwf temp3
		swapf temp3,F
		movf temp3,0
		andlw b'00001111'
			call wait40mks
		bsf PORTA,7				;RS
call portsim
		bsf PORTA,6				; EN
		bcf PORTA,6
		swapf temp3,F
		movf temp3,0
		andlw b'00001111'
			call wait40mks
		bsf PORTA,7				;RS
call portsim
		bsf PORTA,6				; EN
		bcf PORTA,6
return






;
init_lcd
call wait5ms
call wait5ms
call wait5ms
		movlw b'00110011'
		call lcdcmd
call wait5ms
		movlw b'00110011'
		call lcdcmd
call wait100mks
		movlw b'00110010'
		call lcdcmd
		movlw b'00101000'
		call lcdcmd
		movlw b'00001000'
		call lcdcmd
		movlw b'00000110'
		call lcdcmd
		movlw b'00001111'
		call lcdcmd
return


main

call init_lcd

movlw 0x80
call lcdcmd

movlw 'A'
call lcddata

nop
nop
nop
nop
goto $-2


end