Thông báo

Collapse
No announcement yet.

Truyền dữ liệu giữa các VĐK AVR dùng USART ?

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

  • Truyền dữ liệu giữa các VĐK AVR dùng USART ?

    Chào các bác !
    Em muốn truyền dữ liệu giữa 2 con AVR dùng USART , em dùng Atmega16 , viết code = ASM , em có nghe nói là nếu truyền dữ liệu kiểu này thì các chân RXD và TXD phải nối chéo nhau , chân GND phải chung , tuy nhiên mạch không chạy được , code thì em viết theo datasheet , em kiểm tra thấy dúng , không hiểu nổi tại sao mạch không chạy , em đoán là phần khởi tạo USART có lỗi ( chỉ là đoán thui )...Bác nào làm về vấn đề này rùi mong các bác chỉ giúp em ! Cám ơn các bác nhiều !



    Bên thu :

    Code:
    ; *************************************************************
    ; *************************************************************
    
    ; KHOI TAO USART
    RCALL KHOI_TAO_USART
    NOP
    ; =============================================================
    RCALL NHAN_DU_LIEU_USART
    NOP
    
    NOP
    ; =============================================================
    HERE :
    RJMP HERE
    
    ; KET THUC TAN BO CHUONG TRINH CHINH
    ; *************************************************************
    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    ; *************************************************************
    KHOI_TAO_USART :
    ; CAT THANH GHI
    PUSH R16
    PUSH R17
    ; THIET LAP TOC DO BAUD , 9600 BAUD ,  TAN SO 11,0592 MHZ
    LDI R17,0
    LDI R16,71
    
    OUT UBRRH,R17
    OUT UBRRL,R16
    
    ; UBRRH = USART BAUD RATE REGISTER HIGH
    ; UBRRL = USART BAUD RATE REGISTER LOW
    ; CHO PHEP THU VA PHAT DU LIEU
    LDI R16,0B00011000
    OUT UCSRB,R16
    ; UCSRB = USART CONTROL AND STATUS REGISTER B
    ; THIET LAP DINH DANG KHUNG
    ; 8 BIT DU LIEU , 1 BIT STOP
    LDI R16,0B10000110
    OUT UCSRC,R16
    ; PHUC HOI CAC THANH GHI
    POP R17
    POP R16
    ; KET THUC HAM KHOI_TAO_USART
    RET
    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    ; *************************************************************
    
    NHAN_DU_LIEU_USART :
    ; DOI DU LIEU NHAN DUOC HOAN TOAN
    SBIS UCSRA,7
    RJMP NHAN_DU_LIEU_USART
    ; NHAN VA KHOI PHUC DU LIEU TU BO DEM
    IN R16,UDR
    ; KET THUC HAM NHAN_DU_LIEU_USART
    RET
    
    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Sau khi nhận xong thì hiển thị lên màn hình , tuy nhiên không thấy hiện thị gì cả , túc là chưa nhận được .

    Bên phát :

    Code:
    LDI r16,high(RAMEND) ; Main program start
    OUT SPH,r16 ; Set Stack Pointer to top of RAM
    LDI r16,low(RAMEND)
    OUT SPL,r16
    SEI ; Enable interrupts
    
    ; *************************************************************
    ; *************************************************************
    
    ; MO TA CHUC NANG CUA MACH
    ; BAM 1 PHIM O BEN PHAT
    ; PHIM NAY DUOC HIEN THI LEN MAN HINH LCD
    ; KY TU DUOC TRUYEN SANG BEN THU
    ; BANG PHUONG PHAP TRUYEN USART
    ; BEN THU NHAN KY TU VA HIEN THI LEN MAN HINH
    ; LCD
    ; SU DUNG PHUONG PHAP QUET
    ; KHOI TAO USART
    RCALL KHOI_TAO_USART
    NOP
    ; =============================================================
    AGAIN :
    RCALL TRUYEN_DU_LIEU_USART
    NOP
    NOP
    ; =============================================================
    RJMP AGAIN
    
    ; KET THUC TAN BO CHUONG TRINH CHINH
    ; *************************************************************
    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    ; *************************************************************
    KHOI_TAO_USART :
    ; CAT THANH GHI
    PUSH R16
    PUSH R17
    
    ; THIET LAP TOC DO BAUD , 9600 BAUD ,  TAN SO 11,0592 MHZ
    LDI R17,0
    LDI R16,71
    
    OUT UBRRH,R17
    OUT UBRRL,R16
    
    ; UBRRH = USART BAUD RATE REGISTER HIGH
    ; UBRRL = USART BAUD RATE REGISTER LOW
    
    ; CHO PHEP THU VA PHAT DU LIEU
    LDI R16,0B00011000
    OUT UCSRB,R16
    ; UCSRB = USART CONTROL AND STATUS REGISTER B
    ; THIET LAP DINH DANG KHUNG
    ; 8 BIT DU LIEU , 1 BIT STOP
    LDI R16,0B10000110
    OUT UCSRC,R16
    
    ; PHUC HOI CAC THANH GHI
    POP R17
    POP R16
    ; KET THUC HAM KHOI_TAO_USART
    RET
    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    ; *************************************************************
    TRUYEN_DU_LIEU_USART :
    ; KIEM TRA XEM BO DEM TRUYEN CO TRONG KHONG
    ; NEU BO DEM TRONG THI CO THE TRUYEN DU LIEU
    ; SU DUNG PHUONG PHAP QUET
    SBIS UCSRA,5			; UCSRA = USART CONTROL AND
    				; STATUS REGISTER A
    				; UDRE = USART DATA REGISTER
    				; EMPTY
    				; NEU BO DEM TRUYEN TRONG RONG THI 
    				; CO THE TRUYEN
    RJMP TRUYEN_DU_LIEU_USART	; NEU KHONG THI LAP LAI
    ; DAT DU LIEU TRONG R16 VAO BO DEM VA GUI DU LIEU
    ; TRUYEN LIEN TUC CHU B
    LDI R16,'B'			; R16 = B
    OUT UDR,R16			; UDR = USART DATA REGISTER
    ; KET THUC HAM TRUYEN_DU_LIEU_USART
    RET
    ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • #2
    bạn chỉ cần dung ngắt truyền và ngặt nhận thôi
    cài này mình viết dùng để test,rất đơn giản,bạn có thể xem qua
    Attached Files

    Comment


    • #3
      Nguyên văn bởi david Xem bài viết
      bạn chỉ cần dung ngắt truyền và ngặt nhận thôi
      cài này mình viết dùng để test,rất đơn giản,bạn có thể xem qua
      Cám ơn bạn ! Sơ đồ mạch mình mắc như trên đã đúng chưa vậy !

      Comment


      • #4
        Nguyên văn bởi schanbkhn Xem bài viết
        Cám ơn bạn ! Sơ đồ mạch mình mắc như trên đã đúng chưa vậy !
        Đúng. Nhưng nếu hai con VXL ở cách xa nhau thì phải đệm Max232
        AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
        Xem thêm tại Online Store ---> Click here
        Mob: 0982.083.106

        Comment


        • #5
          Đây là truyền UART (không đồng bộ), nếu truyền USART (đồng bộ) thì mạch mắc còn thiếu chân xung clock nữa chứ!
          !e

          Comment


          • #6
            Nguyên văn bởi zemen Xem bài viết
            Đây là truyền UART (không đồng bộ), nếu truyền USART (đồng bộ) thì mạch mắc còn thiếu chân xung clock nữa chứ!
            Bác nói giúp em với , em đang tìm hiểu về ( UART ) và ( USART ) ... em debug lại code rùi , mạch không chạy cũng là đúng thui , vì khi chạy trên AVRstudio cũng đâu có được . Code ở trên em viết là chọn chế độ không đồng bộ



            Comment


            • #7
              Tiện đây các bác cho em hỏi luôn về việc thiết lập tốc độ baud ấy ạ
              ban đâu , thiếp lập tốc độ baud , chưa làm gì liên quan đến thanh ghi UCSRC như hình



              Sau khi em thao tác với UCSRC thì UBRRH bị thay đổi , nó được thiết lập thêm 2 bit . Em băn khoăn ở chỗ là , nếu nó được thiết lập thêm 2 bit thì tốc độ baud của nó sẽ thay đổi , vậy thì tốc độ baud thiết lập ban đầu đâu còn đúng nữa ạ , mong các bác chỉ giúp em với ! ( em đưa nhiều hình nên load hơi chậm , mong các bác thông cảm )

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X