//   Proyecto "hola mundo" comunicacion RS232 entre PIC y PC
//   Pagina del proyecto www.pesadillo.com
//
//   El ejercicio permite encender un led conectado en la puerta A, pin 0
//   Este, se enciende y se apaga cada vez que se introduce un dato
//   en el Hiperterminal puerto COM1 configurado a 9600  
//   y control de flujo ninguno.
//
//   Se permite la difusion de esta información mientras se mantengan
//   estas primera lineas intactas.

#include <16f84A.h> //Incluimos la libreria para manejo del PIC

#byte PORTA=0x05 //Apunto la puerta A a la posicion 0x05 (banco 0)
#byte PORTB=0x06 //Apunto la puerta B a la posicion 0x06 (banco 0)
#use delay(clock=4000000) //Especifico que utilizo "reloj" de 4MhZ

#define RS232_RCV	PIN_B1 // Definimos pin que recibe transmission del PC
#define RS232_XMIT PIN_B2 //Definimos pin que envia transmission del PC
//Se utilizan los mismos pines que el 16f628 (equivalente a 16f84 con UART)
#use rs232(baud=9600,parity=N,xmit=RS232_XMIT,rcv=RS232_RCV,bits=8, force_sw)
// Utilizo la emulacion de RS232 ya que 16f84 no tiene UART
//En la linea anterior tambien asignamos PIN como TX y PIN comp RX

#use fast_io(a) //Comando que mejora las capacidades de las comunicaciones
#bit led=porta.0 //Asigna el valor "bit" (1 o 0) a la variable "led" (Puerta A pin 0)

void main()// Comienzo del programa
{
set_tris_a(0x00); //Ponemos la puerta A al completo a 0
printf("Apriete cualquier tecla para cambiar el estado del led.");
//Enviamos texto al puerto serie
led=1; //predefinimos el valor del led en "1"

while(true) // Repetir indefinidamente
{
if(kbhit()) // Si se recibe datos a través del puerto serie...
{
getc(); //Recoger valor
led=!led; //Invertir el estado de la variable "led"
}
}
}
