#ifndef _SERIAL_H_
#define _SERIAL_H_
#define BAUD 9600      
#define FOSC 4000000L
#define NINE 0     /* Use 9bit communication? FALSE=8bit */
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
#define HIGH_SPEED 1
#if NINE == 1
#define NINE_BITS 0x40
#else
#define NINE_BITS 0
#endif
#if HIGH_SPEED == 1
#define SPEED 0x4
#else
#define SPEED 0
#endif
#if defined(_16F87) || defined(_16F88)	
	#define RX_PIN TRISB2	
	#define TX_PIN TRISB5
#else	
	#define RX_PIN TRISC7	
	#define TX_PIN TRISC6
#endif
/* Serial initialization */
#define init_comms()\	
	RX_PIN = 1;	\	
	TX_PIN = 1;		  \	
	SPBRG = DIVIDER;     	\	
	RCSTA = (NINE_BITS|0x90);	\	
	TXSTA = (SPEED|NINE_BITS|0x20)

void putch(unsigned char);
unsigned char getch(void);
unsigned char getche(void);
#endif

#include <pic.h>
#include <stdio.h>
#include "usart.h"

void putch(unsigned char byte) 
{	
	/* output one byte */	
	while(!TXIF)	/* set when register is empty */		
		continue;	
	TXREG = byte;
}
unsigned char getch() 
{	
	/* retrieve one byte */	
	while(!RCIF)	/* set when register is not empty */		
		continue;	
	return RCREG;	
}
unsigned chargetche(void)
{	
	unsigned char c;	
	putch(c = getch());	
	return c;
}