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

Dlaczego licznik 89C2051 startuje po puszczeniu przycisku S1 (P3.2)?

edekk 11 Sty 2007 22:35 1302 4
REKLAMA
  • #1 3435487
    edekk
    Poziom 26  
    Posty: 688
    Pomógł: 93
    Ocena: 115
    Napisałem taki program , który steruje pracą licznika za pomocą dwóch przycisków podłączonych do portów z wykorzystaniem przerwania INT0 , 1 . Naciśnięcie przycisku S1 (P3.2) powoduje rozpoczęcie zliczania impulsów , a S2 (P3.3) zatrzymanie i wyświetlenie wyniku.Wszystko działa bezproblemowo , ale jest jedno ale..... . Naciśnięcie przycisku S1 powoduje przeskok do podprogramu przerwania INT0 , a start licznika rozpoczyna się w momencie puszczenia przycisku . Dlaczego licznik nie zlicza od momentu wciśnięcia przycisku i wysłania polecenia START TIMER0 , tylko dopiero po puszczeniu przycisku .Czy to jest normalne czy robie coś nie tak ? Oto listing:

    '89C2051'

    $crystal = 11059200
    Config Timer0 = Timer , Gate = External , Mode = 1
    $baud = 9600
    Print "Start"
    Dim A As Word
    Enable Interrupts
    Enable Int0
    Enable Int1
    On Int0 Licz
    On Int1 Stuj
    Counter0 = 0
    A = 0


    Do
    Set P3.7 'pętla glówna - zapalanie i gaszenie diody led
    Waitms 250
    Reset P3.7
    Waitms 250
    Loop

    End


    Licz:
    Disable Int0
    Counter0 = 0
    Start Timer0
    Print "Start = " ; A
    Enable Int1
    Return



    Stuj:
    Disable Int1
    Stop Timer0
    A = Counter0
    Print "Stop = " ; A
    A = 0
    Enable Int0
    Return
  • REKLAMA
  • REKLAMA
  • #3 3437531
    edekk
    Poziom 26  
    Posty: 688
    Pomógł: 93
    Ocena: 115
    Po dodaniu wywala błąd Error CONFIG Błąd 149 . Ta procedura jest chyba stosowana w AVR
  • REKLAMA
  • #4 3438723
    Andy74
    Poziom 25  
    Posty: 525
    Pomógł: 103
    Ocena: 24
    Ups... :oops: Przepraszam za wprowadzenie w błąd, nie zauważyłem tego:
    Cytat:
    '89C2051'

    Nie pamiętam czy w Bascom'ie '51 jest jakieś konkretne polecenie do ustawiania sposobu obsługi przerwań (daawno go nie używałem), ale to powinno zadziałać:
    Set Tcon.0
    Set Tcon.2 

    Po dodaniu tego gdzieś na początku programu przerwania zewnętrzne będą wyzwalane zboczem opadającym. Sprawdź, czy to pomoże, ale widzę, że wyłączasz dane przerwanie zaraz po wejściu w jego obsługę, a włączasz dopiero po wciśnięciu drugiego przycisku, więc to chyba powinno działać tak jak chcesz, nawet przy wyzwalaniu poziomem... :roll:
    Jak masz podłączone te przyciski (jakiś kawałek schematu może?).
    Powodzenia
    Andy
  • #5 3439904
    edekk
    Poziom 26  
    Posty: 688
    Pomógł: 93
    Ocena: 115
    Problem rozwiązany!!:D
    Wystarczyło zmienić parametr gate z external na internal (sterowanie pracą programową) W trybie external licznik startował programowo jednak przytrzymanie lini INT0 do masy powodowało sprzętowe zatrzymanie licznika.Dlaczego licznik 89C2051 startuje po puszczeniu przycisku S1 (P3.2)?[/img][/url]
REKLAMA