Thông báo

Collapse
No announcement yet.

Lỗi gì đây??

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

  • Lỗi gì đây??

    Có ai chỉ giùm mình cái lỗi này với. Mình định khởi tạo để đọc giá trị của 6 chân ADC của ATmega16 rồi cho hiển thị lên LCD,nhưng sao khi dịch ra nó lại báo lỗi ở chương trình main:
    identifier 'main' redefined




    Code:
    #include <mega16.h>
    
    #include <delay.h>
    #include <lcd.c>
    
    #define FIRST_ADC_INPUT 0
    #define LAST_ADC_INPUT 5
    unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
    #define ADC_VREF_TYPE 0x20
    
    // ADC interrupt service routine
    // with auto input scanning
    interrupt [ADC_INT] void adc_isr(void)
    {
    register static unsigned char input_index=0;
    // Read the 8 most significant bits
    // of the AD conversion result
    adc_data[input_index]=ADCH;
    // Select next ADC input
    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
       input_index=0;
    ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    }
    
    // Declare your global variables here
    unsigned char i;
    void main (void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTA=0x00;
    DDRA=0x00;
    
    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTB=0x00;
    DDRB=0xFF;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0x00;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC Clock frequency: 125.000 kHz
    // ADC Voltage Reference: AREF pin
    // ADC Auto Trigger Source: None
    // Only the 8 most significant bits of
    // the AD conversion result are used
    ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
    ADCSRA=0xCE;
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
          {
          // Place your code here
           lcd_clear();
           for(i=0;i<3;i++)
           {                        
            lcd_putnum(adc_data[i]);
            lcd_putchar(' ');
           }  
           lcd_gotoxy(1,0);
           for(i=3;i<6;i++)
           {                        
            lcd_putnum(adc_data[i]);
            lcd_putchar(' ');
           }          
           delay_ms(100);
          };
    Attached Files
    Last edited by VNarmy; 19-12-2008, 12:13.

  • #2
    Chương trình của bạn mình thấy cũng bình thường, ko có lỗi. Có lẽ chương trình dịch có vấn đề chăng.
    AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
    Xem thêm tại Online Store ---> Click here
    Mob: 0982.083.106

    Comment


    • #3
      Chắc lỗi ở file lcd.c!
      Nếu bạn dùng thư viện có sẵn của CVAVR thì phải là #include <lcd.h> mới đúng.
      !e

      Comment


      • #4
        Nguyên văn bởi zemen Xem bài viết
        Chắc lỗi ở file lcd.c!
        Nếu bạn dùng thư viện có sẵn của CVAVR thì phải là #include <lcd.h> mới đúng.
        Mình dùng thư viện tự tạo mà, thư viện lcd.c ấy,nhét nó vào cùng thư mục với chương trình kia

        Comment


        • #5
          Nguyên văn bởi kqha2006 Xem bài viết
          Mình dùng thư viện tự tạo mà, thư viện lcd.c ấy,nhét nó vào cùng thư mục với chương trình kia
          Có hơn 2 hàm main.Có thể nó nằm trong 1 file nào đó.
          The goal of power electronics is control the flow of energy from an electrical source to an electrical load with high efficiency, high availability, high reliability, light weight and low cost.

          Comment


          • #6
            Nguyên văn bởi kqha2006 Xem bài viết
            Mình dùng thư viện tự tạo mà, thư viện lcd.c ấy,nhét nó vào cùng thư mục với chương trình kia
            Nếu thư viện tự tạo thì trong C khai báo đúng là #include "lcd.c".Còn #inclue <> là sài thư viện có sẵn.Thực ra trong C #include "file.",khi dịch thì nó bê cái file. đó dán vào chương trình của mình.Có lẽ sai cú pháp ở chổ <> thay bằng "".
            The goal of power electronics is control the flow of energy from an electrical source to an electrical load with high efficiency, high availability, high reliability, light weight and low cost.

            Comment


            • #7
              Nguyên văn bởi kqha2006 Xem bài viết
              Có ai chỉ giùm mình cái lỗi này với. Mình định khởi tạo để đọc giá trị của 6 chân ADC của ATmega16 rồi cho hiển thị lên LCD,nhưng sao khi dịch ra nó lại báo lỗi ở chương trình main:
              identifier 'main' redefined




              Code:
              #include <mega16.h>
              
              #include <delay.h>
              #include <lcd.c>
              
              #define FIRST_ADC_INPUT 0
              #define LAST_ADC_INPUT 5
              unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
              #define ADC_VREF_TYPE 0x20
              
              // ADC interrupt service routine
              // with auto input scanning
              interrupt [ADC_INT] void adc_isr(void)
              {
              register static unsigned char input_index=0;
              // Read the 8 most significant bits
              // of the AD conversion result
              adc_data[input_index]=ADCH;
              // Select next ADC input
              if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
                 input_index=0;
              ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
              // Delay needed for the stabilization of the ADC input voltage
              delay_us(10);
              // Start the AD conversion
              ADCSRA|=0x40;
              }
              
              // Declare your global variables here
              unsigned char i;
              void main (void)
              {
              // Declare your local variables here
              
              // Input/Output Ports initialization
              // Port A initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
              PORTA=0x00;
              DDRA=0x00;
              
              // Port B initialization
              // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
              // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
              PORTB=0x00;
              DDRB=0xFF;
              
              // Port C initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
              PORTC=0x00;
              DDRC=0x00;
              
              // Port D initialization
              // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
              // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
              PORTD=0x00;
              DDRD=0x00;
              
              // Timer/Counter 0 initialization
              // Clock source: System Clock
              // Clock value: Timer 0 Stopped
              // Mode: Normal top=FFh
              // OC0 output: Disconnected
              TCCR0=0x00;
              TCNT0=0x00;
              OCR0=0x00;
              
              // Timer/Counter 1 initialization
              // Clock source: System Clock
              // Clock value: Timer 1 Stopped
              // Mode: Normal top=FFFFh
              // OC1A output: Discon.
              // OC1B output: Discon.
              // Noise Canceler: Off
              // Input Capture on Falling Edge
              // Timer 1 Overflow Interrupt: Off
              // Input Capture Interrupt: Off
              // Compare A Match Interrupt: Off
              // Compare B Match Interrupt: Off
              TCCR1A=0x00;
              TCCR1B=0x00;
              TCNT1H=0x00;
              TCNT1L=0x00;
              ICR1H=0x00;
              ICR1L=0x00;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;
              
              // Timer/Counter 2 initialization
              // Clock source: System Clock
              // Clock value: Timer 2 Stopped
              // Mode: Normal top=FFh
              // OC2 output: Disconnected
              ASSR=0x00;
              TCCR2=0x00;
              TCNT2=0x00;
              OCR2=0x00;
              
              // External Interrupt(s) initialization
              // INT0: Off
              // INT1: Off
              // INT2: Off
              MCUCR=0x00;
              MCUCSR=0x00;
              
              // Timer(s)/Counter(s) Interrupt(s) initialization
              TIMSK=0x00;
              
              // Analog Comparator initialization
              // Analog Comparator: Off
              // Analog Comparator Input Capture by Timer/Counter 1: Off
              ACSR=0x80;
              SFIOR=0x00;
              
              // ADC initialization
              // ADC Clock frequency: 125.000 kHz
              // ADC Voltage Reference: AREF pin
              // ADC Auto Trigger Source: None
              // Only the 8 most significant bits of
              // the AD conversion result are used
              ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
              ADCSRA=0xCE;
              
              // Global enable interrupts
              #asm("sei")
              
              while (1)
                    {
                    // Place your code here
                     lcd_clear();
                     for(i=0;i<3;i++)
                     {                        
                      lcd_putnum(adc_data[i]);
                      lcd_putchar(' ');
                     }  
                     lcd_gotoxy(1,0);
                     for(i=3;i<6;i++)
                     {                        
                      lcd_putnum(adc_data[i]);
                      lcd_putchar(' ');
                     }          
                     delay_ms(100);
                    };
              Thêm cái ngoặc nhọn "}" ở cuối chương trình để đóng chương trình main !
              Chúc thành công !
              0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
              ||
              PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

              Comment


              • #8
                Nguyên văn bởi vo_cam Xem bài viết
                Thêm cái ngoặc nhọn "}" ở cuối chương trình để đóng chương trình main !
                Chúc thành công !
                Đầy đủ dấu ngoặc rồi.
                The goal of power electronics is control the flow of energy from an electrical source to an electrical load with high efficiency, high availability, high reliability, light weight and low cost.

                Comment


                • #9
                  Nguyên văn bởi chestnut Xem bài viết
                  Đầy đủ dấu ngoặc rồi.
                  while (1)
                  { // mở ngoặc của while
                  // Place your code here
                  lcd_clear();
                  for(i=0;i<3;i++)
                  { // mở ngoặc của for
                  lcd_putnum(adc_data[i]);
                  lcd_putchar(' ');
                  } // đóng ngoặc của for
                  lcd_gotoxy(1,0);
                  for(i=3;i<6;i++)
                  { // mở ngoặc của for
                  lcd_putnum(adc_data[i]);
                  lcd_putchar(' ');
                  } // đóng ngoặc của for
                  delay_ms(100);
                  }; // đóng ngoặc của while
                  // Đóng ngoặc của main đâu vậy ?!
                  // Mình nghĩ là thiếu chỗ đó !!
                  0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
                  ||
                  PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

                  Comment


                  • #10
                    Nguyên văn bởi vo_cam Xem bài viết
                    while (1)
                    { // mở ngoặc của while
                    // Place your code here
                    lcd_clear();
                    for(i=0;i<3;i++)
                    { // mở ngoặc của for
                    lcd_putnum(adc_data[i]);
                    lcd_putchar(' ');
                    } // đóng ngoặc của for
                    lcd_gotoxy(1,0);
                    for(i=3;i<6;i++)
                    { // mở ngoặc của for
                    lcd_putnum(adc_data[i]);
                    lcd_putchar(' ');
                    } // đóng ngoặc của for
                    delay_ms(100);
                    }; // đóng ngoặc của while
                    // Đóng ngoặc của main đâu vậy ?!
                    // Mình nghĩ là thiếu chỗ đó !!
                    Mình có down cái file đó về.Và mở bằng một Editor là Notepad++.Kiểm tra dấu { rất chắc chắn.Không thiếu!
                    The goal of power electronics is control the flow of energy from an electrical source to an electrical load with high efficiency, high availability, high reliability, light weight and low cost.

                    Comment


                    • #11
                      MÌnh cũng ko nghĩ là viết thiếu ngoặc,vì ngoặc của main() và while() khi khởi tạo có sẵn rồi. Hơn nữa: khi viết 1 hàm nào đó thì mình thường {} luôn,cho đỡ quên, thành thói quen rồi. Cái code trong trích dẫn chắc là do mình copy thiếu, cái file mình gửi kèm là đầy đủ

                      Comment


                      • #12
                        Nguyên văn bởi chestnut Xem bài viết
                        Có hơn 2 hàm main.Có thể nó nằm trong 1 file nào đó.
                        Đúng rồi,quên mất. Trong cái thư viện lcd.c mình cũng để 1 hàm main()

                        Nguyên văn bởi chestnut Xem bài viết
                        Nếu thư viện tự tạo thì trong C khai báo đúng là #include "lcd.c".Còn #inclue <> là sài thư viện có sẵn.Thực ra trong C #include "file.",khi dịch thì nó bê cái file. đó dán vào chương trình của mình.Có lẽ sai cú pháp ở chổ <> thay bằng "".
                        Mình thử rồi (sau khi xóa hàm main() trong lcd.c đi),dùng kiểu nào cũng được.

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X