Wednesday, July 16, 2014

Thư viện UART của MSP430x2xx

          Đây là thư viện khởi tạo vào sử dụng module UART của MSP430.Việc sử dụng giao tiếp UART khá đơn giản và hữu ích trong nhiều ứng dụng.Cách sử dụng thư viện như sau:
          - Đầu tiên để sử dụng được giao tiếp UART,khai báo hàm khởi tạo module : UART_Init();
          - Để gởi dữ liệu từ MSP ra ngoài,chúng ra dựa vào kiểu dữ liệu mà có thể dùng các hàm UART_Write_ .
                   + Nếu là 1 ký tự thì có thể dùng UART_Write_Char(unsigned char).Với hàm này ngoài chức năng gởi ký tự,chúng ta còn có thể gởi các mã trong bảng ASCII ,ví dụ như ký tự xuống dòng(10), tab(7,9,11), xóa ngược(8).
                   + Nếu gởi chuỗi thì dùng UART_Write_String(*str); Các bạn có thể kết hợp với hàm sprintf trong C để chuyển mọi kiểu dữ liệu về string,tuy nhiên chú ý là kiểu số nguyên có giới hạn 2 byte(65535) ,nên nếu muốn truyền số lớn thì phải dùng hàm UART_Write_Int( ... ); Ngoài ra nếu muốn truyền số thực thì dùng UART_Write_Float(x,coma) với coma là số chữ số sau dấu phẩy.


                   + Nếu muốn in ra mã nhị phân của một thanh ghi thì dùng UART_Write_Reg("tên thanh ghi",địa chỉ); Ví dụ muốn in ra mã nhị phân của P1IN thì dùng hàm UART_Write_Reg("P1IN",P1IN);
         - Để nhận dữ liệu qua UART thì có 2 cách là dùng ngắt UART hoặc dùng hỏi vòng.Nếu dùng ngắt thì chúng ta viết trực tiếp chương trình trên ngắt,còn dùng hỏi vòng thì sẽ phải liên tục đọc thanh ghi cờ ngắt của UART xem có dữ liệu gởi đến không.Ví dụ như hàm UART_Read_Char() và UART_Read_String().Một chú ý khác là khi giao tiếp với máy tính thì cần chú ý đến bit parity vì trên máy tính có thể khác dẫn để không nhận được hoặc nhận sai dữ liệu.Thường thì nên tắt bit này đi khi giao tiếp máy tính.



8 comments:

  1. Hi anh! Em dùng msp430g2553 em chuyển dữ liệu k dây bằng module giao tiếp uart thì có thể giao tiếp với mày tính được k anh. Vì msp430g2553 chỉ có 1 uart mà đã dùng để chuyển dữ liệu không dây rồi. Hay là e phải chọn chip khác ạ

    ReplyDelete
  2. Nếu module không dây của em cho phép byte đầu tiên là byte địa chỉ thì có thế chỉ cần dùng 1 cổng UART thôi,khi đó byte đầu tiên trong chuỗi UART là địa chỉ thiết bị nhận.Nếu không thì bắt buộc phải dùng 2 cổng UART riêng rồi

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Hi anh! Giả sử e muốn khi nào nhận được dữ liệu là số 3 thì mới gửi đi là số 4 thì phải làm sao ạ, cảm ơn anh nhiều

    ReplyDelete
  5. Em tạo một cái if else trong hàm gọi ngắt nhận của UART thôi là được

    ReplyDelete
  6. Code như thế này phải k anh, hiện tại kit của e die rồi nên k debug được


    #pragma vector=USCIAB0RX_VECTOR
    __interrupt void USCI0RX_ISR(void)
    {
    while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
    _delay_cycles(1000);
    if(UCA0RXBUF==3)
    UCA0TXBUF = 4; //or UART_Write_Int(4);
    }

    ReplyDelete
  7. Uh dùng cái UART_Write_Char('4') ý

    ReplyDelete
  8. cảm ơn anh nhiều, hix. Đợi kit về chiến thử xem sao?

    ReplyDelete

END COMMENT FACEBOOK-->