void Modulo_3G1(){
//unsigned int j = 0; Se enciende el Módulo
M3G_ON_OFF = 1; __delay_ms(500);
PWRKEY = 1; __delay_ms(120); PWRKEY = 0; __delay_ms(500);
UA2("Inicio...");
LED_PRUEBA = 0;
// _____________________________________________________
while(1){
if(BandUx == 1){
U2(Dato1);
Dato1 = 0; BandUx = 0;
}
if(BandUx == 2){
U1(Dato2);
Dato2 = 0; BandUx = 0;
}
}
}
/************************
* Salida del UART2 *
************************/
void U2( unsigned char s ){
U2TXREG = s;
while( U2STAbits.TRMT == 0 );
}
/************************
* Salida del UART1 *
************************/
void U1( unsigned char s ){
U1TXREG = s;
while( U1STAbits.TRMT == 0 );
}
void __attribute__ ((interrupt, no_auto_psv)) _U2RXInterrupt(void) {
Dato2 = U2RXREG;
BandUx = 2;
IFS1bits.U2RXIF = 0;
}
/********************************
* Interrupciones del UART1 *
********************************/
void __attribute__ ((interrupt, no_auto_psv)) _U1RXInterrupt(void) {
Dato1 = U1RXREG;
BandUx = 1;
IFS0bits.U1RXIF = 0;
}
at+csq{0D}{0D}+S:2,9{0A}{0A}K{0A} cuando en realidad la pregunta/respuesta deberia ser: at+csq{0D}{0D}{0A}+CSQ: 13,0{0D}{0A}{0D}{0A}OK{0D}{0A}
void InitUART2(){
U2MODE = 0X8008;
U2BRG = ((FCY/BRG_DIV)/BaudRate)-1;
U2STA = 0x0000;
IFS1bits.U2TXIF = 0; // Limpia la interrupcion de TX
IEC1bits.U2TXIE = 0; // Habilita la interrupcion de TX
IFS1bits.U2RXIF = 0; // Limpia la interrupcion de RX
IEC1bits.U2RXIE = 1; // Habilita la interrupcion de RX
IPC7bits.U2RXIP = 7; // Habilita la prioridad 2 de RX
U2MODEbits.WAKE = 1; // Habilita para despertar al puerto
U2MODEbits.UARTEN = 1; // Habilita el puerto
U2STAbits.UTXEN = 1; // Habilita la transmision
}
/********************************
* Configuracion del UART 1 *
********************************/
void InitUART1(){
//U1MODE = 0x0808;
U1MODE = 0X8008;
U1BRG = ((FCY/BRG_DIV)/BaudRate)-1;
U1STA = 0x0000;;
IFS0bits.U1TXIF = 0; // Limpia la interrupcion de TX
IEC0bits.U1TXIE = 0; // Habilita la interrupcion de TX
IFS0bits.U1RXIF = 0; // Limpia la interrupcion de RX
IEC0bits.U1RXIE = 1; // Habilita la interrupcion de RX
IPC2bits.U1RXIP = 7; // Habilita la prioridad 2 de RX
U1MODEbits.WAKE = 1; // Habilita para despertar al puerto
U1MODEbits.UARTEN = 1; // Habilita el puerto
U1STAbits.UTXEN = 1; // Habilita la transmision
}
/************************
* Salida del UART2 *
************************/
void U2( unsigned char s ){
while( U2STAbits.UTXBF);
U2TXREG = s;
}
/************************
* Salida del UART1 *
************************/
void U1( unsigned char s ){
while( U1STAbits.UTXBF);
U1TXREG = s;
}
void __attribute__ ((interrupt, no_auto_psv)) _T1Interrupt(void){
BAND_RXTX = 1;
TMR1=0;_T1IE = 0;
_T1IF = 0;
}
void __attribute__((interrupt, no_auto_psv)) _U1RXInterrupt(void){
BandUx = 1;
TMR1 = 0;_T1IE = 1;
Dato1 = GPRS_RXBUFF;
GPRS_Buff[cont2++] = GPRS_RXBUFF;
GPRS_RXIF = 0;
}
while(1){
if( BAND_RXTX == 1 ){
for( j=0; j<cont2; j++){
U2( GPRS_Buff[j]);
}BAND_RXTX = 0;cont2=0;
}
if( BandUx == 2 ){
U1TxByte(Dato2);
Dato2 = 0; BandUx = 0;
}
}
eso supongo te pasa por que el timer desborda y lee lo que hay en el bufer.Listo Kallitos Gracias!! No lo he detalladado a fondo, pero según loq vi por encima, habria que seguir agregando casos para cada uno de los posibles comandos que me podria responder el modulo cierto?
Te coloco el codigo de recepcion que estoy usando con un modulo sim900. No es la manera más optima de hacer la busqueda de comandos pero funciona bien.Código: C
void __attribute__((__interrupt__,auto_psv)) _U2RXInterrupt(void) { bufer_RX_U2[cont_bufer_RX_U2++] = U2RXREG; _U2RXIF = 0; if(sms_presente == 1) ///YA DETECTO AVISO DE LLEGADA DE SMS>>PROCEDO A LEER EL NUMERO DE CASILLA DEL SMS { if(bufer_RX_U2[cont_bufer_RX_U2-1] != '\r') { sms_rec *= 10; sms_rec += bufer_RX_U2[cont_bufer_RX_U2-1]-48; }// else ///SE DETECTO CASILLA >> PROCEDO A LEER EL SMS { num_sms[cont_num_sms++] = sms_rec; sms_rec = 0; sms_sin_leer++; sms_presente = 2; ///INDICA LA PRESENCIA DE UN SMS NUEVO }// }// if((bufer_RX_U2[cont_bufer_RX_U2-6] == '\r')\ &&(bufer_RX_U2[cont_bufer_RX_U2-5] == '\n')\ &&(bufer_RX_U2[cont_bufer_RX_U2-4] == 'O')\ &&(bufer_RX_U2[cont_bufer_RX_U2-3] == 'K')\ &&(bufer_RX_U2[cont_bufer_RX_U2-2] == '\r')\ &&(bufer_RX_U2[cont_bufer_RX_U2-1] == '\n')) { rpta_gprs = estado_RX_U2 = GPRS_OK; }// else if((bufer_RX_U2[cont_bufer_RX_U2-9] == '\r')\ &&(bufer_RX_U2[cont_bufer_RX_U2-8] == '\n')\ &&(bufer_RX_U2[cont_bufer_RX_U2-7] == 'E')\ &&(bufer_RX_U2[cont_bufer_RX_U2-6] == 'R')\ &&(bufer_RX_U2[cont_bufer_RX_U2-5] == 'R')\ &&(bufer_RX_U2[cont_bufer_RX_U2-4] == 'O')\ &&(bufer_RX_U2[cont_bufer_RX_U2-3] == 'R')\ &&(bufer_RX_U2[cont_bufer_RX_U2-2] == '\r')\ &&(bufer_RX_U2[cont_bufer_RX_U2-1] == '\n')) { rpta_gprs = estado_RX_U2 = GPRS_ERROR; //cont_bufer_RX_U2 = 0; }// else if((bufer_RX_U2[cont_bufer_RX_U2-12] == '+')\ &&(bufer_RX_U2[cont_bufer_RX_U2-11] == 'C')\ &&(bufer_RX_U2[cont_bufer_RX_U2-10] == 'M')\ &&(bufer_RX_U2[cont_bufer_RX_U2-9] == 'T')\ &&(bufer_RX_U2[cont_bufer_RX_U2-8] == 'I')\ &&(bufer_RX_U2[cont_bufer_RX_U2-7] == ':')\ &&(bufer_RX_U2[cont_bufer_RX_U2-6] == ' ')\ &&(bufer_RX_U2[cont_bufer_RX_U2-5] == '"')\ &&(bufer_RX_U2[cont_bufer_RX_U2-4] == 'S')\ &&(bufer_RX_U2[cont_bufer_RX_U2-3] == 'M')\ &&(bufer_RX_U2[cont_bufer_RX_U2-2] == '"')\ &&(bufer_RX_U2[cont_bufer_RX_U2-1] == ',')) { sms_presente = 1; }// }//
espero te sirva.