Estoy conectando GSM con atmega32 usando uart interrupts. Estoy usando una interrupción externa que se activa cuando un usuario presiona un interruptor y recibe una 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 presiono el interruptor, se dispara el ISR y se ejecuta el comando pero no recibí ninguna llamada. ¿Cuál podría ser el error? ES esto porque cuando presiono el interruptor, en mi terminal recibo una serie de comandos ATD en lugar de un solo comando. Y también estoy confundido de por qué recibo una serie de comandos ATD en lugar de comandos individuales.
Mi siguiente pregunta es cómo puedo recibir una respuesta de GSM. Solo podemos leer un byte, que significa que necesito usar para que loop lo almacene 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: