Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
420,5 KB
Nội dung
Lập trình 8051 – BÀI : UARTTruyền thơng nối tiếp với 8051 http://dammedientu.vn/truyen-thong-noi-tiep-voi-8051/ Mục tiêu Kết thúc học này, bạn hiểu: Ø Truyền liệu nối tiếp đồng bộ, không đồng Ø Đóng khung liệu truyền thơng khơng đồng Ø Chuẩn giao diện RS232 Ø Nối ghép 8051 với chuẩn RS232 Ø Các bước lập trình truyền thơng nối tiếp cho 8051 Cài đặt khung truyền Cài đặt tốc độ baud 1.1 Baud rate (tốc độ Baud)Để việc truyền nhận không đồng xảy thành cơng thiết bị tham gia phải “thống nhất” với khoảng thời gian dành cho bit truyền, hay nói cách khác tốc độ truyền phải cài đặt trước, tốc độ gọi tốc độ Baud Theo định nghĩa, tốc độ baud số bit truyền giây Ví dụ: tốc độ baud đặt 19200 thời gian dành cho bit truyền 1/19200 ~ 52.083us 1.2 Frame (khung truyền) Khung truyền bao gồm quy định số bit lần truyền, bit “báo” bit Start bit Stop, bit kiểm tra Parity, số lượng bit data quy định khung truyền Hình ví dụ khung truyền UART (truyền thông nối tiếp không đồng bộ): khung truyền bắt đầu 01 start bit, 08 bit data, sau 01 bit parity dùng kiểm tra liệu cuối 02 bits stop Công việc gọi đóng gói liệu Chúng ta vào tìm hiểu thành phần có khung truyền: Ø Start bit Start bit truyền frame truyền, bit có chức báo cho thiết bị nhận biết có gói liệu truyền tới Start bit bắt buộc phải có khung truyền, bit thấp (0) Ø Data (dữ liệu) Data hay liệu cần truyền thơng tin mà cần gởi nhận Data khơng thiết phải gói bit, với 8051 ta quy định số lượng bit data 08 09 bit Trong truyền thơng nối tiếp UART, bit có trọng số nhỏ (LSB – Least Significant Bit, bit bên phải) data truyền trước cuối bit có trọng số lớn (MSB – Most Significant Bit, bit bên trái) Ø Parity bit Parity bit dùng để kiểm tra liệu truyền có khơng (một cách tương đối) Có loại parity parity chẵn (even parity) parity lẻ (odd parity) Parity chẵn nghĩa số lượng số “1” liệu bao gồm bit parity số chẵn Ngược lại tổng số lượng số “1” parity lẻ số lẻ Parity bit bit bắt buộc loại bit khỏi khung truyền Ø Stop bits Stop bits 01 nhiều bit báo cho thiết bị nhận gói liệu gởi xong Sau nhận stop bits, thiết bị nhận tiến hành kiểm tra khung truyền để đảm bảo tính xác liệu Stop bits bit bắt buộc xuất khung truyền, 8051 01 02 bit, chúng bit cao (1) Truyền thông nối tiếp 8051 2.1 Phần cứng 2.1.1 Các chân RxD TxD 8051 Trong 8051 có hai chân dùng cho truyền nhận liệu nối tiếp Hai chân gọi TxD RxD, phần cổng P3 (đó P3.0-chân 10 P3.1-chân 11) Các chân hoạt động với mức logic TTL (mức logic cao “1” gán cho Vcc mức logic thấp gán cho 0v) Vì máy tính sử dụng rộng rãi để truyền thông với hệ thống vi điều khiển, ta chủ yếu tập trung vào truyền thông nối tiếp 8051 với cổng COM – RS232 PC 2.1.2 Chuẩn giao diện RS232 Ø CácchâncủacổngRS232 Số chân Mô tả Data carrier detect (DCD) Tránh tín hiệu mạng liệu Received data (RxD) Dữ liệu nhận Transmitted data (TxD) Dữ liệu gửi Data terminal ready (DTR) Đầu liệu sẵn sàng Signal ground (GND) Đất tín hiệu Data set ready (DSR) Dữ liệu sẵn sàng Request to send (RTS) Yêu cầu gửi Clear to send (CTS) Xoá để gửi Ring indicator (RI) Báo chuông Bảng 1: Các tín hiệu chân đầu nối DB – máy tính 2.1.4 Nối ghép 8051 tới RS232 Chuẩn RS232 thiết lập trước họ logic TTL lâu điện áp đầu vào đầu khơng tương thích với mức TTL Trong RS232 mức logic biểu diển từ điện áp – 3v đến -25v mức ứng với điện áp + 3v đến +25v làm cho điện áp – 3v đến + 3v khơng xác định Vì lý để kết nối chuẩn RS232 đến hệ vi điều khiển 8051 ta phải sử dụng biến đổi điện áp (như MAX232) để chuyển đổi mức điện áp RS232 mức điện ápTTL chấp nhận chân TxD RxD 8051 ngược lại Các IC MAX232 nhìn chung coi điều khiển đường truyền Một điểm mạnh IC MAX232 dùng điện áp nguồn +5v với điện áp nguồn 8051 Hay nói cách khác ta ni 8051 MAX232 với nguồn +5v, mà dùng hai nguồn nuôi khác IC MAX232 có hai điều khiển đường truyền để nhận truyền liệu trình bày hình Các điều khiển dùng cho chân TxD gọi T1 vàT2, cho chân RxD gọi R1 R2 Trong nhiều ứng dụng có cặp dùng Ví dụ: hình ta dùng đến T2 R2 dùng làm cặp TxD vàRxD 8051, cặp R1 T1 khơng cần đến Để ý IC MAX232, T1 có gán T1in (chân 11) T1out (chân 14): Chân T1inlà phía TTL nối tới chân RxD vi điều khiển Chân T1outlà phía RS232 nối tới chân RxD đầu nối DB củaRS232 Bộ điều khiển R1 có gán R1in (chân 13) R1out (chân 12): Chân R1in(chân số 13) phía RS232 nối tới chân TxD đầu nối DB RS232 Chân R1out(chân số 12) phía TTL nối tới chân RxD vi điều khiển.2.2 Lập trình phần mềm Trong phần nghiên cứu ghi truyền thông nối tiếp 8051 cách lập trình chúng để truyền nhận liệu nối tiếp 2.2.1 Thanh ghi SBUF SBUF ghi bit dùng riêng cho truyền thông nối tiếp 8051 Đối với byte liệu muốn truyền qua đường TxD phải đặt ghi SBUF Tương tự, SBUF giữ byte liệu nhận từ đường RxD 8051: Khi byte ghi vào ghi SBUFnó đóng khung với bit Start, Stop truyền nối tiếp quan chân TxD Khi bit nhận nối tiếp từ RxDthì 8051 mở khung để loại trừ bit Start, Stop để lấy byte từ liệu nhận đặt byte vào ghi SBUF 2.2.2 Thiết lập chế độ truyền ghi SCON Điều phải làm sử dụng cổng nối tiếp tích hợp 8051? Rõ ràng cấu hình cho Điều cho phép báo với 8051 biết: bit liệu muốn truyền, tốc độ truyền Vậy làm xác định điều đó? Nhờ ghi SCON, ghi bit dùng để lập trình việc đóng khung liệu, xác định chế độ làm việc truyền thơng nối tiếp SCON ghi đánh địa theo bit Dưới mô tả bit khác ghi SCON: Bit tên Địa Chức SM0 9Fh Xác định chế độ cổng nối tiếp (bit 0) SM1 9Eh Xác định chế độ cổng nối tiếp (bit 1) SM2 9Dh Cho phép truyền thông đa xử lý REN 9Ch Bit cho phép nhận TB8 9Bh Sử dụng chế độ RB8 9Ah Sử dụng chế độ TI 99h Cờ truyền: bật sau truyền song byte RI 98h Cờ nhận: bật sau nhận đủ byte Hình 6: Thanh ghi điều khiển cổng nối tiếp SCON Ø Các bit SM0, SM1 Đây bit D7 D6 ghi SCON Chúng dùng để xác định chế độ đóng khung liệu, có chế độ: SM0 SM1 Chế độ Khung liệu Tốc độ baud 0 8- bit shift register Oscillator /12 1 8-bit UART Cài đặt timer 1 9-bit UART Oscillator/64 1 9-bit UART Cài đặt timer Hình 7: Các chế độ xác định bit SM0 SM1 (*) Lưu ý: tốc độ truyền bảng tăng gấp đôi bit PCON.7 (bit SMOD) thiết lập lên 1, mặc định hệ thống PCON.7=0.Trong bốn chế độ ta quan tâm đến chế độ Khi chế độ chọn liệu đóng khung thành 10 bit: gồm bit Start, sau bit liệu, cuối bit Stop Quan trọng chế độ nối tiếp cho phép tốc độ baud thay đổi thiết lập Timer1 8051 Ø Bit SM2 Bit cho phép khả đa xử lý 8051 Đối với ứng dụng chúng ta, đặt SM2 = ta khơng sử dụng 8051 mơi trường đa xử lý Ø Bit REN REN (Receive Enable) bit cho phép nhận (bit D4 ghi SCON) Khi bit REN cao cho phép 8051 nhận liệu chân RxD Và kết ta muốn 8051 vừa truyền vừa nhận liệu bit REN phải đặt lên Bit dùng để khống chế việc nhận liệu nối tiếp bit quan trọng ghi SCON Ø Bit TB8 RB8 Bit TB8 RB8 dùng chế độ nối tiếp Ta đặt TB8=0 vàRB8=0 khơng sử dụng ứng dụng Nói thêm, chế độ có bit liệu truyền nhận Bit TB8 chứa bit liệu thứ truyền, bit RB8 chứa bit liệu thứ nhận, chế độ nối tiếp bit RB8 nhận bit Stop liệu bit nhận, ta không cần quan tâmJ Ø Các bit TI RI Các bit ngắt truyền TI ngắt nhận RI bit D1 D0 ghiSCON Các bit quan trọng ghi SCON: Khi 8051 kết thúc truyền ký tự bit bật TIđể báo sẵn sàng truyền byte khác Bit TI bật lên trước bit Stop Khi 8051 nhận liệu nối tiếp qua chân RxDvà tách bit Start Stop để lấy bit liệu để đặt vào SBUF, sau hồn tất bật cờRI để báo nhận xong byte cần phải lấy kẻo liệu bị Cờ RI bật tách bit Stop 2.2.3 Thiết lập tốc độ baud 8051 Một chế độ cổng nối tiếp cấu hình, việc chương trình cần phải cấu hình tốc độ baud cho cổng nối tiếp Điều áp dụng cho chế độ Serial Port Còn chế độ 2, tốc độ truyền xác định dựa tần số dao động thạch anh: Ø Trong chế độ 0: tốc độ truyền luôn tần số dao động chia cho 12 Điều có nghĩa bạn sử dụng thạch anh tần số 11.059Mhz, tốc độ truyền chế độ luôn 921.583 baud Trong chế độ 2: tốc độ truyền luôn tần số dao động chia cho 64, đó, với thạch anh tần số 11.059Mhz mang lại tốc độ truyền 172.797 baud Ø Trong chế độ 3: tốc độ truyền xác định cách cài đặt Timer1 Phương pháp phổ biến cài đặt Timer1 chế độ tự động nạp lại 8-bit (chế độ 2) thiết lập giá trị nạp lại (cho TH1) để tạo tốc độ truyền Như ta biết trước đây, 8051 chia tần số thạch anh cho 12 để lấy tần số chu kỳ máy Bộ UART truyền thông nối tiếp 8051 lại chia tần số chu kỳ máy cho32 lần trước dùng định thời Timer1 để tạo tốc độ baud: 2.3.1 Nhân đôi tốc độ baud 8051 Có hai cách để tăng tốc độ baud truyền liệu 8051: Sử dụng tần số thạch anh cao Thay đổi bit ghi điều khiển công suất PCON(Power Control) DL –i timer 1gister đủ byten song byte D7 SM0D D0 – – – GF0 GF0 PD IDL Hình 9: Thanh ghi PCON Phương án không khả thi nhiều trường hợp tần số thạch anh hệ thống cố định Do vậy, ta tập trung thăm dị phương án 2: nhân đơi tốc độ baud phần mềm 8051 với tần số thạch anh không đổi Điều thực nhờ ghi PCON, ghi bit Trong bit có số bit khơng dùng để điều khiển công suất 8051 Bit dành cho truyền thông nối tiếp bit D7 (bit SMOD) Khi 8051 bật nguồn bit SMOD ghi PCON mức thấp (0) Chúng ta đặt lên phần mềm nhân đôi tốc độ baud Để xác định giá trị cài đặt TH1 để tạo tốc độ baud định, sử dụng phương trình sau (giả sử bit PCON.7=0): TH1 = 256 – ((Crystal / (12*32)) / Baud) = 256 – ((Crystal / 384) / Baud) (1) Nếu PCON.7=1 tốc độ truyền tăng gấp đơi, phương trình trở thành: TH1 = 256 – ((2*Crystal / (12*32)) / Baud) = 256 – ((Crystal / 192) / Baud) (2) Ví dụ 1: Nếu có tinh thể thạch anh tần số 11.059Mhz muốn cấu hình cho cổng nối tiếp đạt tốc độ 19200 baud, ta sử dụng phương trình 1: TH1 = 256 – ((Crystal / 384) / Baud) TH1 = 256 – ((11059000/384) / 19200) TH1 = 256 – ((28799) / 19200) TH1 = 256-1,5 = 254,5 Như bạn thấy: để có tốc độ 19200 baud tinh thể thạch anh 11.059Mhz ta phải cài đặt TH1 giá trị 254,5 Nhưng giá trị ghi lại số nguyên Nếu thiết lập 254, có tốc độ 14400 baud thiết lập 255, có tốc độ 28800 baud Như dường cài đặt xác tốc độ baud ?!! L Nhưng ta lại có cách khác để cài đặt tốc độ 19200 baud.J Chúng ta đơn giản cần đặt bit PCON.7=1 (bit SMOD) Khi ta tăng gấp đôi tốc độbaud sử dụng phương trình đề cập Vì có: TH1 = 256 – ((Crystal / 192) / Baud) TH1 = 256 – ((11059000/192) / 19200) TH1 = 256 – ((57.699) / 19.200) TH1 = 256 – = 253 Vậy: để có tốc độ 19200 baud với tinh thể thạch anh tần số11.059MHz phải: Cấu hình chế độ Serial Port1hoặc Cấu hình Timer 1ở chế độ 2(8-bit tự động nạp lại) Cài đặt TH1 giá trị 253(FDH) Set bit PCON.7=1(SMOD) để tăng gấp đôi tốc độ truyền (19200 baud) 2.2.4 Lập trình 8051 để truyền liệu nối tiếp Để lập trình 8051 truyền byte ký tự nối tiếp cần phải thực bước sau đây: Nạp ghi TMODgiá trị 20H: báo sử dụng Timer1 chế độ để thiết lập chế độ baud Nạp ghi TH1các giá trị phù hợp để thiết lập chế độ baud truyền liệu nối tiếp Nạp ghi SCONgiá trị 50H báo chế độ nối tiếp để đóng khung bit liệu, bit Start bit Stop Bật TR1=1để khởi động Timer1 Xoá bit cờ truyền liệu: TI=0 Byte ký tự cần phải truyền ghi vào SBUF Bit cờ truyền TIđược kiểm tra vòng lặp để đợi đến lúc liệu truyền xong (cờ TI=1) Để truyền ký tự quay trở bước 2.2.5 Lập trình 8051 để nhận liệu nối tiếp Để lập trình 8051 nhận byte ký tự nối tiếp phải thực bước sau đây: Nạp giá trị 20Hvào ghi TMOD: báo sử dụng Timer1, chế độ (8 bit, tự động nạp lại) để thiết lập tốc độ baud Nạp TH1các giá trị phù hợp để thiết lập tốc độ baud Nạp giá trị 50Hvào ghi SCON để báo sử dụng chế độ truyền nối tiếp 1: liệu đóng gói bit liệu, bit Start bit Stop Bật TR1=1để khởi động Timer1 Xoá cờ nhận RI: RI=0 Bit cờ nhận RIđược kiểm tra vòng lặp để đảm bảo toàn ký tự nhận đủ (khi RI=1) Khi RIđược thiết lập SBUF có byte Các nội dung cần đọc để tránh mát Để nhận ký tự quay trở bước Hãy quan sát ví dụ sau để thực hành: Ví dụ : Hãy lập trình cho 8051 để nhận byte liệu nối tiếp tốc độ 9600 baud bật Led Port tương ứng: Máy tính gửi xuống số 1: Led sáng, số 2: Led sáng, … , số 3: Led1 tắt, số : led tắt Đây code : 1 1 2 2 3 #include void uartinit() { SM0=0; SM1=1; TMOD=0X20; TH1=0XFD; TR1=1; TI=1; REN=1; } void uart_write(char c) { while(TI==0); TI=0; SBUF=c; } char uart_read_data() { return RI; } char uart_read() { RI=0; return SBUF; } void uart_write_text(char * str) { unsigned char i=0; while(str[i]!=0) { uart_write(str[i]); i++; } } void main() { P3_2=P3_3=0; uartinit(); while(1) { if( uart_read_data()) { if(uart_read()=='1') { P3_2=1; } if(uart_read()=='2') { P3_3=1; } if(uart_read()=='3') { P3_2=0; 3 4 4 4 5 5 5 5 6 } if(uart_read()=='4') { P3_3=0; } } } } Các bạn tạo project: copy code vào tạo file mô hình nạp code vào: Chúc bạn thành công nhớ Trao đổi học tập ... tiếp (bit 0) SM1 9Eh Xác định chế độ cổng nối tiếp (bit 1) SM2 9Dh Cho phép truyền thông đa xử lý REN 9Ch Bit cho phép nhận TB8 9Bh Sử dụng chế độ RB8 9Ah Sử dụng chế độ TI 99 h Cờ truyền: bật... 384) / Baud) TH1 = 256 – ((110 590 00/384) / 192 00) TH1 = 256 – ((28 799 ) / 192 00) TH1 = 256-1,5 = 254,5 Như bạn thấy: để có tốc độ 192 00 baud tinh thể thạch anh 11.059Mhz ta phải cài đặt TH1 giá... while(str[i]!=0) { uart_ write(str[i]); i++; } } void main() { P3_2=P3_3=0; uartinit(); while(1) { if( uart_ read_data()) { if (uart_ read()==''1'') { P3_2=1; } if (uart_ read()==''2'') { P3_3=1; } if (uart_ read()==''3'')