No to tak:
Jeżeli dobrze czytam program to masz 4 przyciski, timer ustawiony tak aby przerwanie od niego występowało co 50 Hz i nic poza tym.
Używasz tylko przerwania od Timera - boisz się innych? Czy może to tylko nieznajomość AVR.
Aż prosi się żeby przyciski działały pod INT0 / 1 - zewnętrzne przerwanie i po kłopocie.
Następnie _delay_ms(750); zamienił bym na 40 przerwań od timera jak już go używasz.
A najlepiej napisać troszkę inaczej program przyjmując inną taktykę.
Ale przechodząc do sedna, jak naprawić w prosty sposób Twój program?!
Masz taki fragment:
Zaloguj się, aby zobaczyć kod
Przenieś go zaraz za:
Zaloguj się, aby zobaczyć kod
Czyli tam gdzie rozpoczyna się funkcja wykonująca się co jedną sekundę.
Na początku pierwszego fragmentu masz:
Zaloguj się, aby zobaczyć kod
wywal
//_delay_ms(750);
a resztę wstaw na koniec pierwszego fragmentu czyli po zmianach powinno to wyglądać tak:
Zaloguj się, aby zobaczyć kod
Czyli patrz co zrobiliśmy
co sekundę masz programowe "przerwanie" na początku tego przerwania odczytujesz temperaturę i wyświetlasz ją na ekranie, następnie startujesz z następnym pomiarem lecz nie czekasz aż pomiar temperatury się skończy lecz lecisz dalej, wyświetlasz na ekranie czas itp.
Czas konwersji temperatury wynosi ok 750 ms , czyli będzie gotowy na koleje "sekundowe przerwanie".
Kumasz??
Pozdrawiam
0