Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

PIC16F877A - Pierwsze kroki w programowaniu językiem C

pawel_na_chwile 15 Wrz 2013 12:01 2403 8
  • #1 15 Wrz 2013 12:01
    pawel_na_chwile
    Poziom 11  

    Witam, jako że należę do starszej grupy elektroników i całe życie programowałem mikrokontrolery w Asemblerze, postanowiłem nauczyć się programować w języku C. Wybrałem mikrokontroler PIC jak w temacie gdyż dobrze go znam i wiele programów w asemblerze napisałem pod ten mikrokontroler. To są moje pierwsze kroki w C więc zaczynam od najprostszych rzeczy, korzystam z kompilatora HI-TECH V9.7 kod tworzę w Mplab 8.5 i mam problem z zrozumieniem, nie wiem jak to nazwać rozkazu __delay_ms i __delay_us, zgodnie z manualem kompilatora są to sposoby gotowych dyrektyw wywołujących opóźnienia, niestety jakkolwiek bym je wpisał czy dużymi, czy małymi literami ciągle mam ten sam błąd "748. undefined symbol "__delay" jak wykasuję te komendy to program kompiluje się bez problemu, załączam napisany kod, może ktoś podrzuci o co tu chodzi.

    #include <htc.h>
    #define _XTAL_FREQ 4000000
    __CONFIG(XT & WDTDIS & PWRTDIS & BORDIS & LVPEN & WRTEN &
    DEBUGEN & DUNPROT & UNPROTECT);

    void init(void)
    {
    // port directions: 1=input, 0=output
    TRISB = 0b00000000;
    }
    void main(void)
    {
    while (1)
    {
    PORTB = 0x01;
    __delay_ms(500);
    PORTB = 0x00;
    __delay_ms(500);
    }
    }

    0 8
  • #2 15 Wrz 2013 13:49
    lemos
    Poziom 17  

    Witam,
    widocznie brakuje ci tych define:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam
    R.L.

    0
  • #3 15 Wrz 2013 15:18
    pawel_na_chwile
    Poziom 11  

    Kolego dziękuje za odpowiedź, ale nadal nic ciągle ten sam błąd, tak jak pisałem dopiero zaczynam raczkować w C i może moje pytanie zabrzmi dziwnie, ale zastanawiam się gdzie te definicje wrzucić, na razie wrzuciłem je do kodu źródłowego na początku programu i nic to nie dało, a może trzeba je dopisać w którymś z plików kompilatora, co znajdują się w katalogu "include", dodam że bez żadnych definicji sama instrukcja _delay(n) działa prawidłowo, tak jak opisano w manualu, tylko te nieszczęsne __delay_ms(x) i __delay_us(x) się buntują.

    0
  • #4 15 Wrz 2013 16:35
    archanoid
    Poziom 25  

    Witam. Masz złe nazwy w linii __CONFIG . Prawidłowo kod powinien wyglądać tak .

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Właściwe nazwy znajdziesz w pliku nagłówkowym danego procesora . W twoim przypadku pic16f877a.h .

    0
  • #5 15 Wrz 2013 17:51
    lemos
    Poziom 17  

    Witam,
    skoro kolega zaczyna to może polecę: MPLABX do tego XC8 i wszytko będzie działać. Polecam przesiadkę tam na pewno będzie wszystko ok, a w dodatku free.

    Pozdrawiam
    R.L.

    0
  • #6 15 Wrz 2013 18:44
    Marek_Skalski
    Moderator Projektowanie

    IDE jest za darmo, ale brak jakichkolwiek możliwości optymalizacji kodu i brak niektórych narzędzi (slidery, tabele i wykresy real-time) które były w starej wersji Mplab spowodował, że wolałem się przesiąść z dsPIC33EP na Cortexy-M4 od ST.
    Inna sprawa, jeżeli chcesz się nauczyć innego języka (np. C), to weź też inny uC. Nie mówię o ARMach, tylko o czymś, czego jeszcze nie programowałeś, ale będzie warte nauki języka. Zwykłe przyzwyczajenie do starego uC będzie Ci skutecznie utrudniało naukę, ponieważ schematy wykształcone wcześniej będą często brały górę nad nauką. Efekt będzie taki, że będziesz pisał w C, ale w sposób atomowy i będziesz na każdym kroku próbował optymalizować kod dla kompilatora/CPU, zamiast skupić się na realizacji funkcji. Czasami na Forum można spotkać przykłady tak pisanych programów.

    0
  • #7 15 Wrz 2013 18:56
    BlueDraco
    Specjalista - Mikrokontrolery

    Dodajmy, że PIC16 to architektura wybitnie nieprzyjazna językom wysokiego poziomu, w tym C - kompilator się zamęczy, a wygenerowany kod będzie długi i wolny.

    0
  • #8 15 Wrz 2013 19:47
    pawel_na_chwile
    Poziom 11  

    Dziękuję koledzy za odzew, może macie i rację, że lepiej usiąść i poćwiczyć na innym mikrokontrolerze. Kolego "archanoid" co do konfiguracji musiałem wpisać tak jak jest w moim kodzie, pierwsze próby wpisałem tak jak ty i kompilator posypał same błędy, dopiero jak zajrzałem do manuala od kompilatora to było podane żeby wpisywać tak jak w moim kodzie, co do instrukcji delay doszedłem że jeżeli podana wartość odmierzanego czasu nie przekracza 190 instrukcja działa, ale jak tylko wpisze 191 lub więcej, od razu kompilator sypie błędy, nie wiem dlaczego, ale zawsze jakiś postęp.

    0
  • #9 16 Wrz 2013 11:23
    94075
    Użytkownik usunął konto