61 lines
1.2 KiB
C
61 lines
1.2 KiB
C
#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;
|
|
} |