logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przepisanie programu z Atmega8 na Atmega328P z wykorzystaniem USART

pawel26021995 23 Wrz 2015 12:50 903 2
  • #1 15014989
    pawel26021995
    Poziom 12  
    Witam, próbuję przepisać program z Atmega8 na Atmega328P, z powodu małej pamięci Atmegi8, w programie wykorzystuje komunikacje USART.
    Program dla atmegi8:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Program dla atmegi328:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W przypadku atmegi8 wszystko dobrze działa, jednak w 328 już nie, funkcja ISR(USART_RX_vect) nie zwraca danych, dlaczego tak jest? Jak to powinno być, żeby działało?
    Z góry dziękuje za pomoc i proszę się powstrzymać od głupich komentarzy.
  • Pomocny post
    #2 15015230
    szczywronek
    Poziom 28  
    Co do programu na megę328:

    1. Niepotrzebnie dołączasz sfr_defs.h
    2. O F_CPU w kodzie było już miliony razy na forum.
    3. Dla ułatwienia obliczeń prędkości polecam util/setbaud.h
    4. W rejestrze UCSR0C ustawiasz bity, które po resecie są ustawione.
    5. W UCSR0B nie włączasz przerwania od odbioru (bit RXCIE)! Dodatkowo niepotrzebnie stosujesz sumę bitową zamiast przypisania.
    6. W procedurze obsługi przerwania niepotrzebnie czekasz na flagę RXC - ta flaga wywołuje przerwanie więc na pewno będzie ustawiona. Jeśli chcesz czekać na flagę w pętli, to przerwania w ogóle nie są potrzebne.
    7. Procedurki przerwań z natury nic nie zwracają - bo i gdzie miałby lądować zwracany wynik? Kompilator na pewno krzyczy o ten return w ISR ;)
REKLAMA