Estoy interconectando GSM con atmega32 usando interrupciones uart. Estoy usando una interrupción externa que se dispara cuando un usuario pulsa un interruptor y uart recibir interrupción para recibir la respuesta de GSM.
CÓDIGO:
int main(void)
{
DDRC = 0xFF; //output led
PORTD = 0x04; //PD2 high for switch interrupt
serial_Init();
GICR = (1<<INT0);
sei();
while(1)
{
}
}
ISR (INT0_vect)
{
serial_Tx("ATD<number>;\r\n");
}
ISR(USART_RXC_vect)
{
}
Mi pregunta es que cada vez que pulso el interruptor, el ISR se dispara y el comando se ejecuta pero no recibo ninguna llamada. ¿Cual puede ser el error? Esto es porque cuando presiono el interruptor, en mi terminal obtengo una serie de comandos ATD en lugar de un solo comando. Y también estoy confundido por qué tengo una serie de ATD comando en lugar de un solo comando.
Mi siguiente pregunta es ¿cómo puedo recibir la respuesta de GSM. sólo podemos leer solo, byte que significa que tengo que usar para el bucle para almacenarlo en una matriz de caracteres.
Función Serial_Tx:
void serial_Tx(char *str)
{
for (unsigned int i=0;str[i]!=0;i++)
{
UDR=str[i];
while(!(UCSRA&(1<<UDRE)));
}
}
Función Serial_Rx:
char serial_Rx()
{
while(!(UCSRA & (1<<RXC)));
return UDR;
}
SALIDA: