Bài giảng Vi điều khiển - Chương 8: Các bộ định thời và cổng nối tiếp
Bạn đang xem tài liệu "Bài giảng Vi điều khiển - Chương 8: Các bộ định thời và cổng nối tiếp", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_vi_dieu_khien_chuong_8_cac_bo_dinh_thoi_va_cong_no.pdf
Nội dung text: Bài giảng Vi điều khiển - Chương 8: Các bộ định thời và cổng nối tiếp
- CÁC BỘ ĐỊNH THỜI VÀ CỔNG NỐI TIẾP Microcontroller Chapter 8 Ngo Nhu Khoa Department of Computer Engineering DCE ThaiNguyen University of Technology
- 1. Hoạt động bộ định thờimode 1 z Là bộ đếm 16 bit. –Nạp vào bộ đếm 1 số và lập TR để bắt đầu đếm – Khi bộ đếm vượt qua giá trị đếm lớn nhất và trở về giá trị 0x0000, nó sẽ lập cờ TF và phát sinh một ngắt TF nếu được cho phép Xtal Divide TH TL TF Oscillator by 12 TF=1 if TH:TL goes from TR 0xFFFF to 0x0000 10/1/2005 2 DCE
- 2. Đo giá trị thời gian z Bộ định thời có thể được sử dụng để đo khoảng thời gian đã trôi qua –Hữu ích cho việc lập lịch các tác vụ –Tương tự như chức năng “cron” – Không chính xác như 1 RTC, nhưng rẻ hơn nhiều! z Xung đồng hồ của bộ định thời là 1/12 xung nhịp của 8051. –xung nhịp của 8051 là 11.0592MHz Dxung nhịp của bộ Timer là 921.6KHz –Thời gian của 1 chu kỳ “tăng 1 - count” là 1/921.6K = 1.085us –Thời gian tương ứng với chuỗi các số đếm được đến khi quay về 0 là: số đếm x 1.085us z Vd: Bộ định thời được nạp giá trị 0xFFF2 – Số đếm để quay trở lại về 0x0000 là 0xFFFF-0xFFF2 +1 = 14 –Thời gian trôi qua là = 14 x 1.085us 10/1/2005 3 DCE
- 2. Đo giá trị thời gian z Làm thế nào để tính toán được các giá trị nạp vào ban đầu để nhận được 1 koảng thời gian trễ T theo yêu cầu? – Chia T cho 1.085us để nhận được n – Tìm m = 65536 – n – Chuyển m sang hệ hex, m = 0xUUVV –Nạp TH C 0xUU và TL C 0xVV z Với thời gian trễ lớn hơn? – Sử dụng vòng lặp lồng nhau –Sử dụng RTC 10/1/2005 4 DCE
- 3. Các chế độ khác của bộ định thời z Mode 0 – Hoàn toàn giống như Mode1, nhưng nó là 1 bộ định thời 13bit –Chuỗi các số đếm, từ 0x0000 đến 0x1FFF z Mode 2 – bộ định thời 8 bit, tự động nạp lại –nạp giá trị đếm vào thanh ghi TH và kích hoạt bộ định thời – 8051 sẽ nạp vào TL giá trị trong TH (TL C TH) – Khi TL tràn và trở về 0x00, bộ định thời sẽ dựng cờ TF (và ngắt xảy ra) – Sau khi cờ TF bị xoá bởi lệnh trong ISR, TL sẽ được nạp lại một cách tự động với giá trị trong TH và 1 chu kỳ mới lại tiếp tục 10/1/2005 5 DCE
- 4. Sử dụng làm bộ đếm z Bộ đếm là thiết bị xác định có bao nhiêu sự kiện đã xảy ra – Bao nhiêu bit 1 trong 1 chuỗi bit? – Bao nhiêu sản phẩm đã đi qua bộ cảm biến trong 1 dây chuyền lắp ráp? z Các bộ đếm tăng giá trị đếm của chúng khi nhận được 1 tín hiệu (xung đếm) z Các bộ định thời của 8051 có thể phục vụ như các bộ đếm – Bit C/T trong thanh ghi TMOD phải được đặt bằng 1 để cho phép thực hiện hoạt động đếm – Hai chân của chip 8051 nhận các xung đếm: z P3.4 (T0, chân 14) : xung đếm ngoài cho Timer0 z P3.5 (T1, chân 15) : xung đếm ngoài cho Timer1 10/1/2005 6 DCE
- Ví dụ về bộ đếm z Đếm các xung trên chân của bộ đếm T1 (P3.5) và hiển thị giá trị đếm trên P2. Bộ đếm ở mode 2 START: mov TMOD, #01100000B ;counter 1, mode 2, C/T=1 mov TH1, #0 ;đếm từ 0x00 to 0xFF setb P3.5 ;cấu hình cho P3.5 vào AGAIN: setb TR1 ;kích hoạt bộ đếm BACK: mov A, TL1 ;đọc giá trị củaTL1 mov P2, A ;hiển thị nó ở P2 jnb TF1, back ;thăm dò TF1, có thể dùng INT1 clr TR1 ;dừng bộ đếm clr TF1 ;xoá cờ TF1 sjmp AGAIN ;while(1) 10/1/2005 7 DCE
- 6. Các bộ định thời: Cổng ngoài z Cổng ngoài cung cấp tính thuận tiện cho việc điều khiển bộ định thời với 1 thiết bị ngoài –Có thể sử dụng các phím bấm để kích hoạt hoặc loại bỏ bộ định thời – Phím Snooze trong 1 đồng hồ dùng 8051! z Lập GATE=1 trong TMOD, sau đó bộ định thời có thể được điều khiển từ 1 cổng ngoài – Chân P3.2 (INT0) cho Timer0 – Chân P3.3 (INT1) cho Timer1 z Với GATE=1, bộ định thời được kích hoạt nếu –TRx được lập bởi phần mềm(setbTR0) – và, INT0 (Pin P3.2) phải được kéo lên mức cao bởi phần cứng 10/1/2005 8 DCE
- 6. Truyền thông nối tiếp z Truyền dữ liệu nối tiếp và sonng song là 2 cơ chế đối ngược nhau z Các các chế độ: Simplex, Duplex and half-Duplex z Synchronous, Asynchronous, UART, USART z Khung truyền – Start bit, Stop bit, mark, space – Start bit, LSB, MSB, Stop bit –Tuỳ chọn bit parity bit –Có thể có 1 hoặc 2 bit Stop z Tốc độ truyền dữ liệu – Bps, baud z Giao thức RS232 – Không tương thích với các mức TTL (-3 đến –25 với mức1 và +3 đến+25 với mức0) 10/1/2005 9 DCE
- 7. Các tín hiệu của chuẩn RS232 z RS232 có nhiều đường tín hiệu, nhưng phần lớn không được sử dụng trong hệ vi điều khiển z Trong chế độ không bắt tay, chỉ có 3 tín hiệu – Pin2 : RxD – received data – Pin3 : TxD – transmitted data – Pin5 : GND z Đối với sự giao tiếp giữa 8051 với cổng nối tiếp của PC (COMx) connection, sử dụng theo quy tắc: –RxDcủa 8051 nối vớiTxDcủaPC –TxDcủa 8051 nối vớiRxDcủaPC –GND vớiGND –Cần phải thiết lập chế độ truyền để sử dụng phần mềm điều khiển luồng (XON/XOF) 10/1/2005 10 DCE
- 8. Mức logic trong giao tiếp RS232 z RS232 sử dụng các mức logic không tương thích với TLL z Cần các bộ biến đổi mức để giao tiếp giữa 8051 với giao thức RS232 z Thường sử dụng MAX232, MAX233 cho mục đích này – Hai kênh kép – Đơn nguồn, +5V – MAX233 không cần các tụ điện ngoài 10/1/2005 11 DCE
- 9. Cổng nối tiếp của 8051 z 8051 có 1 bộ UART nội –Tốc độ truyền được thiết lập bởi bộ định thời Timer1 z Các thanh ghi điều khiển – SBUF : Serial Buffer Register z Dữ liệu được chuyển từ SBUF đến chân Tx-ed để truyền z Dữ liệu nối tiếp Rx-ed được lưu trữ bởi 8051 trong thanh ghi SBUF – SCON : Serial Control Register z Lập trình xác lập chế độ (start bit, stop bit, data bits length) –Chỉ chế độ 1 (8, 1, 1) là được quan tâm, các chế độ khác gần như không sử dụng z Cho phép/không phép nhận z RI và TI, là các ngắt nhận và ngắt truyền 10/1/2005 12 DCE
- 10. Thiết lập tốc độ truyền z Timer 1 là bộ điều khiển thời gian cho cổng nối tiếp của 8051 z Xung nhịp cho Timer1 trong UART là – XTAL /12 /32 = 28,800Hz (với XTAL = 11.0592MHz) –Thiết lậpSMOD (bit 7 của thanh ghi PCON) để lập trình cho 8051 để sử dụng bộ chia 1/16 z XTAL / 12 / 16 = 56,700Hz z Thực tế, tần số này gấp đôi tốc độ truyền z Bộ định thời Timer1 phải được lập trình: – Mode 2, chế độ 8 bit, tự động nạp lại –Nạp vào thanh ghi TH1 giá trị yêu cầu z Các giá trị của TH – Tốc độ: 9600 = 28800/3 D TH1 = -3 = 0xFD –Tốc độ: 2400 = 28800/12 D TH1 = -12 = 0xF4 10/1/2005 13 DCE
- 11. Thanh ghi SCON z SCON.0 = RI (Receive interrupt flag) – Cờ ngắt nhận. 1 byte hợp lệ được nhận trong SBUF z SCON.1 = TI (Transmit interrupt flag) –Cờ ngắt truyền. 1 Byte trong SBUF đã được truyền thành công. z SCON.4 = REN (Receive enable) – Cho phép nhận. Lập bằng 1 để cho phép nhận, xoá sẽ chỉ cho phép truyền. z SCON.7:SCON.6 = SM0:SM1 –Thiết lập chế độ – 01 = Mode 1 là chế độ được sử dụng rộng rãi nhất z 8bit data, 1start bit and 1 stop bit z Tất cả các bit khác đều được đặt về 0 10/1/2005 14 DCE
- 12. Ví dụ 1: Truyền 1 ký tự z Truyền mã ASCII của ký tự “A” ở chế độ nối tiếp, với tốc độ 9600 một cách liên tục START: mov TMOD, #20H ;T1 is mode2 mov TH1, #-3 ;9600 baud mov SCON, #50H ;8b, 1stop, 1start, REN enabled setb TR1 ;start T1 AGAIN: mov SBUF, #’A’ ;letter A is transmitted HERE: jnb TI, HERE ;poll TI until all the bits are ;transmitted clr TI ;clear TI for the next character sjmp AGAIN ;while(1) 10/1/2005 15 DCE
- 12. Ví dụ 2: Nhận dữ liệu z Nhận các bytes nối tiếp và hiển thị chúng ở cổng, một cách liên tục. START: mov TMOD, #20H ;T1 in mode 2 mov TH1, #-3 ;9600 baud mov SCON, #50H ;8b, 1start, 1stop setb TR1 ;start T1 HERE: jnb RI, HERE ;wait until one byte is Rx-ed mov A, SBUF ;read the received byte from ;SBUF mov P1, A ;display on P1 clr RI ;ready to Rx next byte sjmp HERE ;while (1) 10/1/2005 16 DCE
- 13. Ngắt của cổng nối tiếp z Sử dụng cổng nối tiếp với các ngắt của nó là cách thức sử dụng được mong đợi của nhà thiết kế. z Cả hai cờ RI và TI đều lập nên ngắt nối tiếp (S0), nếu nó được kích hoạt. z Trường hợp đơn giản – Truyền dữ liệu được thực hiện theo phương thức hỏi vòng, dựa trên cờ thăm dò TI (Poll TI flag) còn nhận dữ liệu được điều khiển bởi ngắt –Truyền dữ liệu được điều khiển bởi ngắt còn nhận dữ liệu được thực hiện theo phương thức hỏi vòng dựa vào cờ RI. z Trong các trường hợp trên, ISR của S0 sẽ kiểm tra cờ thích hợp và thực hiện công việc tương ứng là Copy dữ liệu đến thanh ghi SBUF hay từ thanh ghi SBUF. 10/1/2005 17 DCE
- 13. Ngắt của cổng nối tiếp z Trường hợp chung – 8051 ở trong chế độ full-duplex, có nghĩa là việc nhận và truyền dữ liệu được thực hiện một cách liên tục –Cả việc truyền và nhận được điều khiển bởi ngắt z Viết thường trình phục vụ ngắt ISR cho S0 sao cho: –ISR đầu tiên phải kiểm tra một trong các cờ RI và TI để xác định cờ nào đã gây ra ngắtS0 –Nếu RI được lập, thì đọc dữ liệu từ SBUF rồi lưu lại và xoá cờ RI –NếuTI được lập, thì copy ký tự kế tiếp được truyền vào SBUF và xoá TI. 10/1/2005 18 DCE
- 14. Ví dụ : Trường hợp đơn giản z 8051 nhận dữ liệu từ P1 và gửi nó đến P2 một cách liên tục, trong khi vẫn đang nhận dữ liệu từ cổng nối tiếp. Dữ liệu từ cổng nối tiếp được hiển thị ở cổng P0 org 0 org 100H ljmp MAIN ;avoid the IVT SERIAL: jb TI, TRANS org 23H ;serial port ISR mov A, SBUF ljmp SERIAL ;copy received org 30H ;data MAIN: mov P1, #0FFH ;P1 as input port mov P0, A mov TMOD, #20 ;T1 in mode 2 ;display in on P0 mov TH1, #-3 ;9600 baud clr RI ;clear RI mov SCON, #50H; 8b, 1start, 1stop RETI mov IE, #10010000B ;enable S0 interrupt TRANS: clr TI ;do nothing setb TR1 ;enable T1 RETI BACK: mov A, P1 ;ISR does mov P2, A ;not handleTX sjmp BACK end 10/1/2005 19 DCE