#include <18f25k20.h>
#fuses hs
#use delay(clock=20M)
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B1
#define LCD_RW PIN_B2
#define LCD_E PIN_B3
#include "flex_lcd_c2.c" /// libreria para el manejo de la lcd
#define TTL_TX PIN_C6
#define TTL_RX PIN_C7
#use rs232(baud=9600, xmit=TTL_TX, rcv=TTL_RX)
int const lenbuff=32; // Longitud máxima del buffer
int xbuff=0x00; // Índice: siguiente char en cbuff
char cbuff[lenbuff]; // Buffer de recepción
int1 flagcommand=0; // Flag para comando disponible
void init_cbuff(void){
int i;
for(i=0;i<lenbuff;i++){// Bucle que pone a 0 todos los
cbuff[i]=0x00; // caracteres en el buffer
}
xbuff=0x00; // Inicializo el indice de siguiente caracter
}
void add_2_cbuff(char c){
switch(c){
case 0x0D: // Enter -> Habilita Flag para procesar comando
flagcommand=1;
break;
default: // Añade caracter recibido al Buffer
cbuff[xbuff++]=c;
}
}
void commad_menu(void){
delay_ms(100);
delay_ms(100);
delay_ms(100); // inicializar el el GPS A7
}
void commad_process(void){
flagcommand=0; // Desactivo flag de comando pendiente.
printf(lcd_putc
,"%s\n"cbuff
); // ... y lo muestro init_cbuff(); // Borro buffer.
}
#int_rda
void serial_isr() { // Interrupción recepción serie USART
char rcvchar=0x00; // último caracter recibido
if(kbhit()){ // Si hay algo pendiente de recibir ...
rcvchar
=getc(); // lo descargo y ... add_2_cbuff(rcvchar); // lo añado al buffer
}
}
void main() {
lcd_init();
commad_menu(); // Nos presentamos
init_cbuff(); // Borra buffer al inicio
enable_interrupts(int_rda); // Habilita Interrupción RDA
enable_interrupts(global); // Habilita interrupciones
do {
if(flagcommand) commad_process(); // Hay algo pendiente de procesar y lo procesa.
} while (TRUE);
}