Męczę się nad tym od jakiegoś czasu i nie mogę sobie z tym poradzić. Próbuję połączyć ze sobą te dwa kontrolery.
Zacząłem od skonfigurowania Atmegi16 do odbioru i połączenia jej z HyperTerminal. Najgorsze jest to że jakiś rok temu zrobiłem to bez problemu a dziś za żadne skarby mi nie wychodzi.
Programik raczej prosty:
Otóż program ma mi wyświetlać na porcie B kod liczby wciśniętej na klawiaturze. Jak z tym sobie poradzi to i dane z innego proca też przyjmie. Częstotliwość CPU=8MHz.
Problem w tym że zamiast innego kodu dla każdego klawisza wyświetla bez przerwy 0xff.
To co wiem na pewno to to że program skacze w przerwanie za każdym razem ponieważ dla PORTB=i; inkrementuje wyświetlaną liczbę za każdym razem jak przycisnę klawisz.
Nie mogę wyciągnąć z przerwania wartości przesyłanej danej.
Zacząłem od skonfigurowania Atmegi16 do odbioru i połączenia jej z HyperTerminal. Najgorsze jest to że jakiś rok temu zrobiłem to bez problemu a dziś za żadne skarby mi nie wychodzi.
Programik raczej prosty:
#include<avr/io.h>
#include<avr/interrupt.h>
volatile char key;
volatile char i;
volatile char w=0;
////////////////////////////////////////////////////////////////////////////////////////////////
ISR(USART_RXC_vect) //------------przerwanie dla otrzymania danej odbiorczej (USART)-----------------
{
i++;
key=UDR; //przypisuje zmiennej 'key' wartosc wcisnietego przycisku
w=key;
}
////////////////////////////////////////////////////////////////////////////////////////////////
int main(void)
{
DDRA=0;
PORTA=0xff;
UBRRL=0x33;
UBRRH=0; //ustawienie prędkości transmisji dla 9600 bps
UCSRB=0x90; //włączenie obsługi przerwań dla odbioru//włączenie odbioru
UCSRC=0x86; //tryb pracy asynchronicznej//wyłączenie bitu parzystosci//1 bit stopu/8 bitów danych
SREG|=1<<SREG_I; //ustawienie flagi I w ESREG
while (1)
{
PORTB=w;
}
}
Otóż program ma mi wyświetlać na porcie B kod liczby wciśniętej na klawiaturze. Jak z tym sobie poradzi to i dane z innego proca też przyjmie. Częstotliwość CPU=8MHz.
Problem w tym że zamiast innego kodu dla każdego klawisza wyświetla bez przerwy 0xff.
To co wiem na pewno to to że program skacze w przerwanie za każdym razem ponieważ dla PORTB=i; inkrementuje wyświetlaną liczbę za każdym razem jak przycisnę klawisz.
Nie mogę wyciągnąć z przerwania wartości przesyłanej danej.