Programuję komunikację uC z PC. Do wysyłania i odbierania "wiadomości" używam Treminal v1.9b. Mam taki kod:
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <string.h>
#include <avr/interrupt.h>
#include <stdlib.h>
void print_char(char znak)
{
if( bit_is_set(UCSRA, UDRE) )
{
_delay_ms(10);
UDR=znak;
loop_until_bit_is_set(UCSRA, TXC);
}
}
volatile char co = 'x';
int main(void)
{
UBRRL = 51;//9600 8mhz
UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE);
UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
sei();
while(1)
{
print_char(co);
}
}
ISR(USART_RXC_vect)
{
co='y';
}
Po uruchomieniu uC w konsoli pojawiają się znaki 'x', po próbie wysłania czegokolwiek przestają wyskakiwać znaki 'x', jakby program się zawiesił lub przerwanie nie wróciło do programu. (po wysłaniu czegokolwiek do uC w konsoli powinny zacząć się pojawiać 'y'). Gdzie jest problem? Dodatkowo mam jeszcze jedno pytanie - jak przekazać zmienną do przerwania? (żeby zmienna 'co' była w funkcji main, a nie globalna)?