Thông báo

Collapse
No announcement yet.

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

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • 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 cFILE *stream);

    //current channel
    //uint8_t ch;

    //set output stream to LCD
    static FILE lcd_str FDEV_SETUP_STREAM (LCDsendstreamNULL_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 cFILE *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 (CLRROW00);
                        
    CopyStringtoLCD (LCDXY[(0)], 00);
                
                        
    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 ?

  • #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


    • #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


      • #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


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

          Comment


          • #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


            • #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, 19:58.

              Comment


              • #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


                • #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


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

                    Comment


                    • #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...
                      X