Hola a todos.
Estoy volviendome loco.
He intentado recibir mensaje pero no recibo nada del modem, ni siquiera el OK después de cada orden que le mando.
La comunicación creo si funciona, puesto que el modem se inicializa y manda mensaje.
Le he puesto una pantalla para leer lo que me manda moden, pero nada de nada.
El programa es:
#include <16F876.h>
#include <STRING.h>
#fuses XT,NOWDT,PUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8) //manejo del RS232
#include <flex_lcd.h>
int cod=0x1A;
int xbuffrec=0x00; // índice del Buffer de Recepción
int xbuffrec1=0x00;
int i=0x00;
int j=0x00;
int var=0x00;
int resultado=0x00;
int men=0x00;
int men1=0x00;
int smsr=0x00;
int saltb=0x00;
int nbu=0x00;
//int nch=0x00;
//char cnch[2]={0x00,0x00};
char buffrec[61];
char buffrec1[10];
char compa[5]={'S','M'};
char compa1[6]={'H','O','L','A'};
char var1[13]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char var2[13]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char var3[13]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char nm[2];
void enviar (void);
void serial_isr (void);
void Add_buffrec (char c);
void sacar (void);
void sacar1 (void);
void comparar (void);
void comparar1 (void);
void separar (void);
void borrarcad (void);
void borrar (void);
#int_rda
void serial_isr()
{
if(kbhit())
{ // Si hay algo pendiente de recibir ...
Add_buffrec(getc()); // lo recibo y lo añado al Buffer de Recepción
}
}
void Add_buffrec (char c)
{ // Añade carácter al Buffer de Recepción
//putchar(c);
lcd_putc(c);
if (nbu==0)
{
switch(c)
{
case 0x0A:
{
if (saltb==0) // [Enter] -> Habilita Flag para procesar comando en Main
{
smsr=1;
break;
}
else
saltb=0;
nbu=1;
break;
}
case 0x22:
{
saltb=1;
buffrec[xbuffrec++]=c;
break;
}
default:
saltb=0;
buffrec[xbuffrec++]=c; // Añade carácter recibido al Buffer
}
}
else
{
switch(c)
{
case 0x0D:
smsr=1;
break;
default:
buffrec1[xbuffrec1++]=c;
}
}
}
void main (void)
{
SET_TRIS_A(0xFF);
SET_TRIS_B(0x00);
OUTPUT_B(0x00);
delay_ms(5000);
printf("AT+CPIN=2805\r\n");
delay_ms(2000);
OUTPUT_HIGH(PIN_B0);
printf("AT+IPR=9600\r\n");
delay_ms(2000);
printf("AT+ICF=3,4\r\n");
delay_ms(2000);
printf("AT+CICB=0\r\n");
delay_ms(2000);
printf("ATS0=1\r\n");
delay_ms(2000);
printf("AT+IFC=0,0\r\n");
delay_ms(2000);
printf("AT+CMGF=1\r\n");
delay_ms(2000);
printf("AT&WZ\r\n");
delay_ms(2000);
//enable_interrupts(int8 lcd_read_byte); // Habilitamos la interrupción por recepción serie
enable_interrupts(int_rda); // Habilitamos la interrupción por recepción serie
enable_interrupts(global); // Habilitamos las interrupciones
lcd_init();
lcd_putc("hola mundo");
lcd_gotoxy(0x01,0x02);
OUTPUT_HIGH(PIN_B1);
printf("AT&WZ\r\n");
delay_ms(2000);
//enviar();
borrar();
delay_ms(2000);
while(true)
{
if (smsr==1)
{
delay_ms(2000);
borrarcad();
//delay_ms(2000);
//sacar();
delay_ms(1000);
separar();
//delay_ms(2000);
//sacar1();
delay_ms(2000);
comparar();
delay_ms(2000);
comparar1();
borrar();
delay_ms(2000);
smsr=0;
OUTPUT_LOW(PIN_B0);
}
if (men==1)
{
printf("AT+CMGR=1");
putc(nm[0]);
printf("\r\n");
men=0;
}
if (men1==1)
{
men1=0;
OUTPUT_LOW(PIN_B0);
}
}
}
Una ayudita Porfavor.