hola amigos, hace tiempo que estoy sigueindo este tema y he hecho un programa para recibir y enviar sms, pero quede estancado. El programa funciona, inicia con AT luego lo configua en modo texto, realiza una llamada de prueba y la corta y finalmente envia el comando para que este atento a recibir un mensaje. luego pasa al programa principal que enciende y apaga un led cada 200 ms. esta ahi hasta qe recibe una llamada que envia el comando RING desde el telefono a la pic, ahi deberia encenderse otro led. el problema que en proteus funciona bien pero al momento de implementarlo en la pic no funciona, hace todo pero no llega al parpadeo de los leds.
me podrian ayudar porfavor, les dejo el programa que he hecho. gracias
#include <16f628.h>
#use delay(clock=4000000)
#use rs232 (baud=9600, bits=8, parity=N,xmit=PIN_B2,rcv=PIN_B1)
#include <stdlib.h>
#byte TRISA = 0x85
#byte PORTA = 0x05
#fuses xt,nowdt,nobrownout,nolvp,noprotect // Fusibles
int i;
char dato[3];
char mensaje[6];
char ok[3];
#INT_rda
void rda_isr()//función de interrupción por recepción de datos USART
{
gets(dato);
gets (mensaje);
if(dato[0]=='R'&&dato[1]=='I'&&dato[2]=='N'&&dato[3]=='G') //enciende led
output_high(PIN_A3);
else
output_low(PIN_A3);
return;
}
void main()
{
enable_interrupts(INT_RDA); // Interrupcion RS232
enable_interrupts(INT_EXT); // interrupcion externa
ext_int_edge(H_TO_L); // por flanco de bajada
enable_interrupts(GLOBAL);
disable_interrupts(INT_RDA);
set_tris_a(0x00); // puerto A como salida
OUTPUT_A(0x00); // estabiliza la salida a cero
output_high(PIN_A0);
printf("AT\r\n"); // Le llama la atención al teléfono.
gets(ok);
delay_ms(1000);
printf("AT+CMGF=1\r\n"); // Modo texto
gets(ok);
delay_ms(1000);
printf("ATD87663847;\r\n"); // realiza una llamada telefonica
delay_ms(5000);
delay_ms(5000);
printf("AT+CHUP\r\n"); // corta la llamada.
delay_ms(1000);
printf("AT+CNMI=1,2,0,0,0\r\n"); // espera mensaje
delay_ms(1000);
enable_interrupts(INT_RDA);
while(TRUE)
{
output_high(PIN_A0);
delay_ms(200);
output_low(PIN_A0);
delay_ms(200);
}
}