#include <18F4550.h>
#device *=16
#priority rda
#include <math.h>
#include <string.h>
#fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,WDT32768,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,PROTECT,NOSTVREN,NOCPB,NOWRT
#use delay(clock=48000000,RESTART_WDT)
#include <lcd4x20.c>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, PARITY=N, BITS =8, STOP=1, TIMEOUT=1000, ERRORS)
#byte porta = 0xF80 #byte portb = 0xF81 #byte portc = 0xf82 #byte portd = 0xf83 #byte porte = 0xf84
#define buffer_size 160
#bit TRIS_RC0 = 0xF94.0
#bit LATC0 = 0xF8B.0 // Buffer size you can adjust this size
#define LED1 LATC0
char tel[11]="3331562606";
char buffer[buffer_size]; // Datos seriales
char c=0x00; // Last characters recived
int xbuff=0x00; // Buffer
int i,j;
unsigned int16 seg=0,min=0,hrs=0;
int1 desborde=0;
char num[11];
void lee_sms(void);
void reloj(void);
void erase_buffer(void);
void init_sim900(void);
void iniciamensaje(void);
#int_RDA
RDA_isr() {c=getc(); if (xbuff >= buffer_size) {xbuff=0;} else{ buffer[xbuff++]=c;} return 0;}
#INT_RTCC
void clock_isr() { set_timer0(19531); desborde=1; }
void main(void)
{ lcd_init();
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
set_timer0(19531);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
set_tris_a(0x00);
output_a(0x00);
TRIS_RC0=0; desborde=0;
erase_buffer();
init_sim900();
iniciamensaje(); // Funcion para enviar sms
erase_buffer();
for(;;)
{ if (buffer=='"'){j++;{num[(j++)-2]=buffer;}lcd_gotoxy(1,2); printf(lcd_putc,"%c",buffer);} reloj(); lee_sms(); }}
////////////////////////////////////////////////////////////////////////////////
void lee_sms(void)
{
char *ptr;
char llamada[]="RING";
ptr=strstr(buffer,llamada);
if(strncmp(ptr,llamada,4)==0) { output_high(PIN_A0); delay_ms(2000); output_low(PIN_A0); output_high(PIN_A1); delay_ms(3000); output_low(PIN_A1);
erase_buffer(); init_sim900(); erase_buffer(); }return; }
////////////////////////////////////////////////////////////////////////////////
void erase_buffer(void)
{ int i; for(i=0;i<buffer_size;i++) { buffer[i]=0x00; } xbuff=0x00; c=0x00; return; }
void init_sim900(void)
{ int i; for (i=0;i<=95;i++) { LED1=~LED1; delay_ms(200); } LED1=0; delay_ms(800); return; }
void iniciamensaje(void)
{ printf("AT+CMGS="); for(i=0;i<=9;i++) {putc(tel[i]);} printf("\r"); delay_ms(100);
printf("¡ TARGETA GSM LISTA !...\r\n"); delay_ms(500); printf("\x1A"); return; } // Mensaje a enviar, 26 en ascii es ctrl z = enter.
void reloj(void)
{ if(desborde==1) {desborde=0; seg++;} if(seg>59){seg=0; min++;} if(min>59){hrs++; min=0;}
if(hrs==00 && min==02 && seg==00){hrs=0; min=0; seg=0; output_high(pin_a1); delay_ms(2000); output_low(pin_a1); erase_buffer();}}
/////////////////////////////////////