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.

Przerwania w 90S8515

08 Feb 2003 14:29 2339 6
  • Level 11  
    Napisalem program sterujacy wzmacniaczem,ale do pelni szczescia brakuje mi funkcji mute - ktora obslugiwana by byla z przerwania.
    CZy ktos moglby mi napisac procedury obslugujace przerwania,bo nie mam tego wykladu z EDW a probowalem roznych komed,ale bez skutku...
    pozdrawiam
    [22.06.2021, g.9.00] Zabezpieczenia Internetu Rzeczy (IoT) programowe i sprzętowe. Zarejestruj się za darmo
  • Level 29  
    Z jakiego przerwania chciałbyś skorzystać ? Co miałaby robić procedura obsługi tego przerwania ? Dla przykładu obsługa przerwania Int0:

    $regfile = "8515def.dat"

    Config Int0=Falling 'przerwanie Int0 wyzwalane opadającym zboczem

    Enable Interrupts 'włącz ogólne zezwolenie na przerwania
    Enable Int0 'włącz zezwolenie przyjęcia przerwania z Int0
    On Int0 obsluga_int0 'po przyjęciu przerwania z Int0 skocz do obsluga_int0
    Do
    ... 'pętla główna programu
    Loop
    End

    obsluga_int0:
    ... 'kod wykonywany po przyjęciu przerwania
    Return
  • Level 21  
    WITAM

    Mam podobny problem, ale chodziło by mi o obsługę przerwania w asemblerze. Czy ktoś może mi naświetlic temat. Przyznam, że zaczynam dopiero i przerwań omijam jak wody święconej.

    :sm19:
  • Level 12  
    SIEKIER'A wrote:
    WITAM

    Mam podobny problem, ale chodziło by mi o obsługę przerwania w asemblerze. Czy ktoś może mi naświetlic temat. Przyznam, że zaczynam dopiero i przerwań omijam jak wody święconej.

    :sm19:


    Jakiego asemblera używasz? IAR czy AVR? A może jakiś inny?
  • Level 21  
    Jak już wspomniałem zaczynam z mikrokontrolerami , a dokładniej z AVR'ami (z 8051 miałem juz styczność). Jednak nigdy nie korzystałem z przerwań. A co do asemblera to raczej AVR.

    :sm19:
  • Level 12  
    Więc - na przykłądzie przerwania zewnętrznego:

    1. Musisz zdefiniować w wektorze przerwań skok do obsługi tego przerwania którego chcesz używać - np. przerwanie zewnętrzne INT0

    .cseg
    .org $0000
    rjmp start ;Reset handler
    .org INT0addr
    rjmp ext_int0 ;External interrupt handler

    2. pod etykietą ext_int0 musisz napisać podprogram obsługi tego przerwania nie zapominając o tym by na czas wykonywania przerwania zachować wartość rejestru SREG. Przerwanie opuszcza się rozkazem reti

    ext_int0:
    in r0,SREG ;Store Status Register

    tu wpisz kod który ma być wykonany podczas obsługi
    przerwania

    out SREG,u_sr ;Restore SREG
    reti

    3. aby przerwanie w ogóle zadziałało należy je uaktywnić i ustalić jaki rodzaj sygnału ma je wyzwolić (dotyczy przerwań zewnętrznych) - robi się to po etykiecie start (albo reset - zależy jak się to nazwie) a przed pętlą główną.

    ldi r16,(1<<INT0)
    out GIMSK,r16 ;Enable external interrupt 0
    ldi r16,(1<<ISC01)+(0<<ISC00)
    out MCUCR,r16 ;On falling edges
    sei ;Enable global interrupt

    kombinacja bitów ISC01 i ISC00 ustalają czy przerwanie ma być wywołane zboczem narastający, opadającym czy niskim poziomem.

    Pin 2. portu D (INT0) powinien być ustaiony jako wejściowy z podciąganiem.

    Nazwy etykiet są dowolne (bez polskich znaków).

    Jeśli coś nie rozumiesz pytaj śmiało.

    ...i jeszcze jedno - zaglądnij na stronę Atmel'a - tam znajdziesz kilka przykładowych programików.
  • Level 11  
    Dzieki Jaca to mi dziala,ale zastanawiam sie jak za pomoca jednego przerwania wykonac dwie czynnosci,tzn po wlaczeniu zasilania ukazuje sie menu wzmacniacza,buszujemy sobie po nim za pomoca 3 przyciskow: select,up i down.Teraz jak tylko przycisniemy 4 przycisk(mute) wywolujemy przerwanie i nastepuje wyslanie na magistrale i2c "komendy" o wyciszenie wzmacniacza.No i teraz po ponownym nacisnieciu tego samego przycisku powinna zostac wyslana na i2c zupelnie inna "komenda" - tym razem o wylaczenie wyciszenia.
    Ja bede myslal na tym,ale jesli masz jakis pomysl to chetnie poslucham
    pozdrawiam
    Dodane:
    Wlasnie rozwiazalem ten problem,uzylem tu indexu g jako flagi,wszystko dziala:
    przerw1:

    Cls
    If G = 1 Then
    Gosub Przerw2
    Else
    G = 1
    Lcd "Mute on"
    X = &B00001000
    Y = &B11101111
    Gosub I2c
    Waitms 150
    End If
    Return

    Przerw2:
    Cls
    Lcd "Mute off"
    X = &B00001000
    Y = &B11001111
    Gosub I2c
    G = 0
    Waitms 150
    Return
pcbway logo