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.

Mega32 Atmel Studio - Nie kompiluje programu po użyciu #define

Marcin J. 17 Lip 2013 12:53 1173 5
  • #1 17 Lip 2013 12:53
    Marcin J.
    Poziom 9  

    Witam,

    jestem początkującym w dziedzinie AVR oraz programowania w C.

    Chciałbym napisać prosty program obsługujący wyświetlacz LCD 2x16, z jego obsługą nie mam problemu.

    Moje problemy zaczęły kiedy chciałem użyć:

    #define LCD_PORT PORTA;

    kiedy kompilator trafia na LCD_PORT wywala błąd.

    Jeżeli w programie zamienię wszystkie LCD_PORT na PORTA kompiluje bez problemu.

    To samo z zapisem

    #define LCD_DDR DDRA;

    Code:
    /*biblioteki*/
    
     #include <avr/io.h>
     #include <util/delay.h>
     
     
     /*defnicje*/
     #define LCD_PORT   PORTA;
     #define LCD_DDR   DDRA;

     #define LCD_e      PA3;
     #define LCD_rs      PA2;
     #define LCD_rw      PA1;
     #define LCD_d7      PA7;
     #define LCD_d6      PA6;
     #define LCD_d5      PA5;
     #define LCD_d4      PA4
     
     
     /*rozkazy , ustawienia LCD*/
     #define LCD_fun1   0b00110000;      /*int LCD*/
     #define LCD_fun2   0b00100000;      /*interfejs 4 bitowy*/
     #define LCD_fun3   0b00101000;      /*2 linie, 5x7 punktów*/
     #define LCD_fun4   0b00001110;      /*wlacza LCD , kursor , mruganie*/
     #define LCD_fun5   0b00000110;      /*przesuwanie napisu*/
     #define LCD_fun6   0b00000001;      /*czysci ekran*/

     void LCD_trig(void);
     void LCD_init(void);
     void LCD_clrscr(void);
     void LCD_char(uint8_t x);
     void LCD_comm(uint8_t x);
     void LCD_goto(uint8_t x, uint8_t y);
     
    int main(void)
    {
       LCD_DDR = 0b11111111;            /*port dla LCD jako wyjscie*/
       LCD_PORT = 0b00000000;            /*port dla LCD wartosc 00*/
       _delay_ms(50);
       
        while(1)
        {
            _delay_ms(100);
        }
    }

    void LCD_trig()
    {
       LCD_PORT |= (1<<LCD_e);
       asm volatile ("nop");
       asm volatile ("nop");
       asm volatile ("nop");
       LCD_PORT &= ~(1<<LCD_e);
    };


    Używam Atmel Studio 6. Dołączam zrzut z kompilatora.

    Mega32 Atmel Studio - Nie kompiluje programu po użyciu #define

    0 5
  • Pomocny post
    #2 17 Lip 2013 12:57
    BlueDraco
    Specjalista - Mikrokontrolery

    Dodatkowy średnik w rożnych dziwnych miejscach nie musi być zgodny ze składnią języka. Twoje #define definują nie symbole, a instrukcje zakończone średnikiem. Zapewne nie o to Ci chodziło.

    0
  • #3 17 Lip 2013 13:46
    otapi
    Poziom 25  

    #define definiuje stałe lub makra, nie możesz nic przypisywać w programie do stałej, bo jest to stała, a Ty to robisz.

    0
  • #4 17 Lip 2013 13:49
    BlueDraco
    Specjalista - Mikrokontrolery

    Otapi: to, co piszesz, nie jest prawdą - popraw lub skasuj swój post.

    0
  • Pomocny post
    #5 17 Lip 2013 14:35
    PJS
    Poziom 15  

    Jak pisze BlueDraco. Po prostu wywal średnik z tego define'a i powinno być ok. Z pozostałych prawdopodobnie też.

    0
  • #6 17 Lip 2013 17:07
    Marcin J.
    Poziom 9  

    Witam,

    koledzy BlueDraco, PJS, dziękuję za pomoc, zadziałało.

    A ja straciłem tyle czasu na taką błahostkę. Pozdrawiam

    0