Cho hỏi code C này bị lỗi gì

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • silv3R
    Thành viên tích cực
    • Oct 2007
    • 195

    #1

    Cho hỏi code C này bị lỗi gì

    PHP Code:
    #include <avr/io.h>
    #include <stdio.h>
    #include <util/delay.h>
    #include <avr/pgmspace.h>
    #include <avr/interrupt.h>
    
    #include "lcd_lib.c"
    #include "lcd_lib.h"
    
    
    /*******************************************
    
    // doc gia tri tra ve tu counter, xuat ra LCD
    // xuat gia tri len PC
    
    //tinh ra toc do motor
    //xuat toc do le LCD
    
    *******************************************/
    
    uint16_t rad=0; //khai bao bien toan cuc
    uint16_t t = 0;
    
    //dat chuong trinh con phuc vu ngat o truoc
    ISR (TIMER1_OVF_vect)
    {
        TCNT1=54736; //gia tri TCNT1 nap lai
        t++;
    }
    
    
    //adjust LCDsendChar () function for stream
    static int LCDsendstream (char c, FILE *stream);
    
    //current channel
    //uint8_t ch;
    
    //set output stream to LCD
    static FILE lcd_str = FDEV_SETUP_STREAM (LCDsendstream, NULL, _FDEV_SETUP_WRITE);
    
    //string for LCD store in Flash memory
    const uint8_t motor2 [] PROGMEM="motor2: \0";
    const uint8_t motor1 [] PROGMEM="motor1: \0";
    const uint8_t CLRROW [] PROGMEM="                \0"; //clear row
    const uint8_t *LCDXY [] = {
            motor1,    //for Motor1
            motor2};    //for Motor2
    
    static int LCDsendstream (char c, FILE *stream)
    {
        LCDsendChar (c);
        return 0;
    }
    
    void init_counter0 ()
    {
        //set external clock source on T0 pin, clock on rising edge
        TCCR0=(0<<FOC0)|(1<<CS02)|(1<<CS01)|(1<<CS00);
        
    }
    
    void init_timer1 ()
    {
        //set timer1 prescaling to 1024
        //prescaling cang lon thi f cang nho
        //f cang nho thi t cang lon
        //thoi gian ma cang lon thi cang lau
    
        //moi lan TCNT1 tang len 1 don vi duoc 92.6us
        //mot lan clock duoc 185 us
        
        //test voi 92.6us
        //moi lan timer1 tran duoc 1s, chinh xac
    
        TCCR1B=(1<<CS12)|(0<<CS11)|(1<<CS10);
        TCNT1=54736;
        
        // enable interrupt
        TIMSK=(1<<TOIE1);
    }
    
    void init_avr ()
    {
        init_counter0();
        init_timer1();
    
        stdout = &lcd_str;    
    
        LCDinit ();
        LCDclr ();
        LCDGotoXY(0,0);
        //adc_init ();
    }
    int main ()
    {
        uint16_t speed=0;
        DDRB=0xfe;
        
        init_avr (); //inti LCD trong ham init_avr
        
        //LCDsendCommand(0);
        LCDstring("   Loading...",13);
        
        //enable global interrupt
        sei();
        while (1)
            {
                if (TIFR&(1<<TOV0))
                    {
                        //1 lan tran duoc 1/2 vong
                        rad++;
                        TIFR=(1<<TOV0);
                    }
                
                if (t==30)
                    {
                        speed=rad;
    
                        LCDsendCommand(0);
                        CopyStringtoLCD (CLRROW, 0, 0);
                        CopyStringtoLCD (LCDXY[(0)], 0, 0);
                
                        printf ("%d", speed);
    
                        t=rad=0;
                    }    
                 
            }
    } 
    
    Khi build báo lỗi delay.c: No such file or deriectory
    và lỗi cả file delay.h
    mình dùng AtmelStudio 6
    Trong khai báo có file lcd_lib.c và file lcd_lib.h mình có down 2 file đó về rồi thì phải bỏ vào thư mục nào để chương trình chạy được. Trong Atmelstudio không thấy file delay.h hay file delay.c có down file delay.h về rồi mà ko biết nhét vào đâu để chạy được.


    Cho hỏi cái project này có áp dụng vào hiển thị vòng tua máy của xe máy được không ?
  • tan0710
    Thành viên tích cực
    • Mar 2010
    • 471

    #2
    coppy tất cả vào cùng 1 folder
    mà AVR có thư viện lcd mà.gọi luôn nó ra dùng cho tiện thích chọn port nào cũng đc

    Comment

    • silv3R
      Thành viên tích cực
      • Oct 2007
      • 195

      #3
      Nguyên văn bởi tan0710 Xem bài viết
      coppy tất cả vào cùng 1 folder
      mà AVR có thư viện lcd mà.gọi luôn nó ra dùng cho tiện thích chọn port nào cũng đc
      cái lcd lib thì được rồi nhưng build vẫn báo delay.c như vậy là như thế nào bạn? 2 cái lcd lib mình phải down trên mạng về.

      Comment

      • tan0710
        Thành viên tích cực
        • Mar 2010
        • 471

        #4
        delay.c thì cậu đặt sai rồi. trong C khi làm thư viện tự tạo thì để đuôi là .h (header) chẳng hạn thế này nhá
        #include <mega16.h>
        #include <delay.h>
        #asm
        .equ __lcd_port=0x12 ;PORTD
        #endasm
        #include <lcd.h>
        trong codevisionAVR có định nghĩa sẵn hàm "delay.h" rồi nên không cần phải tạo thêm nữa khi cần gọi thì chỉ cần gọi VD: delay_ms(2000); là được
        cũng có thư viện LCD như mình khai báo trên là giao tiếp LCD 4 bit nối ở port D (có thể nối với các port khác tùy ý phụ thuộc vào địa chỉ khai báo port ".equ __lcd_port=0x12 ;PORTD" ) còn cài lib tự tạo cho LCD thì cậu có thể tự làm được. ngày trước mình có làm 1 cái lib nhưng quên khong biết để đâu cậu có thể tham khảo ở trang hocavr.com.

        Comment

        • tan0710
          Thành viên tích cực
          • Mar 2010
          • 471

          #5
          ah. thư viện tư tạo thì khai báo trong dấu " "

          Comment

          • silv3R
            Thành viên tích cực
            • Oct 2007
            • 195

            #6
            Nguyên văn bởi tan0710 Xem bài viết
            delay.c thì cậu đặt sai rồi. trong C khi làm thư viện tự tạo thì để đuôi là .h (header) chẳng hạn thế này nhá

            trong codevisionAVR có định nghĩa sẵn hàm "delay.h" rồi nên không cần phải tạo thêm nữa khi cần gọi thì chỉ cần gọi VD: delay_ms(2000); là được
            cũng có thư viện LCD như mình khai báo trên là giao tiếp LCD 4 bit nối ở port D (có thể nối với các port khác tùy ý phụ thuộc vào địa chỉ khai báo port ".equ __lcd_port=0x12 ;PORTD" ) còn cài lib tự tạo cho LCD thì cậu có thể tự làm được. ngày trước mình có làm 1 cái lib nhưng quên khong biết để đâu cậu có thể tham khảo ở trang hocavr.com.
            Mình dùng Avr Studio, lúc đầu nó báo cả lcd_lib.c và .h, down 2 file .h .c về bỏ vào thư mục thì còn báo mỗi file delay.c

            Comment

            • tan0710
              Thành viên tích cực
              • Mar 2010
              • 471

              #7
              cậu thử vào folder cài của phần mềm xem có thư viện <util/delay.h> không. nếu không thì cậu xóa thư viện khai báo đi rồi code lấy 1 đoạn khỏi mất công. thích thì làm 1 cái thư viện tự tạo giống như lcd_lib.h rồi coppy vào cùng 1 thư mục là OK (nhớ dấu " ")
              Last edited by tan0710; 08-06-2012, 18:58.

              Comment

              • silv3R
                Thành viên tích cực
                • Oct 2007
                • 195

                #8
                Nguyên văn bởi tan0710 Xem bài viết
                cậu thử vào folder cài của phần mềm xem có thư viện <util/delay.h> không. nếu không thì cậu xóa thư viện khai báo đi rồi code lấy 1 đoạn khỏi mất công. thích thì làm 1 cái thư viện tự tạo giống như lcd_lib.h rồi coppy vào cùng 1 thư mục là OK (nhớ dấu " ")
                Có bạn ơi có. Khai báo delay.h hay util/delay.h đều được 2 file này ở thục mục avr hay util đều có hết. Không hiểu sao bị vậy.
                Ngoài ra nó còn thông báo lỗi không tìm thấy F_CPU .
                Trong file delay.h mình thấy có define F_CPU mà ?

                Comment

                • tan0710
                  Thành viên tích cực
                  • Mar 2010
                  • 471

                  #9
                  vậy thì chịu..cậu thử chuyển sang codevisionAVR dùng đi. thư viện và tập lệnh hỗ trợ đầy đủ.ok

                  Comment

                  • nguyentuanqs
                    Thành viên mới
                    • Aug 2010
                    • 72

                    #10
                    cho em hỏi ngu tí : phần đầu mình #include được file *.c ạ? có tác dụng gì ạ?

                    Comment

                    • quangtung112
                      Thành viên tích cực
                      • Mar 2011
                      • 214

                      #11
                      Nguyên văn bởi nguyentuanqs Xem bài viết
                      cho em hỏi ngu tí : phần đầu mình #include được file *.c ạ? có tác dụng gì ạ?
                      Dùng để gọi các file *.c mà đã được viết từ trước, gọi vào để sử dụng luôn đỡ phải viết lại, các file *.c được include vào thường là các file chứa các hàm. Gluck!
                      WS:
                      Blog:

                      Comment

                      Về tác giả

                      Collapse

                      silv3R Tìm hiểu thêm về silv3R

                      Bài viết mới nhất

                      Collapse

                      Đang tải...