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

  • #46
    Nguyên văn bởi emut Xem bài viết
    CÁc bác cho em hỏi đoạn Code này nhé:
    Assembly Code Example(1)
    USART_Init:
    ; Set baud rate
    out UBRRH, r17
    out UBRRL, r16
    ; Enable receiver and transmitter
    ldi r16, (1<<RXEN)|(1<<TXEN)
    out UCSRB,r16
    ; Set frame format: 8data, 2stop bit
    ldi r16, (1<<USBS)|(3<<UCSZ0)
    out UCSRC,r16
    ret
    Thì 2 chỗ đánh dấu đỏ có nghĩa là gì vậy???
    CẢm ơn các bác nhiều
    ldi r16, (1<<RXEN)|(1<<TXEN)

    r16 = 0x00;
    r16.RXEN=1;
    r16.TXEN=1;
    ldi r16, (1<<USBS)|(3<<UCSZ0)
    r16 = 0x00;
    r16.USBS=1;
    r16.UCSZ0=1;
    r16.UCSZ1=1;
    ví dụ bạn sử dụng ATMEGA8515
    RXEN=4; TXEN=3;
    vậy ldi r16, (1<<RXEN)|(1<<TXEN)
    tương đương ldi r16, 0x18;
    USBS=3; UCSZ0=1; UCSZ0=2;
    vậy ldi r16, (1<<USBS)|(3<<UCSZ0)
    tương đương ldi r16, 0x0e;

    chúc bạn thành công
    Điện thoại:
    email:

    Comment


    • #47
      Nguyên văn bởi mrcuongcon Xem bài viết
      Em thấy thế này:
      LDI R2,0xff -> error
      LDI R16,0xff -> ok
      Vậy là sao hả bác?
      lệnh ldi chỉ thực hiện từ thanh ghi r16->r31 thôi
      cho nên ldi r2,0xff là sai
      Điện thoại:
      email:

      Comment


      • #48
        Avr

        Xin hỏi bác Duy Phi, mong bác thông cảm tôi mới bắt đầu tìm hiểu vấn đề này, nhưng đọc mãi không hiểu gì cả. Thú thật với bác tôi chỉ là thợ điện tử chưa từng học qua vi xử lý, nhưng cũng hiểu nôm na là nạp chương trình điều khiển theo ý mình vào 1 con chip, nhung cuối cùng thì dùng nó để làm gì thì tôi thấy cái hiểu của tôi mông lung quá. Mong bác chỉ giúp
        |

        Comment


        • #49
          Nhưng thôi, không bàn luận nhiều. Tóm lại nếu ai thích làm mạch nạp thì tự mày mò làm càng hay, cuối cùng rồi cũng phải có một mạch nạp AVR thì mới có thể tiếp tục nghiên cứu về nó.
          Các bác cho em hỏi chút nữa:
          ldi Temp,LOW(RAMEND)
          out SPL,Temp
          ldi Temp,HIGH(RAMEND)
          out SPH,Temp

          LOW(RAMEND) và HIGH(RAMEND) là cái quái gì ạ?

          Comment


          • #50
            Nguyên văn bởi mrcuongcon Xem bài viết
            Nhưng thôi, không bàn luận nhiều. Tóm lại nếu ai thích làm mạch nạp thì tự mày mò làm càng hay, cuối cùng rồi cũng phải có một mạch nạp AVR thì mới có thể tiếp tục nghiên cứu về nó.
            Các bác cho em hỏi chút nữa:
            ldi Temp,LOW(RAMEND)
            out SPL,Temp
            ldi Temp,HIGH(RAMEND)
            out SPH,Temp

            LOW(RAMEND) và HIGH(RAMEND) là cái quái gì ạ?
            là địa chi mặc định ngăn xếp SP của chíp mà bạn include
            thông thương thì là địa chỉ cao nhất của RAM nội chíp đó

            không giống như 89
            AVR sẽ sắp xếp từ trên xuống
            nếu bạn không khởi tạo cho nó thì mặc định là 0x0060
            code ASM cần chú ý đến chỗ này nếu không trong ngăn xếp mà bạn lại để biến ở trong đó thì coi trừng...

            chúc bạn thành công
            Điện thoại:
            email:

            Comment


            • #51
              To bác DangDung:
              Bác có cách nào gửi 1 giá trị nào đó ra 1 chân theo kiểu nối tiếp không?
              Trong AVR em không thấy có kiểu như 89:
              RLC A
              MOV P1.0,C
              SETB CLK
              CLR CLK
              Nên em đang phải so sánh thế này:
              S0:
              ROL R16 ;DICH TRAI CUNG CO NHO C
              BRCS S2 ;BRANCH IF CARRY SET
              S1:
              CBI PORTD,7
              SBI PORTB,0
              CBI PORTB,0 ;CLEAR BIT B.0
              DEC R17
              BRNE S0
              RET
              S2:
              SBI PORTD,7 ;SET BIT PORTD.7
              SBI PORTB,0 ;set clk
              CBI PORTB,0 ;clr clk
              DEC R17
              BRNE S0
              RET
              Mong các bác giúp đỡ.
              Chân thành cảm ơn các bác nhiều!
              Thiết kế, sửa chữa PLC,HMI, Servo,biến tần, máy tính công nghiệp
              Lập trình ứng dụng VĐK, IC logic lập trình được (PAL,GAL, FPGA...)
              DT:098 861 4347

              Comment


              • #52
                cho mình hỏi các port thực hiện các nhiệm vụ khác nhau,có thể hoạt đồng thời được ko?
                |

                Comment


                • #53
                  tôi viết bang CodeVisionAVR C nhưng các pỏt thực hiện lệnh ko đồng thời
                  .ai biết hướng dẩn dùm
                  |

                  Comment


                  • #54
                    Vấn đề đồng thời ở đây, có lẽ bạn chưa hiểu kỹ. Muốn gì thì gì, trong 1 thời điểm thì chỉ có 1 tác vụ/1 lệnh được thực hiện mà thôi.

                    Comment


                    • #55
                      Nguyên văn bởi vinhyen Xem bài viết
                      tôi viết bang CodeVisionAVR C nhưng các pỏt thực hiện lệnh ko đồng thời
                      .ai biết hướng dẩn dùm
                      Đồng thời để làm gì hả bác? với tốc độ 16 triệu lệnh một giây thì hai lệnh xuất ra hai PORT khác nhau chỉ sau nhau 1 / 16 triệu giây thôi. Như vậy là đủ cho tất cả các ứng dụng của chúng ta rồi.

                      @Duyphi, @Mod: Nếu bác Duy Phi thấy không kham nổi Thead này thì đề nghị nói Mod sửa lại cái tựa đề này nhé. Em đi mua lọ Vi Rô Tô đây.
                      Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
                      Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

                      Comment


                      • #56
                        TẠO DỰ ÁN ĐẦU TIÊN TRONG AVRSTUDIO CHO AVR
                        SỬ DỤNG NGÔN NGỮ ASM


                        Các vấn đề mà chúng ta sẽ nghiên cứu:
                        1- Mục đích
                        2-Xây dựng phần cứng
                        3- Sử dụng phần mềm Avrstudio
                        4- Tạo ví dụ
                        5- Viết code
                        6- Test chương trình



                        Mục đích:
                        Trong hướng dẫn đơn giản này, chúng ta sẽ tạo một ví dụ ứng dụng mới, và viết một vài dòng code và biên dịch nó trong AVRstudio ASM cho AVR và kiểm tra kết quả.
                        Ví dụ của chúng ta sẽ làm cho LED quang sáng tắt, do đó chúng ta rất dễ dàng kiểm tra trên vi điều khiển AVR.

                        Comment


                        • #57
                          Chào các bác, T cũng mới làm quen với AVR, còn nhiều cái chưa biết lắm. Hiện T đang sử dụng Code vision AVR để lập trình.

                          Theo T nghĩ , tại sao chúng ta không làm quen ngay với một trong các chương trình lập trình C hỗ trợ phổ biến cho AVR để bắt đầu nhỉ. Như thế, mọi người sẽ đỡ mất thời gian hơn khi làm quen với AVR bằng ASM rồi lại tiếp tục nghiên cứu tới C để lập trình.

                          Nghe Bác Duyphi đã là "trùm" về PIC, chắc hẳn bác cũng ít nhiều có kinh nghiệm về C, thế nên bác hãy bắt đầu từ C đi.
                          Last edited by core T; 29-08-2008, 16:33. Lý do: sửa lại lỗi Á..M = ASM

                          Comment


                          • #58
                            2-Xây dựng phần cứng

                            Đây là sơ đồ kết nối mà bạn sẽ cần để kiểm tra code chương trình cho vi điều khiển. Tôi sẽ sử dụng 3 loại vi điều khiển khác nhau của AVR trong ví dụ này đó là:
                            - atmega8
                            - atmega8535
                            - atmega128

                            Và dĩ nhiên anh chị em vẫn có thể các con chip khác, tuy nhiên DuyPhi tôi không có nhiều chip để test thử và cũng như các biết là tôi cũng đang bắt đầu từ Bit 0, do đó kết quả thử nghiệm trên các chip khác tôi không chắc lắm.

                            Led được kết nối vào PORTB, tuy nhiên các bạn có thể mở rộng ví dụ này trên các port khác, ok!


                            Attached Files
                            Last edited by MicroDuyphi; 29-08-2008, 17:20.

                            Comment


                            • #59





                              CODE CHƯƠNG TRÌNH CHO VI ĐIỀU KHIỂN:

                              Code:
                              	.org $000
                              Batdau:
                              	 ldi r16,low(RAMEND)
                              	out SPL,r16 ;init Stack Pointer
                              	ldi r16,high(RAMEND)
                              	out SPH,r16
                              
                              	LDI	R16, 255
                              	out DDRB,R16 
                              
                              main: 
                              
                              	ldi	r16,255
                               	out PORTB,r16
                              	rcall delay
                              
                              
                              	ldi	r16,0
                              	out PORTB,r16
                              	rcall delay
                              
                              	rjmp main
                              ;-------------------------------------------------------
                              ;Delay 500ms voi thach anh su dung: 8mhz
                              ;-------------------------------------------------------
                              delay500ms:	
                              		ldi R23,0x6B
                              _wg500loop0:	ldi R24,0x46
                              _wg500loop1:	ldi R25,0xB1
                              _wg500loop2:	dec R25
                              		brne _wg500loop2
                              		dec R24
                              		brne _wg500loop1
                              		dec R23
                              		brne _wg500loop0
                              		pop R25
                              		pop R24
                              		pop R23
                              		ret
                              
                              ;end
                              Attached Files

                              Comment


                              • #60
                                cho minh hoi portc cua atmega16,nap chương trình vào sao chỉ có 1 số pin hoạt động.mình đả viết 1 chương trinh dơn giản để kiểm tra nhưng vẩn vậy
                                ví dụ như đoạn chương trình này:
                                #include <mega16.h>
                                #include <delay.h>

                                void main(void)
                                {
                                DDRC=0xFF;
                                while(1)
                                {
                                PORTC=0xFF;
                                delay_ms(40);
                                PORTC=0x00;
                                delay_ms(40);
                                PORTC=0xFF;
                                delay_ms(40);
                                }}
                                |

                                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