#define _XTAL_FREQ 20000000
#include <stdio.h>
#include <stdlib.h>
#include "config_bits.c"
#include "config_ports.c"
//-- CONSTANTES
#define B9600_4MHZ 0x19 //-- Vel. 9600 baudios cuando cristal de 4MHz
#define B9600_20MHZ 0x81 //-- vel. 9600 baudios cuando cristal de 20MHz
//---------------------------------------------
//-- CONSTANTES MODIFICABLES POR EL USUARIO
//---------------------------------------------
//-- Establecer la velocidad para un cristal de 20MHZ
#define B9600 B9600_20MHZ
//-- VARIABLES GLOBALES
unsigned char caracter;
//---------------------------------------------
//-- DECLARACION DE FUNCIONES
//---------------------------------------------
void sci_init(void);
unsigned char sci_read(void);
void sci_write(unsigned char car);
void config_ports(void);
/****************************************************/
/* Configurar el puerto serie a N81 y 9600 Baudios */
/****************************************************/
void sci_init(void)
{
SPBRG = B9600; //-- 9600 baudios
TXSTA = 0x24; //-- Configurar transmisor
RCSTA = 0x90; //-- Configurar receptor
}
/******************************************/
/* Recibir un caracter por el SCI */
/*----------------------------------------*/
/* DEVUELVE: */
/* -Caracter recibido */
/******************************************/
unsigned char sci_read(void)
{
//-- Eserar hasta que llegue el dato
while (!RCIF);
return RCREG;
}
/*****************************************/
/* Transmitir un caracter por el SCI */
/*---------------------------------------*/
/* ENTRADAS: */
/* -car: Caracter a enviar */
/*****************************************/
void sci_write(unsigned char car)
{
//-- Esperar a que Flag de lista para transmitir se active
while (!TXIF);
//-- Hacer la transmision
TXREG=car;
}
/****************************************
* Configurar puertos del Pic
*****************************************/
/*void config_ports(void)
{
ADCON1 = 0x06; //todos los pines como digitales
TRISB = 0x00; //todo el puerto B como salidas
PORTB = 0x00; //todos los leds del puerto B apagados
}*/
//----------------------------------------
//-- FUNCION PRINCIPAL
//----------------------------------------
void main(void)
{
config_ports(); //Configuracion de puertos.
sci_init(); //Configuramos la comunicacion por puerto serie.
for(;;)
{
//-- Esperar a que llegue dato del PC
caracter = sci_read();
switch (caracter)
{
/* Comprueba si se a pulsado la letra a de ser asi
encendera el led conectado en RB0 */
case 0x61: //letra a
PORTB = 0x01;
break;
/* Comprueba si se a pulsado la letra b de ser asi
encendera el led conectado en RB1 */
case 0x62: //letra b
PORTB = 0x02;
break;
/* Comprueba si se a pulsado ENTER de ser asi
apaga los led's */
case 0x20: //tecla ESPACIO
PORTB = 0x00;
break;
}
//-- ... envia de vuelta el caracter por el puerto serie
sci_write(caracter);
}
}