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

Jak ustawić PORTB, DDRB, PINB, PB5 jako zmienne w kodzie C?

liske1 06 Wrz 2015 15:06 1197 6
  • #1 14975520
    liske1
    Poziom 12  
    Jak zapisać:
    PORTB, DDRB, PINB, PB5 jako zmienne ?
    Posiadam taki kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czytałem o tym, że te zmienne mają być wskaźnikami, więc próbowałem:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    ale ten sposób nie działa. (zgłasza błąd na każdym INPUTPIN).
  • #2 14975543
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie rozumiem. Pokazujesz poprawny kod i chcesz, żebyśmy na jego podstawie znaleźli błąd w innym kodzie, błędnym, którego nie pokazujesz?
  • #3 14975564
    liske1
    Poziom 12  
    Właśnie chodzi o to że nie działa wcale zmiana tych pinów. Jak dam np.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to kod działa prawidłowo, a teraz chcę zamienić te #define na zmienne.
  • Pomocny post
    #4 14975578
    BlueDraco
    Specjalista - Mikrokontrolery
    I wciąż nie wiemy, co konkretnie nie podoba się kompilatorowi w Twoim kodzie, którego nie pokazałeś, ani jakie komunikaty dostajesz.

    Na początek powinieneś mieć deklaracje:

    (poprawione, Kolega poniżej słusznie zauważył błąd)

    uint8 inputpin;
    volatile uint8_t *pin;
    volatile uint8_t *port;
    volatile uint8_t *ddr;
  • #5 14975603
    liske1
    Poziom 12  
    Właśnie o to chodzi, że kompilator nie wydaje, żadnych warningów , ani błędów do tego kodu.
    Natomiast mikrokontroler, nie wykonuje poprawnie całej akcji.

    Kod to biblioteka DHT11, która odczytuje temperaturę i wilgotność - biblioteka nie jest moja
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    I ona miała te INPUTPIN itp. itd. zrobioną na define. Ja chcę przerobić to na zmienne, dlatego dopisałem funkcję init_dht11 .
  • Pomocny post
    #6 14975630
    grko
    Poziom 33  
    Cytat:

    uint8 inputpin;
    uint8 *volatile pin;
    uint8 *volatile port;
    uint8 *volatile ddr;


    Wskaźniki maja być volatile ?? ;)
  • #7 14975882
    liske1
    Poziom 12  
    Problem udało mi się rozwiązać :)
    Zmienne zrobiłem tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    funkcje zrobiłem tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    a w bibliotece wszystkie DDR zamieniłem na (*DDR) , PORT na (*PORT) , a PIN na (*PIN) i działa wszystko prawidłowo :)

    Z góry dziękuję wszystkim za pomoc przy rozwiązaniu mojego problemu :) .
REKLAMA