#include <htc.h>
#include <stdlib.h>
#define _XTAL_FREQ 4000000

#define   c (STATUS&1)
#define   z (STATUS&4)
#define   en 0x4
#define   rs 0x8
#define  mask 0xf4
#define   lcd_bus (PORTB)
#define   pd (PORTD)


volatile char inc;



//													Lcd Init Write Rutin			
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	
void lcd_write ( lcd_data,rw){
	if (rw == 1)
	lcd_bus = ((lcd_data | en) & mask );
	else		lcd_bus = ((lcd_data | en) | rs );
	lcd_bus = 0;
	__delay_ms(2);
	lcd_data = (lcd_data << 4 | lcd_data >> 4 );
	if ( rw == 1 )
	lcd_bus = ((lcd_data | en) & mask );
	else		lcd_bus = ((lcd_data | en) | rs );
	lcd_bus = 0;
	__delay_ms(2);
}			
	
//													Device Init			
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~		   
		   void init (void){   
		      TRISD = 0;
		      TRISC = 1;
				TRISB = 0b00000011;
//		      TRISBbits.TRISB2 = 2;
		      OPTION_REG = 7; 
			INTE = 1;
			GIE	= 1;
		
			  ANSELH = 0;
//													Lcd Init 		
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~		
	char lcd_data = 0;
	char i = 0;
	char rw = 1;
	for ( i=0; i<3;i++){
		lcd_bus = (0x30 | en);
		lcd_bus = 0;
		__delay_ms(5);
	}
	lcd_bus = (0x20 | en);
	lcd_bus = 0;
		__delay_ms(5);

	lcd_data = (0x28);
		lcd_write (lcd_data,rw);
	lcd_data = (0x8);
		lcd_write (lcd_data,rw);
	lcd_data = (0x1);
		lcd_write (lcd_data,rw);
	lcd_data = (0x6);
		lcd_write (lcd_data,rw);
	lcd_data = (0xf);
		lcd_write (lcd_data,rw);
	lcd_data = (0x80);
		lcd_write (lcd_data,rw);
}
//													Main 			
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	

void interrupt my_isr(void){

	pd = TMR0;


	TMR0 = 0;
	INTF = 0;
}
	

void main (void){
   init ();
	 
	for (;;){
	

}
}














