Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Obsługa przerwań w BASCOM AT89C52

Henry(k) 02 May 2012 18:44 2207 2
  • #1
    Henry(k)
    Level 30  
    Witam.

    Piszę sobie sterownik temperatury w Bascom '51 i mam problem z przerwaniem.
    Otóż serce układu to AT89C52 do niego jest podłączony RTC DS1678. Ustawiłem RTC, aby na wyjściu INT generował co sekundę impuls. Podaję ten impuls na wejście INT0 procesora.
    W obsłudze przerwań dałem ustawienie zmiennej Bit na 1, na podstawie jego inicjuję w pętli głównej odczyt czasu i wyświetlenie na LCD, oraz zliczam te impulsy aby po 10 sekundach wysłać komendę przetworzenia temperatury do DS18B20 a po kolejnych 5 odczyt temperatury i wyświetlenie.

    No i fajnie wszystko działa, ale jak zacząłem pisać menu, wymyśliłem sobie, że w przerwaniach będę dodawał sobie co sekundę 1 do zmiennej Integer. Jak osiągnie powiedzmy 60 (sekund) to nastąpi automatyczne wyjście z menu do pętli głównej.

    No więc... jest coś nie tak. Procedura obsługi przerwania:
    Code: basic4gl
    Log in, to see the code


    Xtim ustawia się na 1, ale Tmenu zlicza jakiś kosmos. Nie wiedziałem jak dużo to wpisałem:
    Code: basic4gl
    Log in, to see the code




    Miało migać LED'em na porcie P2.0. Po zmierzeniu miernikiem otrzymałem tam przebieg o częstotliwości 4,5kHz.

    Po usunięciu tego kodu migającego LED'em do pętli głównej i wpleceniu go w procedury odczytu czasu inicjowanych ustawieniem Xtim na 1, LED miga prawidłowo.

    Definicje jakie ustawiam oraz inicjacja zegara:
    Code: basic4gl
    Log in, to see the code


    Pętla główna mała na razie, robi tylko to co opisałem - odczyt zegara i temperatury i wyświetlenie na LCD.

    Jakieś wskazówki?
    Może coś nie tak jednak jest z sygnałem od RTC, ale miernik uniwersalny na zakresie częstotliwość pokazuje 0 na wejściu INT.

    Pozdrawiam.
  • #2
    Krauser
    Level 26  
    Po resecie TCON ma wartość 0x00 czyli sygnał niski generuje przerwanie, a w tym przypadku to powinno być zbocze opadające. Dodaj linię set TCON.0 przy konfiguracji przerwań.
  • #3
    Henry(k)
    Level 30  
    Stoi zegar. Nie działają przerwania zewnętrzne w tym przypadku.

    Code: basic4gl
    Log in, to see the code


    PS. co by oznaczało, że mam cały czas stan 0 na wejściu i się nie zmienia?
    W sumie "na miernik" to mam cały czas 0 z wyjścia RTC, więc może mi się wydaje że LED miga a zegar działa?
    Próbuję z konfiguracją tego DS1678 na różne sposoby ale wystawia mi on cały czas 0 na /INT. Aktualnie wpisuję jak poniżej i mam 0.
    Code: basic4gl
    Log in, to see the code


    Dodano po 1 [godziny] 14 [minuty]:

    Ok, temat zamykam bo to nie jest chyba problem programu, tylko zegarka