intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Hướng dẫn sử dụng Kit 89 - Bài 12

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:7

298
lượt xem
108
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Hướng dẫn sử dụng Kit 89 Bài 12 : Giao tiếp UART Mục đích: Nắm vững giao tiếp Uart. Yêu cầu: Xây dựng ứng dụng giao tiếp giữa board 89 và máy tính thông qua cổng COM. 12.1 Nguyên lý giao tiếp UART Uart RS232 là chuẩn giao tiếp khá phổ biến và được hỗ trợ ở hầu hết các dòng vi điều khiển vì khoảng cách xa và chi phí thấp. Dòng 8051 hỗ trợ 1 kênh giao tiếp uart. Dữ liệu được truyền đi trên chân TX gồm 1 start bit (mức 0), data và 1 stop bit (mức 1). Tốc độ...

Chủ đề:
Lưu

Nội dung Text: Hướng dẫn sử dụng Kit 89 - Bài 12

  1. Hướng dẫn sử dụng Kit 89 Bài 12 : Giao tiếp UART Mục đích: Nắm vững giao tiếp Uart. Yêu cầu: Xây dựng ứng dụng giao tiếp giữa board 89 và máy tính thông qua cổng COM. 12.1 Nguyên lý giao tiếp UART Uart RS232 là chuẩn giao tiếp khá phổ biến và được hỗ trợ ở hầu hết các dòng vi điều khiển vì khoảng cách xa và chi phí thấp. Dòng 8051 hỗ trợ 1 kênh giao tiếp uart. Dữ liệu được truyền đi trên chân TX gồm 1 start bit (mức 0), data và 1 stop bit (mức 1). Tốc độ truyền : đơn vị bit per second (bps) còn gọi là Baud (số lần thay đổi tín hiệu trong 1 giây – thường sử dụng cho modem). Đối với đường truyền thì Baud và bps là như nhau. UART là phương thức truyền nhận bất đồng bộ. nghĩa là bên nhận và bên phát không cần phải có chung tốc độ xung clock (ví dụ : xung clock của vi điều khiển khác xung clock của máy tính) . Khi đó bên truyền muốn truyền dữ liệu sẽ gửi start bit (bit 0) để báo cho bên thu biết để bắt đầu nhận dữ liệu và khi truyền xong dữ liệu thì stop bit (bit 1) sẽ được gửi để báo cho bên thu biết kết thúc quá trình truyền. Khi có start bit thì cả hai bên sẽ dùng chung 1 xung clock (có thể sai khác một ít) với độ rộng 1 tín hiệu (0 hoặc 1) được quy định bởi baud rate, ví dụ baud rate = 9600bps nghĩa là độ rộng của tín hiệu 0(hoặc 1) là 1/9600 = 104 ms và khi phát thì bên phát sẽ dùng baud rate chính xác (ví dụ 9600bps) còn bên thu có thể dùng baud rate sai lêch 1 ít(9800bps chẳng hạn). Truyền bất đồng bộ sẽ truyển theo từng frame và mỗi frame có cấu trúc như sau: Stop bit--B7--B6-- B5-- B4-- B3-- B2-- B1-- B0-- Start bit goes out last goes out first Ngoài ra trong frame truyền có thể có thêm bit odd parity (bit lẻ) hoặc even parity (bit chẵn) để kiểm tra lỗi trong quá trình truyền. Bit parity này có đặc điểm nếu sử dụng odd parity thì số các bit 1 + odd parity bit sẽ ra 1 số lẻ còn nếu sử dụng even parity thì số các bit 1 + even parity bit sẽ ra 1 số chẵn. BKIT HARDWARE CLUB – www.bkit4u.com 63
  2. Hướng dẫn sử dụng Kit 89 12.2 Giao tiếp UART với máy tính Để giao tiếp COM giữa vi điều khiển và máy tính, ta kết nối mạch theo sơ đồ như sau: Do mức điện áp của tín hiệu logic 1/0 ở cổng COM của máy tính khác với vi điều khiển, nên MAX 232 có tác dụng chuẩn hoá mức điện áp giữa máy tính và điều khiển trong quá trình truyền nhận dữ liệu. Nếu giao tiếp trực tiếp giữa 2 vi điều khiển, ta không cần phải sử dụng MAX 232. BKIT HARDWARE CLUB – www.bkit4u.com 64
  3. Hướng dẫn sử dụng Kit 89 12.3 Viết chương trình 12.3.1 Thanh ghi điều khiển truyền nhận nối tiếp Vi điều khiển 8051 có hai chân dùng trong truyền nhận nối tiếp là RxD(nhận dữ liệu ứng với chân P3.0) và TxD(phát dữ liệu ứng với chân P3.1), ngoài ra còn sử dụng bộ đệm SBUF để lưu dữ liệu thu khi nhận và dữ liệu phát khi truyền và thanh ghi SCON(Serial Control) để truy xuất port nối tiếp. Bộ đệm SBUF có địa chỉ byte là 99h, thực tế có hai bộ đệm là bộ đệm thu (chi đọc) dùng trong nhận dữ liệu và bộ đệm phát (chỉ ghi) dùng trong phát dữ liệu. Thanh ghi SCON có địa chỉ byte là 98h là thanh ghi có thể định địa chỉ từng bit dùng để thiết lập chế độ hoạt động của port nối tiếp và các bit trạng thái chỉ sự kết thúc việc thu hoặc phát dữ liệu. Bit Kí hiệu Chức năng Cách dùng của bit này được định nghĩa bằng giá trị của bit SMOD0 trong thanh ghi PCON, nếu SMOD=0, bit này được đọc và viêt là SM0, nó với bit SM1 định nghĩa chế độ hoạt động của cổng nối tiếp. Nếu SMOD0=1, bit này được đọc và SCON.7 SM0/FE viết là FE (khung lỗi). FE được set trong quá trình nhận khi phát hiện bit dừng không hợp lệ, và nó chỉ được xóa bởi phần mềm. (chú ý rằng các chế độ UART nên được lập trình(thông qua SM0 và SM1) khi SMOD0=’0’-chế độ mặc định sau các quá trình RESET) BKIT HARDWARE CLUB – www.bkit4u.com 65
  4. Hướng dẫn sử dụng Kit 89 SM1 Cùng với SM0, xác định chế độ làm việc của cổng nối tiếp SM0, Chế độ UART UART 0 Baud Rate SM1 CCLK/16 (chế độ mặc định sau khi 0: thanh ghi dịch 00 SCON.6 RESET) 1: UART 8-bit Thay đổi 01 2: UART 9-bit CCLK/32 hoặc CCLK/16 10 3: UART 9-bit Thay đổi 11 Cho phép truyền thông đa xử lý. Ở Mode 2 và 3, nếu SM2 được lập, RI sẽ không tích cực nếu bit dữ liệu nhận thứ 9 (RB8) SCON.5 SM2 là ‘0’. Ở Mode 0, SM2 nên bằng ‘0’, ở mode 1, SM2 phải bằng ‘0’. Cho phép thu ở cổng nối tiếp. Thiết lập bởi phần mềm để cho SCON.4 REN phép thu. Xóa bởi phần mềm khi không cho phép thu,REN = 1 trong tất cả 4 chế độ tuyền nhận. Bit dữ liệu thứ 9 được phát ở mode 2 và 3, lập/xóa bởi phần SCON.3 TB8 mềm khi muốn. Bit dữ liệu thứ 9 được nhận ở mode 2 và 3. Ở mode 1(SM2=0), SCON.2 RB8 RB8 là bit dừng được nhận, ở mode 0, RB8 không được định nghĩa. Cờ ngắt phát(truyền nối tiếp), lập bởi phần cứng ở cuối bit thứ 8 ở mode 0, hay là ở bit dừng của các chế độ còn lại, phải được SCON.1 TI xóa bằng phần mềm. (Xem thêm bit INTL0 ở thanh ghi SSTAT) Cờ ngắt thu, lập bởi phần cứng ở cuối bit thứ 8 trong mode 0, hay khoảng giữa bit dừng ở mode 1. với mode 2 và mode 3, SCON.0 RI nếu SMOD0=0, nó được lập gần khoảng giữa bit dữ liệu thứ 9 (bit 8). Nếu SMOD0=1, nó được lập gần khỏang giữa bit dừng. Phải được xóa bởi phần mềm. Các chế độ truyền nối tiếp: • Chế độ 0: ở chế độ này chân RxD sẽ vửa làm nhiệm vụ thu và phát dữ liệu còn chân TxD làm nhiệm vụ phát xung dịch bit(Shift Clock) vói tốc độ sung bằng 1/12 tốc độ xung của XTAL.Dữ liệu truyền đi gồm 8 bit với bit LSB được truyền hoặc nhận trước. Ứng dụng của chế độ này là mở rộng ngõ ra cho 8051 từ 2 đường TxD,RxD sẽ tạo ra 8 đường mở rộng.      8051 Shift register   CLOCK TxD(P3.1) Data   RxD(P3.0)     BKIT HARDWARE CLUB – www.bkit4u.com 66
  5. Hướng dẫn sử dụng Kit 89 • Chế độ 1: là chế độ truyền với mỗi frame có 10 bits (bit start – 8 bits data – bit stop) ,tốc độ baud rate có thể thay đổi được tùy vào cách khởi tạo ban đầu.Có thể nhân đôi tốc độ truyền bằng cách bật PCON.7 = 1.  • Chế độ 2: là chế độ truyền với mỗi frame có 11 bits (bit start – 8 bits data – bit parity – bit stop),bit parity được đặt trong TB8 khi phát và được đặt trong RB8 khi thu, tốc độ baud rate ở chế độ này không thay đổi được và bằng 1/64 dao động của XTAL (1/32 dao động của XTAL nếu PCON.7 = 1).  • Chế độ 3: có chức năng tương tự như chế độ 2 nhưng tốc độ baud rate có thể thay đổi được như ở chể độ 1.  Tốc độ Baud : Tốc độ (Baud) của cổng 8051 phải phù hợp với máy tính: 100, 150, 300, 600, 1200, 2400, 4800, 9600, 19200. Khuyến cáo dùng thạch anh có tần số 11.0592Mhz để có thể tạo ra tốc độ Baud với sai số thấp (gần như là 0). 12.3.2 Dùng Timer1 tạo Baud rate Timer 1 được dùng để tạo tốc độ baud cho truyền nối tiếp ,cần phải đặt Timer 1 ở Mode 2 – 8 bit tự nạp lại, nếu đặt ở chế độ khác sẽ tốn vài chu kỳ máy cho quá trình thiết lập lại giá trị cho TH1,TL1. Đặt TH1 theo bảng sao để có tốc độ Baud tương ứng với SMOD = 0 (bit D7 trong thanh ghi PCON, XTAL = 11.0592 MHz) : Tốc độ Baud TH1 (Thập phân) TH1 (Hexa) 9600 -3 ED 4800 -6 FA 2400 -12 F4 1200 -24 E8 Tốc độ Baud rate sẽ nhân đôi khi SMOD = 1. 12.3.3 Chương trình truyền nhận UART trên 8051 Hàm InitTimer1ForUart() sẽ thiết lập Timer1 tạo tốc độ baud cho truyền nối tiếp void InitTimer1ForUart() { TMOD |= 0x20; // Timer 1 mode 2-autoreload TL1 = 0; /* if PCON.7 = 0, TH1 = 256 - ((Crystal / 384) / Baud) */ PCON &= ~(1
  6. Hướng dẫn sử dụng Kit 89 //TH1 = (-24); // baudrate 1200 //TH1 = (-12); // baudrate 2400 //TH1 = (-6); // baudrate 4800 TH1 = (-3); // baudrate 9600 /* if PCON.7 = 1, baud is double, TH1 = 256 - ((Crystal / 192) / Baud) */ //PCON |= (1
  7. Hướng dẫn sử dụng Kit 89 Hàm uart_isr() là hàm phục vụ ngắt của truyền nhận nối tiếp : void uart_isr(void) interrupt 4 { if (TI == 1) // Truyền dữ liệu { /* Các câu lệnh xử lý khi truyền dữ liệu */ trans_busy = 0; //cờ báo hiệu truyền kết thúc TI = 0; // xoá cờ ngắt TI , kết thúc truyền dữ liệu } if (RI == 1) //Nhận dữ liệu { /* Các câu lệnh xử lý khi nhận dữ liệu */ data_recv[index] = SBUF; // nhận dữ liệu RI = 0; // xoá cờ ngắt RI, kết thúc nhận dữ liệu } } Dữ liệu truyền tới vi điều khiển được lưu trong thanh ghi SBUF và khi vi điều khiển nhận đủ dữ liệu, cờ ngắt RI sẽ bật lên. BKIT HARDWARE CLUB – www.bkit4u.com 69
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2