Thông báo

Collapse
No announcement yet.

Các cao thủ cho em hỏi sử dụng USART trong Atmega128

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

  • Các cao thủ cho em hỏi sử dụng USART trong Atmega128

    Trong Atmega128 có 2 con USART là USART0 và USART1 , khi em sử dụng CodeWizardAVR ( trong CodeVison) , nếu em cấu hình cho con USART1 như sau


    thì trong code nó sinh ra 2 hàm cho getchar1() và putchar1() để nhận và gửi 1 ký tự như sau :
    ///////////////////////////
    char getchar1(void)
    {
    char data;
    while (rx_counter1==0);
    data=rx_buffer1[rx_rd_index1];
    if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
    #asm("cli")
    --rx_counter1;
    #asm("sei")
    return data;
    }

    void putchar1(char c)
    {
    while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
    UDR1=c;
    }

    Ok mọi thứ tốt , em cũng đã sử dụng dụng được 2 hàm này .

    Nhưng vấn đề là nếu em cấu hình USART0 cũng tương tự như USART1 như sau :


    thì trong code sinh ra chỉ có hàm getchar() thôi mà em không thấy hàm putchar() nào cả :
    //
    char getchar(void)
    {
    char data;
    while (rx_counter0==0);
    data=rx_buffer0[rx_rd_index0];
    if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
    #asm("cli")
    --rx_counter0;
    #asm("sei")
    return data;
    }


    Nếu em cấu hình cho mỗi con USART0 hay cấu hình cho cả 2 USART0 và USART1 thì kết quả vẫn thế , tức là nó không sinh ra hàm putchar() cho con USART0 .

    Như thế nghĩa là như thế nào? có phải 1 trong những nguyên nhân sau không :
    1. CodeVision bị bug , không genarate ra tất cả các trường hợp
    2. USART0 ko thể gửi nếu ko sử dụng interup

    Nếu em tự chèn vào 1 hàm putchar0() như sau :

    void putchar0(char c)
    {
    while ((UCSR0A & DATA_REGISTER_EMPTY)==0);
    UDR0=c;
    }
    thì liệu nó có hoạt động được không ? ( mạch của em ko test được hoạt động của USART0 )

    Bác nào gặp trường hợp như thế này bao giờ giúp em với ?

    Thanks .

  • #2
    sao mà khó khăn quá vậy bạn. Trong usart 0 nếu bạn ko check vào interrupt thì nó vẫn truyền nhận bình thường mà bạn. Mình từng làm rồi có vấn đề gì đâu. chính thư viện
    #include <stdio.h> sẽ hỗ trợ cho bạn các hàm putchar và getchar. nếu ko test dc thì bạn nên kiểm tra lại phần cứng và chương trình. codevision rất ok đó bạn ah. còn tại sao bạn check vào usart 1 sinh ra các hàm putchar1 và getchar1 vì thư viện "stdio" ko có hàm hỗ trợ cho usart1.
    chúc bạn thành công nhé!

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    Đang tải...
    X