Thông báo

Collapse
No announcement yet.

Cùng Duyphi bắt đầu học lập trình AVR

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

  • Viết bằn CodeVision C đi.

    Code chạy tốt.

    void Write_EEPROM(unsigned int dchi, unsigned char dlieu)
    {
    while(EECR.1);
    EEAR = dchi;
    EEDR = dlieu;
    EECR.2 = 1;
    EECR.1 = 1;
    }

    //doc 1 byte du lieu tu dia chi cua eeprom//////////////////////////
    unsigned char Read_EEPROM(unsigned int dchi)
    {
    while(EECR.1);
    EEAR = dchi;
    EECR.0 = 1;
    return EEDR;
    }

    Comment


    • đả nói là dùng Asem mà bác lại sử dụng C, mình chưa học C nên không hiểu lắm bác có tài liệu nào hướng dẫn cho em với.
      thanks bác trước nhe
      Nguyên văn bởi minhhieu Xem bài viết
      Một ví dụ nữa là làm led sang từ phải qua trái và tắt dần từ trái qua phải.

      //cac led noi vao PORTA, cuc duong cua led noi vao tro 330R va noi len VCC
      //doan code nay lam led sang tu phai qua trai va tat dan tu trai qua phai

      #include <mega16.h>
      #include <delay.h>

      void main(void)
      {
      unsigned char i,data;
      PORTA=0xFF; //port A co tro keo ben trong
      DDRA=0xFF; //Huong cua du lieu = xuat du lieu ra
      while (1)
      {
      data = 0xFF; //tat tat ca cac led
      for(i= 0;i<=7;i++) // lap lai 8 lan tuong ung 8 den led sang lan luot
      {
      data <<=1; // dich sang trai 1 bit de den sang tang dan len
      PORTA = data; // xuat du lieu ra dieu khien den
      delay_ms(500); // led sang lan luot cac nhau 500ms
      }
      data = 0xFF; // tat cac led
      for(i = 0;i<=7;i++) // lap lai 8 lan, led tat lan luot cho den het
      {
      data >>= 1; // dich bit sang phai 1 bit
      PORTA = ~data; // dao du lieu tu trang thai sang thanh tat va xuat ra dieu khien den
      delay_ms(500);
      }
      };
      }

      Comment


      • Em đang làm cái mạch điều khiển thiết bị điện 220v bằng AVR. Em có mạch chuyển 5v thành 220v rồi, cho em hỏi nếu em treo tất cả chân portA la 1 thì chỉ cần nối dây vào 2 bit bất kì của portA là được phải ko?
        Code chỉ cần vầy là đủ phải ko ?
        void main(void)
        {

        PORTA=0xFF;
        DDRA=0xFF;
        }
        Mong giải đáp giúp em sớm.hic

        Comment


        • em dùng ngôn ngữ lập trình bascom AVR,em đang xài con atmega16,em muốn lập trình 8 led,chạy từ trái sang phải,sau đó con cuối cùng sáng lên(8).sau đó con số 7 sáng cứ thế cuối cùng là 8 con sáng 1 lúc.thì làm ntn? có phải là dùng lệnh xoay led ko? ai zup' em với?????

          Comment


          • chỉnh dùm em code với.Muốn chuyển từ led 7 thanh âm chung sang thành dương chung thì chỉnh thế nào bh?Hoặc âm chung mà không cần qua con 7448 cũng được.giúp với,tìm mua con 7448 mà không có
            /************************************************** ***
            This program was produced by the
            CodeWizardAVR V1.24.2c Professional
            Automatic Program Generator
            © Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
            http://www.hpinfotech.ro
            e-mail:office@hpinfotech.ro

            Project :
            Version :
            Date : 10/7/2008
            Author : Hoang Thang
            Company : thangktvta@gmail.com
            Comments:


            Chip type : ATmega8
            Program type : Application
            Clock frequency : 1.000000 MHz
            Memory model : Small
            External SRAM size : 0
            Data Stack size : 256
            ************************************************** ***/

            #include <mega8.h>
            #include <delay.h>

            // I2C Bus functions
            #asm
            .equ __i2c_port=0x18 ;PORTB
            .equ __sda_bit=0
            .equ __scl_bit=1
            #endasm
            #include <i2c.h>

            // DS1307 Real Time Clock functions
            #include <ds1307.h>

            unsigned char h,m,s;
            void disp(int add, unsigned char dat);
            void wr(unsigned char add, unsigned char dat);

            // External Interrupt 0 service routine
            interrupt [EXT_INT0] void ext_int0_isr(void)
            {
            // Place your code here

            int a,i=0;
            //#asm("cli");
            while(1)
            {

            if (PIND.2==0) {
            a++;
            if (a>1) a=0;
            delay_ms(100);
            }
            switch (a){

            case 0: {
            if (PIND.0==0) {
            h++; // up
            delay_ms(500);
            }
            if (PIND.1==0) {
            h--; // Down
            delay_ms(500);
            }
            if (h>12) h=h-12;
            if (h<1) h=12;
            disp(1,(h/10)%10);
            disp(2,h%10);
            break;
            }
            case 1: {
            if (PIND.0==0) {
            m++; // up
            if (m==60) m=0;
            delay_ms(300);
            }
            if (PIND.1==0) {
            m--; // Down
            if (m==0) m=59;
            delay_ms(300);
            }

            disp(3,(m/10)%10);
            disp(4,m%10);
            break;
            }
            }
            if (PIND.3==0) // Thoat chinh gio.
            {
            delay_ms(10);
            rtc_set_time(h,m,s);
            delay_ms(500);
            wr(0,0);
            break;
            }
            }
            }

            // Declare your global variables here

            void disp(int add, unsigned char dat)
            {
            unsigned char num_led[5]={0,0x7f,0xbf,0xdf,0xef};
            PORTC=dat;
            PORTD=num_led[add];
            delay_ms(1);
            PORTD=0xff;
            }

            void wr(unsigned char add, unsigned char dat)
            {
            i2c_start();
            i2c_write(0xd0);
            i2c_write(add);
            i2c_write(dat);
            i2c_stop();
            }

            void main(void)
            {
            // Declare your local variables here

            // Input/Output Ports initialization
            // Port B 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
            PORTB=0x00;
            DDRB=0x00;

            // Port C initialization
            // Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
            // State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
            PORTC=0x00;
            DDRC=0x0F;

            // Port D initialization
            // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
            // State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T
            PORTD=0xff;
            DDRD=0xF0;

            // Timer/Counter 0 initialization
            // Clock source: System Clock
            // Clock value: Timer 0 Stopped
            TCCR0=0x00;
            TCNT0=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
            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: On
            // INT0 Mode: Low level
            // INT1: Off
            GICR|=0x40;
            MCUCR=0x00;
            GIFR=0x40;

            // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK=0x00;

            // Analog Comparator initialization
            // Analog Comparator: Off
            // Analog Comparator Input Capture by Timer/Counter 1: Off
            // Analog Comparator Output: Off
            ACSR=0x80;
            SFIOR=0x00;

            // I2C Bus initialization
            i2c_init();

            // DS1307 Real Time Clock initialization
            // Square wave output on pin SQW/OUT: On
            // Square wave frequency: 1Hz
            rtc_init(0,1,0);
            //wr(0,0);
            //rtc_set_time(19,18,0);

            // Global enable interrupts
            #asm("sei")

            while (1)
            {
            // Place your code here
            rtc_get_time(&h,&m,&s);
            if (h>12) h=h-12;
            disp(1,(h/10)%10);
            disp(2,h%10);
            disp(3,(m/10)%10);
            disp(4,m%10);
            };
            }

            Comment


            • Góp ý thôi : Mod hay admin nên xóa tất cả các bài không phải của bạn DuyPhi ( kể cả bài này và bài của những người có thể giỏi hơn DuyPhi).Tạo ra 1 thread khác để trao đổi với Duy Phi để Duy Phi tổng hợp lại và đưa vào đây hay hơn.Vậy mới giống tur chứ .

              Comment


              • Nguyên văn bởi MicroDuyphi Xem bài viết
                Cái EASY AVR chính hãng của MikroE -DuyPhi hiện đang có, nhưng giá quá cao, còn hàng nhái tên EASY trong nước làm thì cũng tầm trên 1tr đồng, tạm thời Phi chưa có kit demo, sẽ suy nghĩ vài hôm rồi đặt mạch, post lên cho anh em xài chung.
                Bạn cứ an tâm, Phi sẽ cố gắng mọi cách thuận tiện nhất trong khả năng có thể.
                Hicc đọc đến câu này mà muốn gặp bác ngay để mời trà đá cảm ơn. Mong bác đi trước giúp a e nhiệt tình.

                Comment


                • Nguyên văn bởi MicroDuyphi Xem bài viết
                  Cùng Duyphi bắt đầu học lập trình AVR


                  Vâng! đây là chuyên mục mà Phi tôi mong muốn được chia xẻ với anh chị em,với những người chưa làm việc trên dòng vi điều khiển này - hôm nay muốn nghiên cứu về nó thì hãy cùng DUYPHI tôi bắt tay vào nghiên cứu và từng bước tiến hành thí nghiệm lập trình và thiết kế một số ví dụ, ứng dụng từng bước,từng bước 1.
                  Nội dung:
                  1- Xoay quanh nghiên cứu AVR với anh chị em từ những cái nho nhỏ nhất
                  2- Tiến hành chọn lựa 1 vài con vi điều khiển đặc trưng để thí nghiệm
                  3- Bắt đầu viết chương trình ứng dụng từng bước từ dễ đến khó dần.


                  Đây là lần đầu tiên DuyPhi tôi tiếp cận AVR, nên xem như chúng ta bắt đầu từ BIT 0,hi hi... còn anh em nào đã thành thạo về AVR thì DuyPhi tôi xin thật lòng lắng nghe những lời chỉ giáo góp ý.

                  Chân thành cảm ơn:
                  - Các bạn trong diễn đàn đã quan tâm tham gia vào chuyên mục này
                  - Chân thành cảm ơn các bạn - các anh chị em đã nhiệt tình góp ý đóng góp ý kiến cho tôi trên bước đường tiếp cận với AVR.
                  Pác Duyphi nhờ pác giúp dùm em code chương trình đếm từ 0- 9999 dùng 4 led 7, dùng atmege16, mỗi lần ấn nút là đếm thêm 1 giá trị ah. Rất mong bác giúp đỡ.

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X