
		#include <p16f877.inc>
        	ERRORLEVEL -302
		__CONFIG	_BODEN_OFF & _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC

	CBLOCK	0X0C
	C1
	ENDC
	
	Lcd_data1 	EQU B'00100001'	;FUNCTION SET PD=0 AND V=0
	Lcd_data2 	EQU B'10000000'	;SET X-ADDRESS 0 TO 83
	Lcd_data3 	EQU B'00100000'	;
	Lcd_data4 	EQU B'00001100'	;DISPLAY CONTROL SET D=1 AND E=0
	Lcd_data5 	EQU B'01000000'	;SET Y-ADDRESS 0 TO 5
	T2			EQU	0X20	
	T1			EQU	0X40
	DISPLAY1	EQU	255
	DISPLAY2	EQU	200
	
	
START
		BANKSEL	TRISA
		MOVLW	H'00'
		MOVWF	TRISA			
		MOVWF	TRISB			
		MOVWF	TRISC	
		BANKSEL	SSPCON	
	
  	 	CLRF  	PCLATH             	
	   	MOVLW   B'00110010'             
        MOVWF 	SSPCON           
		

;------------------  DISPLAY CONFIG  ---------------------------------
	
		MOVLW	B'00000000'		;D/C  SELECT COMMAND AND RESET
		MOVWF	PORTB			
		CALL	DELAY			
		MOVLW	B'00000001'		;NOT RESET
		MOVWF	PORTB			
		MOVLW	Lcd_data1		;FUNCTION SET PD=0 (CHIP IS ACTIVE) AND V=0	(HORIZONTAL)
		CALL 	TRANSMIT		
		MOVLW	Lcd_data2		;SET X-ADDRESS 0 TO 83	
		CALL 	TRANSMIT
		MOVLW	Lcd_data3		;	
		CALL 	TRANSMIT
		MOVLW	Lcd_data4		;DISPLAY CONTROL SET D=1 AND E=0
		CALL 	TRANSMIT
		MOVLW	Lcd_data5		;SET Y-ADDRESS 0 TO 5
		CALL 	TRANSMIT
		MOVLW	B'00000011'		;D/C SELECT DATA, NOT RESET
		MOVWF	PORTB	
		CALL	DELAY
;-----------------  CLEANING ROUTINE --------------------------------
	
CLEAN1	MOVLW	B'00000000'
		CALL	TRANSMIT	
		DECFSZ	DISPLAY1,F
		GOTO	CLEAN1
		
CLEAN2	MOVLW	B'00000000'
		CALL	TRANSMIT
		DECFSZ	DISPLAY2,F
		GOTO	CLEAN2
;----------------  MAINPROGAM  --------------------------------------
IDE	

		MOVLW	B'00000001'		;NOT RESET
		MOVWF	PORTB			
		MOVLW	Lcd_data2		;SET X-ADDRESS 0 TO 83	
		CALL 	TRANSMIT
		MOVLW	Lcd_data5		;SET Y-ADDRESS 0 TO 5
		CALL 	TRANSMIT
		MOVLW	B'00000011'		;D/C SELECT DATA, NOT RESET
		MOVWF	PORTB	
	
	
		MOVLW	D'4'
		MOVWF	C1
IR		MOVFW 	C1	 			;pointer
		CALL 	TABLAZAT 
		CALL	TRANSMIT
		DECFSZ	C1,F
		GOTO	IR
		MOVLW	B'00000011'
		CALL	TRANSMIT
		MOVLW	B'00000001'	
		MOVWF	PORTB
		
		GOTO	FINISH


ORG	0X50	
TABLAZAT
BCF PCLATH,0
BCF PCLATH,1 ; PCLATH = 00
ADDWF PCL,F ; ADD OFFSET TO PROGRAM COUNTER
RETLW	B'00000001'
RETLW 	B'00000011'
RETLW	B'00000111'
RETLW 	B'00001111'
RETLW	B'00011111'
RETLW	B'00000001'

;--------------------  TRANSMISION SUBROUTINE  ------------------------------


TRANSMIT 
			BANKSEL	SSPBUF			
     	 	MOVWF 	SSPBUF			;PLACE DATA IN BUFFER TO SEND 

	    	BANKSEL	SSPSTAT			;
	    		
LOOP       	BTFSS 	SSPSTAT, BF		;CHECK IF TRANSMISSION IS COMPLETE
         	GOTO  	LOOP			;
         	BCF   	STATUS, RP0		;SPECIFY BANK 0

	 	RETURN			   	;RETURN FROM SUBROUTINE


;-----------------------------------------------------------------------------
DELAY	
			MOVLW	D'255'
			MOVWF	T1
DEL			MOVLW	D'255'
			MOVWF	T2
DEL1		NOP
			DECFSZ	T2,F
			GOTO	DEL1
			DECFSZ	T1,F
			GOTO	DEL
			RETURN
	

FINISH
		
	GOTO	FINISH

		END

