peres napisał: Doprowadziłem program do takiej postaci:
............
Wydaje mi się, że to wina tego, że jak przyjdzie przerwanie w czasie obsługi wyświetlacza to się coś kiełbasi.
Przerwanie od przepełnienia stosuje po to, by móc mierzyć też dłuższe odcinki czasu, np w przekaźnikach czasowych.
Jeszcze jedno pytanie. Dlaczego program z pierwszego postu nie działa? Gdy "symuluje" styki przekaźnika ręcznie, tzn zwieram do masy PD1 to wszystko działa, wyświetla się czas. Czy to może być spowodowane drganiem styków?
No więc, tak jak napisał Sylwek troche porządku/systematyki by się przydało, ale nie to jest najgorsze w tym programie.
Po pierwsze, nie możesz używać zarezerwowanych słów: - nazwa subrutyny od interruptu1 stoi u ciebie "START" - nazwij to jak chcesz ale z poza listy "Reserved Words".
Obliczanie czasu załączenia przekaźnika nie jest ani poprawnie 'wychwycone', ani też poprawnie obliczane.
Stosowanie interruptów jest często wygodne, ale jego skutek nie zawsze spełnia oczekiwania.
Popatrz u ciebie: -załączasz przekaźnik w subrutynie od INT1; po wyjściu z interruptu juz na starcie masz zgubione/ naliczone ok 200 cykli z czego Timer0 zarejstruje ok 80. Jeżeli zastosujesz w tej samej formie "wychwycenie" momentu załączenia styków przekaźnika, musisz liczyć sie z podobnym procesem, co w efekcie daje zbyt duży błąd aby go pominąć (kosztowna w tym przykładzie obsługa stosu).
Ponadto samo już obliczanie czasu masz także będne: bierzesz do obliczania czasu tylko liczbę przepełnień Timer0 (jakoś nie zauważyłem aktualnej zawartości timera0 dołączonej do czasu 'Total') .
Odnośnie wyświetlanego wyniku: Być może coś tam się wyswietla, ale masz to ujęte w krótkiej, szybko przwijającej się pętli, za kazdym razem masz Cls i wyświetlenie rezultatu, więc może nie zdażysz odczytać gdy nastąpi kolejny cls, albo wyświetlacz zwyczajnie nie zdąży tego wyświetlić przed kolejnym
Cls.
Cytat:
Dlaczego wyeliminować zmienne Single? Na co to będzie miało wpływ?
To ty decydujesz w jakiej formie i jednostkach będzie końcowy wynik; czy będa to pełne (całkowite) sekundy czy też wynik ma być z jakąśtam dokładnościa miejsc dziesietnych.
I jeszcze jedno na koniec: - configurujesz w programie INT0 i INT1 z akcją 'falling' a ich piny nie są podciągane do Vcc - jak więc maja one reagować.
Gdzie jest to zbocze opadające?
e marcus