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

Deklaracja PIN 3 portu B jako wyjście w C dla ATmega8

osa06 21 Lis 2012 13:33 990 6
  • #1 11555799
    osa06
    Poziom 10  
    Witam
    Wiem, że to postawy, ale mam problem. otóż:
    Jak można w języku C zdeklarować, że PIN 3 portu B, będzie pracował jaka wyjście (dioda) pod jakąś zmienną, a potem w jakieś pętli wybierać czy to będzie logiczne 0 czy jedynka. O to mi chodzi by nie pisać np.

    PORTB |= _BV(PB1);

    jakby zaszła konieczność zamiany pinu diody to w długim programie wszystko trzeba zmieniać...
    a chodzi mi o to by stan portu PB1 zapisać pod jakąś zmienną.

    dioda=1;

    Z góry dziękuję za pomoc
  • Pomocny post
    #2 11555817
    excray
    Poziom 41  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #3 11555828
    szelus
    Poziom 34  
    Można np. zadeklarować funkcje inline włączające i wyłączające diodę w jakimś headerze i potem je wywoływać.

    Tak jak proponujesz, to się generalnie nie da zrobić, chyba, że np. masz w okresowym przerwaniu zegarowym kod, który będzie takie zmienne przepisywał na wymagane porty.

    (oczywiście, powyższe dotyczy tego, co napisał autor, nie excray)
  • Pomocny post
    #4 11555863
    excray
    Poziom 41  
    Można ewentualnie napisać taką funkcję i ją wywoływać z parametrem.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 11555905
    osa06
    Poziom 10  
    Może coś źle rozumie, bo wywala mi błąd. Chodzi mi by uzyskać coś takiego:

    W ADuC841 to wyglądało tak:

    #include <ADuC841.h> // Rejestry mikrokontrolera ADuC841

    #include <stdio.h> // I/O
    sbit led=P0^0; // Dioda L1
    sbit kl=P0^4; // Klawisz K1

    void main(void)
    while(1)

    {
    if(kl){led=1};
    }
    I pytanie jeszcze jedno czy muszę używać rozkazu PIN, by sprawdzić stan na wejściu, czy np nie mogę napisać np. if(klawisz)==1, gdzie klawisz podobnie jak led też będzie pod zmienną globalną.
  • Pomocny post
    #6 11555935
    szelus
    Poziom 34  
    Kod umieszczaj w znacznikach "code".
    To co przedstawiłeś, to rozszerzenia kompilatora dla ADuC nie mające, niestety, wiele wspólnego z językiem C. Na atmedze się tak nie da.
  • #7 11555947
    osa06
    Poziom 10  
    Dziekuje za pomoc. Temat zamykam
REKLAMA