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

[C] Definiowanie funkcji portów - jak uprościć?

rsikon 22 Mar 2009 10:27 1551 7
REKLAMA
  • #1 6315056
    rsikon
    Poziom 26  
    Witam,

    w swoich programikach używam między innymi takiego oto sposobu "definiowania" swoich wejsc / wyjsc i ich funkcji:

    ...
    #define blokada_off bit_is_set(PINA,7)
    ...
    ...
    DDRA&=~_BV(7); // wejscie - blokada
    PORTA|=_BV(7);
    ...

    Podpowiedzcie mi w jaki sposob moge uproscic sobie pozniejsza zmiane funkcji danego portu?

    Teraz chcąc zmienić port A7 na inny nb B2 to muszę zmianiać to w dwóch miejscach programu.
    Jak mogę to uprościć do zmiany tylko w jednym miejscu? Może i niby to z lenistwa wynika, ale nie tylko... :)

    Radzio
  • REKLAMA
  • #2 6315095
    Freddie Chopin
    Specjalista - Mikrokontrolery
    
    #define BLOKADA_PORT PORTA
    #define BLOKADA_PIN PINA
    #define BLOKADA_DDR DDRA
    #define BLOKADA_bit 7
    #define BLOKADA (1<<BLOKADA_bit)
    
    ...
    
    BLOKADA_PORT|=BLOKADA;
    
    ...
    
    if(BLOKADA_PIN&BLOKADA) { ... }
    
    ...
    
    


    4\/3!!
  • REKLAMA
  • REKLAMA
  • #5 6315498
    rsikon
    Poziom 26  
    Cytat:
    #define BLOKADA_PORT PORTA
    #define BLOKADA_PIN PINA
    #define BLOKADA_DDR DDRA
    #define BLOKADA_PIN 7
    #define BLOKADA (1<<BLOKADA_PIN)

    ...

    BLOKADA_PORT|=BLOKADA;

    ...

    if(BLOKADA_PIN&BLOKADA) { ... }


    Analizuje to.... i coś mi tu nie pasuje.

    Pierwsze 4 linijki jasne.
    Kolejna linia: dobrze rozumiem,że wpisana tam jedynka daje nam w konsekwencji, że PinA.7 będzie wejściem? A gdyby tam było 0 to tak zdefiniowany pin był by wyjśiem?

    Czy też definiuje się tu stan aktywny - H? a dla zera - L ?



    A co z podciągnięciem wejścia? BLOKADA_DDR nigdzie nie wykorzystana.

    Hmmm ostatnia linijka ciut niejasna :/

    Radzio
  • #6 6315621
    rrata
    Poziom 19  
    Tutaj możesz poczytać o operatorach bitowych.
  • REKLAMA
  • #7 6315704
    KowalD
    Poziom 17  
    Freddie Chopin pewnie z rozbiegu podwojnie tam napisal define'a BLOKADA_PIN, raz jako port PINA i to wlasnie powinno sie znalezc w linijce ostatniej, a drugi raz jako 7 i to w piatej linijce powinno byc... a linijka 5 to nic nie zmienia w ustawieniach portow... tam masz po prostu zdefiniowana liczbe, ktora w zapisie bitowym bedzie mial 1 na miejscu nr BLOKADA_PIN (czyli 7), a reszta cyfr to beda 0...

    http://www.tkdami.net/~voytek/programy/pomocnik/pomoc.html tu masz tez maly taki "slownik"... jakies literowki sa, ale idzie skumac o co chodzi...
REKLAMA