Thông báo

Collapse
No announcement yet.

Lập trình AVR bằng CodeVisionAVR C Compiler cho người mới bắt đầu

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

  • Nguyên văn bởi th43v3r Xem bài viết
    win7 64 bit ban xai ban v2.04.4a
    http://s7.letitbit.net/tmpl/tmpl_frame_top.php
    Bạn up lại được không, mình cũng dùng win7 64 bit không thể chạy được bản v2.03.4, mặc dù đã run asministrator và kiểm tra có file IOPORT.sys trong ổ C nó vẫn báo lỗi

    Comment


    • các bác xem hộ chương trình lập trình đóng mở cửa dùng ATmega32 giúp em với nó báo lổi hoài em mò cả tuần mà không ra.

      chương trình

      #include <mega32.h>
      #include <1wire.h>
      #include <delay.h>
      #include <lcd.h>
      #include <string.h>
      #include <stdlib.h>
      #asm
      .equ __lcd_port=0x15 ;PORTC
      #endasm
      #define DS1990_FAMILY_CODE 1 // khai bao ma family_code la 01
      #define SEARCH_ROM 0xF0 // lenh search rom la 0X0F
      #define MAX_DEVICES 8
      unsigned char rom_code[MAX_DEVICES][9]; //khai bao kieu mang
      unsigned char devices,i;
      unsigned char don []=" ---ABCD---" ;
      unsigned char don1[]=" GIAO TIEP DS1990A" ;
      unsigned char don5[]=" ATMEGA32 " ;
      unsigned char don2[]="TRUY XUAT THANH CONG";
      unsigned char don3[]=" MA SO KHONG DUNG ";

      unsigned char don4[]=" HAY KET NOI DS1990A ";
      unsigned char string[] ;
      // 1 Wire Bus functions
      #asm
      .equ __w1_port=0x1B ;PORTA
      .equ __w1_bit=0
      #endasm
      void main(void){
      PORTA=0x00;
      DDRA=0x00;
      PORTB=0x00;
      DDRB=0x7F;
      PORTC=0x00; // khai bao PORTC xuat du lieu
      DDRC=0xFF;
      PORTD=0x00;
      DDRD=0xFF;
      ACSR=0x80;
      SFIOR=0x00;

      lcd_init(20); //KHOI TAO LCD 20 DONG
      lcd_clear(); // XOA LCD
      _lcd_ready(); // CHO LCD READY
      for (i=0;i< strlen(don);i++) // XUAT CHUOI " ---ABCD--" RA lcd;
      {
      lcd_putchar(don[i]);
      };
      lcd_gotoxy(0,1); // CHUYEN CON TRO LCD XUONG DONG 2;
      for (i=0;i< strlen(don1);i++) // XUAT CHUOI " GIAO TIEP DS1990A" ;
      {
      lcd_putchar(don1[i]);
      };
      lcd_gotoxy(0,2); // CHUYEN CON TRO LCD XUONG DONG 3;
      for (i=0;i< strlen(don5);i++) // XUAT CHUOI "ATMEGA32 " ;
      {
      lcd_putchar(don5[i]);
      };
      while (1)
      { w1_init(); // KHOI TAO W1
      devices=w1_search(SEARCH_ROM,&rom_code[0][0]);//TIM THIET BI KET NOI VOI BUS
      string[1]= rom_code[0][1]; // DOC MA SERIAL NUMBER
      string[2]= rom_code[0][2];
      string[3]= rom_code[0][3];
      if (devices)
      { // SO SANH NEU DUNG MA LA "123456" THI CHO PHEP
      if (string[1]== 0x56 &&string[2]== 0x34 && string[3]== 0x12)
      {
      lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
      for (i=0;i< strlen(don2);i++) // XUAT CHUOI "TRUY XUAT THANH CONG";
      {
      lcd_putchar(don2[i]);
      PIND.0=1; // CHO PHEP DONG CO CHAY
      };
      }
      else {
      lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
      for (i=0;i< strlen(don3);i++) // XUAT CHUOI "MA SO KHONG DUNG";
      {
      lcd_putchar(don3[i]);
      PIND.0=0; // DONG CO DUNG
      } ;
      } ;
      }
      else {
      lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
      for (i=0;i< strlen(don4);i++) //" HAY KET NOI DS1990A ";
      {
      lcd_putchar(don4[i]);
      };
      };
      };}

      Comment


      • unsigned char string[] ;

        sai chỗ này đó, bạn khai báo một mảng mà không cho biết là mảng bao nhiêu phần tử.. xem lại nhè

        unsigned char string [n] n là các số 1.2.3....
        chúc thành công
        Sống trong đời sống cần có một tấm lòng..

        Comment


        • Cảm ơn anh nhưng em sửa lại rùi mà không được .Nó báo lổi thế này ạ!
          THU.C(8): error C141: syntax error near '.'
          THU.C(8): error C129: missing ';' before '__lcd_port'
          thu.c(9): warning C315: unknown #directive 'endasm'
          thu.c(24): warning C315: unknown #directive 'asm'
          thu.c(27): warning C315: unknown #directive 'endasm'
          Target not created

          Comment


          • các cao thủ test giúp mình chương trình cho ATMEGA8 này có chạy được không ?

            mega8 spwm program
            / / ICC-AVR application builder:2011-1-7 11:30:51
            / / Target: M8
            / / Crystal: 8.0000Mhz
            # Include <iom8v.h>
            # Include <macros.h>
            # Define INT0 6
            //===================== Period is 20ms, spwm frequency of 20k =================== ========//
            short list [] = {1,4,7,10,13,16,19,22,25,28,31,34,37,39,42,45,48,5 1,54,57,60,62,
            65,68,71,74,76,79,82,84,87,90,92,95,97,100,103,105 ,108,110,112,115,117,119,
            122,124,126,128,131,133,135,137,139,141,143,145,14 7,149,151,152,154,156,157,
            159,161,162,164,165,167,168,169,171,172,173,174,17 6,177,178,179,180,181,182,
            182,183,184,185,185,186,186,187,187,188,188,189,18 9,189,189,189,189,189,189,
            189,189,189,189,189,189,188,188,187,187,186,186,18 5,185,184,183,182,182,181,
            180,179,178,177,176,174,173,172,171,169,168,167,16 5,164,162,161,159,157,156,
            154,152,151,149,147,145,143,141,139,137,135,133,13 1,128,126,124,122,119,117,
            115,112,110,108,105,103,100,97,95,92,90,87,84,82,7 9,76,74,71,68,65,62,60,57,
            54,51,48,45,42,39,37,34,31,28,25,22,19,16,13,10,7, 4,1};
            //===================== Period is 20ms, spwm frequency of 20k =================== ========//
            int count, zf = 0;
            void port_init (void)
            {
            PORTB = 0x00;
            DDRB = 0xFF; / / 06; b port output
            PORTC = 0x00;
            DDRC = 0xFF; / / c port output
            PORTD = 0x00;
            DDRD = 0x00; / / d input ports

            }
            / / TIMER1 initialize - prescale: 1
            / / WGM13: 0 = 10) PWM phz correct, TOP = ICR1
            / / Desired value: 10KHz
            / / Actual value: 10.000KHz (0.0%)
            void timer1_init (void)
            {
            TCCR1B = 0x00; / / stop
            TCNT1H = 0xFF; / / setup
            TCNT1L = 0x38;
            OCR1AH ??= 0x00;
            OCR1AL = 0xC8;
            OCR1BH = 0x00;
            OCR1BL = 0xC8;
            ICR1H = 0x00;
            ICR1L = 200; / / 50us cycle carrier
            TCCR1A = 0xA2; / / 10100010 top to update OCR1A OCR1B, compare match count is cleared up, otherwise set
            TCCR1B = 0x11; / / start Timer 00010001 clk irrespective of frequency, phase correct PWM
            TIMSK | = 0x20; / / timer interrupt sources that can capture interrupt
            }
            # Pragma interrupt_handler timer1_capt_isr: 6
            void timer1_capt_isr (void)
            {
            OCR1A = 500;
            OCR1B = 500;
            / / PORTB ^ = 0x10;
            / / 2 1. Spwm
            / /
            / / 43180
            / /
            / /
            if (zf)
            {
            if (count <200)
            {
            if (count == 1) / / 2 # at this time was off the tube
            {
            / / PORTB & = ~ BIT (3); / / 3 # has been off the tube
            PORTB | = BIT (4); / / open the tube 4 #
            }
            OCR1A = list [count + +]; / / open the tube # 1
            }
            else if ((count> = 200) & & (count <400))
            {
            if (count == 200)
            {
            PORTB & = ~ BIT (4); / / turn off the tube 4 #
            }
            if (count == 201) / / At this point the tube was shut down # 1
            {
            PORTB | = BIT (3); / / pipe open 3 #
            }
            OCR1B = list [count + + -200]; / / 2 # tube opening
            }
            else
            {
            count = 0; / / 2 # tube has been turned off
            PORTB & = ~ BIT (3); / / turn off the tube # 3
            / / PORTB | = BIT (4); / / open the tube 4 #
            OCR1A = list [count + +]; / / open the tube # 1
            }
            }
            else;
            }
            / / Call this routine to initialize all peripherals
            void init_devices (void)
            {
            / / Stop errant interrupts until set up
            CLI (); / / disable all interrupts
            port_init ();
            timer1_init ();
            SEI (); / / re-enable interrupts
            / / All peripherals are now initialized
            }
            / /
            void main (void)
            {
            init_devices ();
            / / Insert your functional code here ...
            zf = 1;
            OCR1A = 500;
            OCR1B = 500;
            PORTB = 0;
            while (1);
            }

            Comment


            • Nguyên văn bởi lenguyen225 Xem bài viết
              Cảm ơn anh nhưng em sửa lại rùi mà không được .Nó báo lổi thế này ạ!
              THU.C(8): error C141: syntax error near '.'
              THU.C(8): error C129: missing ';' before '__lcd_port'
              thu.c(9): warning C315: unknown #directive 'endasm'
              thu.c(24): warning C315: unknown #directive 'asm'
              thu.c(27): warning C315: unknown #directive 'endasm'
              Target not created
              Bạn chắc là Codevision của bạn có lỗi không..Tại vì mình thử copy code của bạn sau đó mình sữa lại như trên không thấy có lỗi j hết..bạn có 2 lỗi và 3 cái warning, mấy cái warning k quan tâm, cái lỗi C141 C135 là lỗi cú pháp thôi bạn quên dấu ";" đằng sau đó.
              Mình đã kiểm tra và không thấy lỗi nữa mà, Bạn xem lại xem.

              This program was produced by the
              CodeWizardAVR V1.24.8d Professional
              Automatic Program Generator
              © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
              http://www.hpinfotech.com

              Project :
              Version :
              Date : 4/4/2011
              Author : F4CG
              Company : F4CG
              Comments:


              Chip type : ATmega32
              Program type : Application
              Clock frequency : 4.000000 MHz
              Memory model : Small
              External SRAM size : 0
              Data Stack size : 512
              ************************************************** ***/

              #include <mega32.h>
              #include <1wire.h>
              #include <delay.h>
              #include <lcd.h>
              #include <string.h>
              #include <stdlib.h>
              #asm
              .equ __lcd_port=0x15 ;PORTC
              #endasm
              #define DS1990_FAMILY_CODE 1 // khai bao ma family_code la 01
              #define SEARCH_ROM 0xF0 // lenh search rom la 0X0F
              #define MAX_DEVICES 8
              unsigned char rom_code[MAX_DEVICES][9]; //khai bao kieu mang
              unsigned char devices,i;
              unsigned char don []=" ---ABCD---" ;
              unsigned char don1[]=" GIAO TIEP DS1990A" ;
              unsigned char don5[]=" ATMEGA32 " ;
              unsigned char don2[]="TRUY XUAT THANH CONG";
              unsigned char don3[]=" MA SO KHONG DUNG ";

              unsigned char don4[]=" HAY KET NOI DS1990A ";
              unsigned char string [10] ;
              // 1 Wire Bus functions
              #asm
              .equ __w1_port=0x1B ;PORTA
              .equ __w1_bit=0
              #endasm
              void main(void){
              PORTA=0x00;
              DDRA=0x00;
              PORTB=0x00;
              DDRB=0x7F;
              PORTC=0x00; // khai bao PORTC xuat du lieu
              DDRC=0xFF;
              PORTD=0x00;
              DDRD=0xFF;
              ACSR=0x80;
              SFIOR=0x00;

              lcd_init(20); //KHOI TAO LCD 20 DONG
              lcd_clear(); // XOA LCD
              _lcd_ready(); // CHO LCD READY
              for (i=0;i< strlen(don);i++) // XUAT CHUOI " ---ABCD--" RA lcd;
              {
              lcd_putchar(don[i]);
              };
              lcd_gotoxy(0,1); // CHUYEN CON TRO LCD XUONG DONG 2;
              for (i=0;i< strlen(don1);i++) // XUAT CHUOI " GIAO TIEP DS1990A" ;
              {
              lcd_putchar(don1[i]);
              };
              lcd_gotoxy(0,2); // CHUYEN CON TRO LCD XUONG DONG 3;
              for (i=0;i< strlen(don5);i++) // XUAT CHUOI "ATMEGA32 " ;
              {
              lcd_putchar(don5[i]);
              };
              while (1)
              { w1_init(); // KHOI TAO W1
              devices=w1_search(SEARCH_ROM,&rom_code[0][0]);//TIM THIET BI KET NOI VOI BUS
              string[1]= rom_code[0][1]; // DOC MA SERIAL NUMBER
              string[2]= rom_code[0][2];
              string[3]= rom_code[0][3];
              if (devices)
              { // SO SANH NEU DUNG MA LA "123456" THI CHO PHEP
              if (string[1]== 0x56 &&string[2]== 0x34 && string[3]== 0x12)
              {
              lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
              for (i=0;i< strlen(don2);i++) // XUAT CHUOI "TRUY XUAT THANH CONG";
              {
              lcd_putchar(don2[i]);
              PIND.0=1; // CHO PHEP DONG CO CHAY
              };
              }
              else {
              lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
              for (i=0;i< strlen(don3);i++) // XUAT CHUOI "MA SO KHONG DUNG";
              {
              lcd_putchar(don3[i]);
              PIND.0=0; // DONG CO DUNG
              } ;
              } ;
              }
              else {
              lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
              for (i=0;i< strlen(don4);i++) //" HAY KET NOI DS1990A ";
              {
              lcd_putchar(don4[i]);
              };
              };
              };}
              Last edited by electrics; 06-04-2011, 16:38.
              Sống trong đời sống cần có một tấm lòng..

              Comment


              • có bác nào biết cách mở nhiều cửa sổ cùng một lúc với codevisionAVR không chỉ e với. cảm ơn nhiều.
                Never forget who you are!

                Comment


                • Mình mới vào nghề mong mọi người chỉ giáo bài này ! mình muốn xin code mong mọi người chỉ giùm !

                  Comment


                  • Anh Thắng B1K52 đúng ko? He gặp người quen,

                    Em Tiến đây, khóa luận anh làm tới đâu rồi..

                    Comment


                    • các sư huynh đệ! có tài liệu về mega 32 bằng tv ko? up lên cho m xem với. m đang làm đồ án về chip này kết hợp với bàn phím máy tính để chạy chữ.mà cho m hỏi luôn sao: if { }; , while { };.. sao lại có dấu ";" ở cuối vây. nếu bỏ nó đi thi nhiu khi sẽ báo lỗi.thank!

                      Comment


                      • Nguyên văn bởi anhxtanh3087 Xem bài viết
                        Bây giờ thì lập trình trên AVR k khác j lập trình cho máy tính.Lưu ý là để định nghĩa 1 chân là đầu vào bạn định nghĩa như sau: VD

                        định nghĩa 1 chân là đầu ra:
                        Cám ơn bạn , tui biết lỗi của chương trình của mình rồi
                        web:
                        tel : 0903728070
                        Bán cáp lập trình S7-200 : 250.000 đ/sợi ( cổng com )
                        Bán cáp lập trình Mishu : 200.000 đ/sợi
                        Bảo hành 01 năm.

                        Comment


                        • Mình thấy trên forum các cao thủ hay khuyên lập bảng rồi tra giá trị trong CAVR, nhưng mình chưa hình dung ra các lập trình đó. có bạn nào biết rõ về cách lập trình trên xin hướng dẫn mình với. thông cảm nhé vì trình độ mình tự học là chính
                          thân
                          |

                          Comment


                          • Nguyên văn bởi thang9x_hp Xem bài viết
                            Mình mới vào nghề mong mọi người chỉ giáo bài này ! mình muốn xin code mong mọi người chỉ giùm !
                            Cái này dùng 1 con AVR(mega/tiny)
                            - Cho ngắt ngoài cạnh lên, dùng 1 biến đếm để xác định lần xảy ra ngắt.
                            - Khi xảy ra ngắt này thì chạy 1 timer, cài lại: cho ngắt ngoài cạnh xuống
                            - Khi xảy ra ngắt lần nữa thì dừng timer (sẽ tính được độ rộng xung), cài lại: cho ngắt ngoài cạnh lên trở lại, chạy timer lại
                            - Khi xảy ra ngắt lần nữa thì dừng timer (sẽ cộng dồn để tính chu kì xung), xoá biến đếm

                            Nếu độ rộng xung và chu kì quá nhỏ thì phải cộng thêm thời gian thực hiện các lệnh trong hàm ngắt để giảm sai số

                            Trhợp dùng 8051 cũng được, khi đó trong hàm ngắt ngoài lần 1 sẽ phải dùng vòng lặp và biến đếm để kiểm tra chờ chân ngắt ngoài xuống thấp
                            !e

                            Comment


                            • Mình mới tập tành môn này nên đọc vào cung chưa hiểu được gì nhiều. Hi vong các cao thủ ra tay làm một cái tutorial cho đàn em newbie học hỏi ạ. Chân thành cảm ơn!

                              Comment


                              • Nguyên văn bởi bluetooth201 Xem bài viết
                                Mình mới tập tành môn này nên đọc vào cung chưa hiểu được gì nhiều. Hi vong các cao thủ ra tay làm một cái tutorial cho đàn em newbie học hỏi ạ. Chân thành cảm ơn!
                                cái này phải học C trước, nắm các câu lệnh cơ bản trước, khi đã nắm chắc rồi thì phần còn lại là phần cứng của vi điều khiển thôi, cách khởi tạo phần cứng của nó... phần này có trong DATA SHEET của nhà sản xuất rồi bạn nên download bản full về sẽ rất chi tiết. trong phần help của codevisionavr cũng có đấy. nếu mới bắt đầu thì nên học điều khiển LED trước, điều khiển sáng tắt 1 con led rồi đến điều khiển cả 8 con tương ứng với 1 thanh ghi( với vi điều khiển 8 bit)... sau đó đến các chuẩn giao tiếp của nó...
                                Never forget who you are!

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X