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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • manh toan
    Thành viên mới
    • Feb 2009
    • 3

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

    • lenguyen225
      Thành viên mới
      • Mar 2011
      • 3

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

      • electrics
        Thành viên chính thức
        • Apr 2011
        • 66

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

        • lenguyen225
          Thành viên mới
          • Mar 2011
          • 3

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

          • daohd
            Thành viên mới
            • Jan 2010
            • 2

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

            • electrics
              Thành viên chính thức
              • Apr 2011
              • 66

              #141
              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.
              CodeVisionAVR C Compiler for Atmel AVR microcontrollers


              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, 15:38.
              Sống trong đời sống cần có một tấm lòng..

              Comment

              • nhquangdt3k5
                Thành viên tích cực
                • Nov 2010
                • 433

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

                • thang9x_hp
                  Thành viên mới
                  • Sep 2010
                  • 16

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

                  • physicist
                    Thành viên mới
                    • Apr 2011
                    • 12

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

                    • khoa k6.2
                      Thành viên mới
                      • Apr 2010
                      • 1

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

                      • hactoanphong
                        Thành viên chính thức
                        • Apr 2009
                        • 63

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

                        • hoangviet
                          Thành viên chính thức
                          • Jul 2007
                          • 65

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

                          • zemen
                            Thành viên tích cực
                            • Nov 2005
                            • 536

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

                            • bluetooth201
                              Thành viên mới
                              • Mar 2011
                              • 7

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

                              • nhquangdt3k5
                                Thành viên tích cực
                                • Nov 2010
                                • 433

                                #150
                                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...