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

[C] procedura obsługi przerwania - podstawy podstaw.

prokopcio 08 Sie 2008 10:02 1855 4
  • #1 5419717
    prokopcio
    Poziom 29  
    Witam.
    Nie znam C wcale bo programuję w assemblerze ale muszę do istniejącego programu w C (nie mojego) wstawić program obsługi przerwania UART_TX_COMPLETE w którym będzie tylko jedna linia ustawiająca 0 na pinie PB2 PORTU B.
    projekt w AVR GCC procesor atmega8

    i teraz proszę o pomoc:
    1. jak i w którym miejscu włączyć obsługę tego przerwania
    2. jak i w którym miejscu ustalić wektor do mojej procedury obsługi przerwania
    3. jak powinna wyglądać procedura obsługi takiego przerwania wystawiająca na pin "0".

    pin jest już skonfigurowany (w DDRB) jako wyjściowy

    czyli bardzo proste ale jak się ma chociaż podstawy C.
  • Pomocny post
    #2 5419995
    Krzysiek_k1984
    Poziom 13  
    Nie wiem jaki to uP ale np. dla ATmega16 wygląda to tak:

    Włączasz przerwanie:
    
    UCSRB|=(1<<TXCIE);
    sei(); //dostępne globalne przerwania
    


    A tu jest podprogram obsługi przerwania:
    
    ISR(USART_TXC_vect)
    {
    cbi(PORTB, PB2); //0 na pinie PB2
    }
    


    aha i jeszcze musisz włączyć bibliotekę: #include <avr/interrupt.h>

    Mam nadzieje że nigdzie się nie pomyliłem ;)

    Dodano po 2 [minuty]:

    Sorki dopiero teraz zauważyłem jaki to uP.

    Dodano po 5 [minuty]:

    Rejestry są te same więc powinno działać :)
  • #3 5420164
    prokopcio
    Poziom 29  
    no to jeszcze napisz w które miejsca to powstawiać i będzie fajnie (włączenie przerwania dałem na początku "int main(void)" ) ale nie wiem gdzie dać resztę

    Dodano po 1 [minuty]:

    kompilator gcc nie rozpoznaje rozkazu 'cbi'
  • Pomocny post
    #4 5420366
    markosik20
    Poziom 33  
    prokopcio napisał:
    no to jeszcze napisz w które miejsca to powstawiać i będzie fajnie (włączenie przerwania dałem na początku "int main(void)" ) ale nie wiem gdzie dać resztę


    Wstaw byle gdzie przed int main(void)

    Co do ustawienie pinu to:
    
    PORTB |= _BV(PB2); //ustawia
    PORTB &= ~_BV(PB2);//zeruje
  • #5 5421680
    Krzysiek_k1984
    Poziom 13  
    Zapomniałem napisać że makro cbi znajduje się w bibliotece #include<compat/deprecated.h>. Odblokowanie przerwania daj pod main() a podprogram obsługi przerwania nad main() ;)
REKLAMA