Thứ Bảy, 22 tháng 8, 2015

GIAO TIEP UART


link khác nữa:http://laptrinhvnc.com/lap-trinh/giao-tiep-bat-dong-bo-uart
Chào các bạn!!
Hôm nay mình sẽ hướng dẫn các bạn cách giao tiếp UART sử dụng 8051.
Sau khi đọc xong bài viết này bạn có thể:
Biết cách truyền dữ liệu lên PC.
Nhận dữ liệu từ PC.
1. UART trong 8051.
Trong các chip 8051 có hỗ trợ 1 kênh giao tiếp UART với 4 chế độ. Chế độ hay được sử dụng đó là chế độ 1,ở chế độ này mỗi khung UART gồm 10 bit : 1bit start + 8 bit data + 1 bit stop.
Sơ đồ kết nối UART:
[​IMG]
2. Lập trình UART.
Để có thể giao tiếp UART điều đầu tiên và quan trọng nhất là ta cần cấu hình tốc độ baud rate. Baud rat thông thường sử dụng là 9600. Để cấu hình tốc độ buad rate ta cần cấu hình timer1 hoặc timer 2 cho phù hợp.( xem thêm tại….)
Sau khi đã có nguồn tạo tốc độ baud cho UART ta đi xây dựng những hàm cơ bản để điều khiển UART:
Hàm khởi tạo UART:
HTML:
void UART_Init(void)
 
{
 
          #ifdef UART_USE_TIMER1
 
          TMOD&=0x0f;
 
          TMOD |= 0x20;  //Timer 1 mode 2.
 
          TL1 = 0xFD;                       
 
          TH1 = 0xFD;      // baud rate =9600                 
 
          TR1 = 1;
 
          #endif
 
          #ifdef UART_USE_TIMER2
 
          RCLK=1;
 
          TCLK=1;    //Timer 2: Baud Rate Generator
 
          RCAP2L  = 0xDC;  //Baud Rate 9600
 
          RCAP2H  = 0xFF;        //Baud Rate 9600
 
          TR2=1;
 
          #endif
 
          ES = 1;      // Kich hoat ngat UART.
 
          IP = 0x10;    // Thiet lap muc uu tien cho ngat UART.
 
          SCON = 0x50;  // Chon che do UART mode 1.
 
          PCON=PCON&(~(0x80));//khong nhan doi toc do baud.   
 
}
Hàm truyền một kí tự ra UART:
HTML:
void UART_PutChar(unsigned char c)
 
{
 
          tran_busy = 1;
 
          SBUF = c;
 
          while(tran_busy);
 
}
Hàm nhận một kí tự UART:
HTML:
unsigned char UART_GetChar(void)
 
{   
 
          unsigned char temp=0;
 
          if(RI==1)
 
          {
 
                  RI=0;
 
                  temp=SBUF;
 
          }
 
          return temp;
 
}
Hàm gửi một chuỗi kí tự ra UART:
HTML:
void UART_Puts(unsigned char *s)
 
{
 
          while (*s)
 
  {
 
      UART_PutChar(*s);
 
      s++;
 
  }
 
}
3. Bài toán ví dụ:
Để hiểu hơn về cách sử dụng UART trong 8051 tôi đưa ra một bài toán thực hành sau: - Gửi chuỗi kí tự “DEMO UART” và “BanLinhKien.Vn” lên PC, sau đó nhận kí tự được gửi từ PC rồi hiển thị kí tự nhận được lên PC.
Code bài toán như sau:
HTML:
int main(void)
 
{
 
          unsigned char key;
 
          unsigned char str[25];
 
          UART_Init();
 
          LCD_Init();
 
          delay_ms(10);
 
          LCD_Puts("DEMO UART");
 
          delay_ms(1000);
 
          LCD_Clear();
 
          EA=1;
 
          UART_Puts("DEMO UART");
 
          LCD_Puts("BanLinhKien.Vn");
 
          UART_Puts("BanLinhKien.Vn");
 
  while(1)
 
  {
 
                  key=UART_GetChar();
 
                  if(key)
 
                  {
 
                            sprintf(str,"Ki Tu VDK nhan duoc : %c",key);
 
                            UART_Puts(str);
 
                            LCD_Gotoxy(0,1);
 
                            sprintf(str,"Ki Tu: %c",key);
 
                            LCD_Puts(str);
 
                  }
 
               
 
  }
 
          return 1;
 
}
Để hiểu rõ hơn các bạn có thể download code và mô phỏng bên dưới.
Chúc các bạn thành công!

Các file đính kèm:

  • UART.zip
    Kích thước:
    22.7 KB
    Đọc:
    664

Không có nhận xét nào:

Đăng nhận xét