lập trình 8 led đơn và mô phỏng bằng ATmega16??

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • tinhco_15108
    Thành viên mới
    • Sep 2008
    • 28

    #1

    lập trình 8 led đơn và mô phỏng bằng ATmega16??

    mình có đề tài là:"Viết chương trình hai LED ở giữa sáng bung ra, mỗi trạng thái chỉ có 2 LED sáng, lặp lại". mình viết code mà không biết viết thế nào, các bạn giúp mình viết code và mô phỏng nó bằng con ATmega 16 nhé, cảm ơn các bạn nhiều
  • Multi System
    Thành viên tích cực
    • Feb 2008
    • 671

    #2
    Phần cứng kết nối thế nào rồi?
    Lập trình bằng ngôn ngữ nào đây ?
    Viết trên CodeVision hay AVRStudio ?

    Comment

    • tinhco_15108
      Thành viên mới
      • Sep 2008
      • 28

      #3
      chương trình gồm 8 led đơn 2 con ở giữa sáng rồi chạy sáng dần về 2 bên, viết bằng ngôn ngữ assembly, và viết trên phần mềm fastAVR rồi mô phỏng mạch chạy trên proteus. bạn giúp mình nhé thứ 3 mình phải nộp báo cáo rồi, thanks

      Comment

      • Multi System
        Thành viên tích cực
        • Feb 2008
        • 671

        #4
        Hic !
        Dùng ngôn ngữ "chữ in hoa" thì bó tay rồi.
        Tiện đây viết cho bạn đoạn ngôn ngữ C để tham khảo.
        Chương trình được viết trên AVRStudio, bạn dịch sang file Hex rồi nạp vào xem có đúng ý đồ không.
        8 Led được nối vào PORTC:
        PHP Code:
        #include <avr/io.h>
        #include <util/delay.h>
        
        unsigned char font[4] = {0xE7,0xDB,0xBD,0x7E};
        
        int main(void)
        {
          unsigned char i = 0;
          DDRC = 0xFF;
          PORTC = 0xFF;
          while(1)
          {
            for(i=0;i<4;i++)
            {
               PORTC = font[i];
               _delay_ms(500);
              PORTC = 0xFF;
            }
          }
        } 
        
        Thế thôi!

        Comment

        • tinhco_15108
          Thành viên mới
          • Sep 2008
          • 28

          #5
          bạn không viết code bằng ngôn ngư assembly dc à

          Comment

          • Multi System
            Thành viên tích cực
            • Feb 2008
            • 671

            #6
            Tớ cũng muốn biết viết bằng ngôn ngữ ASM lắm mà học mãi mà nó có vào đâu.

            Comment

            • tinhco_15108
              Thành viên mới
              • Sep 2008
              • 28

              #7
              bạn ơi sao mình vào AVR đổi sang đuôi hex mà đổi mãi không thấy file HEx chổ nào nhỉ, bạn chỉ giùm mình với

              Comment

              • Multi System
                Thành viên tích cực
                • Feb 2008
                • 671

                #8
                Project => Configuration Options (Hoặc là biểu tưởng hình cái bánh răng nằm trên Bar AVRGCC PLUGIN)
                Trong mục này bạn cấu hính cho Chip, Chọn tần số thạch anh, tạo File Hex. Sau đó nhấn OK để lưu cấu hình.
                Nhấn F7 để biên dịch để tạo file Hex.

                Comment

                • tinhco_15108
                  Thành viên mới
                  • Sep 2008
                  • 28

                  #9
                  có bạn nào viết chương trình này bằng ASSEMBLY dc không giúp mình với

                  Comment

                  • tinhco_15108
                    Thành viên mới
                    • Sep 2008
                    • 28

                    #10
                    các bạn xem giùm cái code này có đúng không:



                    ;============================================
                    ; Ten chuong trinh: dk led
                    ; Mo ta phan cung :
                    ; - VDK: ATmega16
                    ; - dk 8 led gan tai Port B
                    ; - Led sang khi Port B = 1
                    ; - Led tat khi Port B = 0
                    ; Mo ta phan mem:
                    ; - Ngon ngu : AVR Assembler
                    ; - Trinh bien dich : ATmel AVR Assembler
                    ; - Trinh mo phong :
                    ; + AVR Studio 4.13 Sp2
                    ; + Protues 7.4
                    ;============================================

                    .include "m16def.inc"
                    main:

                    ldi r16,$ff ;DDRB la port xuat
                    out DDRB,r16

                    ldi r16,$00 ;tat tat ca cac led
                    out PORTB,r16


                    pre_loop:

                    ldi r31,0b00001000
                    ldi r30,0b00010000


                    loop:

                    ldi r29,$00
                    add r29,r31
                    add r29,r30

                    out PORTB,r29
                    rcall delay ;khong nen dung khi

                    ;mo phong voi AVR Studio


                    cpi r29,$00 ;if (r29==0)
                    breq pre_loop ; pre_loop

                    lsr r31 ;r31>>1
                    lsl r30 ;r30<<1
                    rjmp loop


                    delay:

                    ldi r16,250
                    loop0:

                    ldi r17,250

                    loop1:

                    dec r17
                    cpi r17,$00
                    brne loop1

                    dec r16
                    cpi r16,$00
                    brne loop0

                    ret

                    Comment

                    • hungnp
                      Thành viên tích cực
                      • Nov 2005
                      • 178

                      #11
                      bạn sửa thành thế này
                      Tần số thạch anh khi mô phỏng trong proteus đặt 1MHz thì nhìn rõ.
                      Nếu cần kéo dài thêm thời gian delay.
                      ;===============================
                      .include "m16def.inc"
                      main:

                      ldi r16,$ff ;DDRB la port xuat
                      out DDRB,r16

                      ldi r16,$00 ;tat tat ca cac led
                      out PORTB,r16


                      pre_loop:

                      ldi r30,0b00001000 ;high
                      ldi r31,0b00010000 ;low
                      ldi r28,0
                      loop:
                      lsl r30
                      lsr r31
                      mov r29,r30
                      or r29,r31

                      cpi r29,$00 ;if (r29==0)
                      breq pre_loop ;pre_loop

                      out PORTB,r29
                      jmp delay
                      rjmp loop

                      delay:
                      ldi r16,250
                      loop0:

                      ldi r17,250

                      loop1:

                      dec r17
                      cpi r17,$00
                      brne loop1

                      dec r16
                      cpi r16,$00
                      brne loop0
                      jmp loop
                      ret
                      Last edited by hungnp; 03-11-2009, 07:03.

                      Comment

                      • tinhco_15108
                        Thành viên mới
                        • Sep 2008
                        • 28

                        #12
                        sao mà khi test code này trên codevisionAVR nó báo lỗi chỗ hàm thư viện là sao vậy bạn??

                        Comment

                        • hungnp
                          Thành viên tích cực
                          • Nov 2005
                          • 178

                          #13
                          code dùng cho AVRstudio

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          There are no results that meet this criteria.

                          Đang tải...