CÁC BỘ ĐỊNH THỜI VÀ CỔNG NỐI TIẾP

Microcontroller

Chapter 8

Ngo Nhu Khoa

Department of Computer Engineering

ThaiNguyen University of Technology

DCE

1. Hoạt động bộ định thời mode 1

(cid:122) 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ị

TH TL

TF

Divide by 12

Xtal Oscillator

0x0000, nó sẽ lập cờ TF và phát sinh một ngắt TF nếu được cho phép

TR

TF=1 if TH:TL goes from 0xFFFF to 0x0000

DCE

10/1/2005

2

2. Đo giá trị thời gian

(cid:122) Bộ định thời có thể được sử dụng để đo khoảng thời gian đã trôi

– 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!

(cid:122) 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 (cid:68)xung 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

(cid:122) Vd: Bộ định thời được nạp giá trị 0xFFF2

qua

– Thời gian trôi qua là = 14 x 1.085us

– Số đếm để quay trở lại về 0x0000 là 0xFFFF-0xFFF2 +1 = 14

DCE

10/1/2005

3

2. Đo giá trị thời gian ...

(cid:122) 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

(cid:122) Với thời gian trễ lớn hơn?

– Sử dụng vòng lặp lồng nhau

– Nạp TH (cid:67) 0xUU và TL (cid:67) 0xVV

– Sử dụng RTC

DCE

10/1/2005

4

3. Các chế độ khác của bộ định thời

(cid:122) 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

(cid:122) 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 (cid:67) 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

DCE

10/1/2005

5

4. Sử dụng làm bộ đếm

(cid:122) 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?

(cid:122) Các bộ đếm tăng giá trị đếm của chúng khi nhận được 1 tín hiệu

(cid:122) 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:

(cid:122) P3.4 (T0, chân 14) : xung đếm ngoài cho Timer0

(cid:122) P3.5 (T1, chân 15) : xung đếm ngoài cho Timer1

(xung đếm)

DCE

10/1/2005

6

Ví dụ về bộ đếm

(cid:122) Đế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

;cấu hình cho P3.5 vào ;kích hoạt bộ đếm

;đọc giá trị của TL1 ;hiển thị nó ở P2

;thăm dò TF1, có thể dùng INT1

setb P3.5 AGAIN: setb TR1 BACK: mov A, TL1 mov P2, A jnb TF1, back clr TR1 ;dừng bộ đếm

clr TF1 sjmp AGAIN ;xoá cờ TF1 ;while(1)

DCE

10/1/2005

7

6. Các bộ định thời: Cổng ngoài

(cid:122) 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

(cid:122) 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

(cid:122) Với GATE=1, bộ định thời được kích hoạt nếu

– Phím Snooze trong 1 đồng hồ dùng 8051!

– TRx được lập bởi phần mềm (setb TR0) – và, INT0 (Pin P3.2) phải được kéo lên mức cao bởi phần cứng

DCE

10/1/2005

8

6. Truyền thông nối tiếp

(cid:122) Truyền dữ liệu nối tiếp và sonng song là 2 cơ chế đối

ngược nhau

(cid:122) Các các chế độ: Simplex, Duplex and half-Duplex (cid:122) Synchronous, Asynchronous, UART, USART (cid:122) 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

(cid:122) Tốc độ truyền dữ liệu

– Không tương thích với các mức TTL (-3 đến –25 với mức 1 và

– Bps, baud (cid:122) Giao thức RS232

+3 đến +25 với mức 0)

DCE

10/1/2005

9

7. Các tín hiệu của chuẩn RS232

(cid:122) 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 (cid:122) Trong chế độ không bắt tay, chỉ có 3 tín hiệu

(cid:122) Đố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: – RxD của 8051 nối với TxD của PC – TxD của 8051 nối với RxD của PC – GND với GND – Cần phải thiết lập chế độ truyền để sử dụng phần mềm điều

– Pin2 : RxD – received data – Pin3 : TxD – transmitted data – Pin5 : GND

khiển luồng (XON/XOF)

DCE

10/1/2005

10

8. Mức logic trong giao tiếp RS232

(cid:122) RS232 sử dụng các mức logic không tương thích với

TLL

(cid:122) Cần các bộ biến đổi mức để giao tiếp giữa 8051 với

giao thức RS232

(cid:122) 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

DCE

10/1/2005

11

9. Cổng nối tiếp của 8051

(cid:122) 8051 có 1 bộ UART nội

(cid:122) Các thanh ghi điều khiển

– Tốc độ truyền được thiết lập bởi bộ định thời Timer1

(cid:122) Dữ liệu được chuyển từ SBUF đến chân Tx-ed để truyền

(cid:122) Dữ liệu nối tiếp Rx-ed được lưu trữ bởi 8051 trong thanh ghi

SBUF

– SBUF : Serial Buffer Register

(cid:122) 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

(cid:122) Cho phép/không phép nhận

(cid:122) RI và TI, là các ngắt nhận và ngắt truyền

– SCON : Serial Control Register

DCE

10/1/2005

12

10. Thiết lập tốc độ truyền

(cid:122) Timer 1 là bộ điều khiển thời gian cho cổng nối tiếp của

8051

(cid:122) Xung nhịp cho Timer1 trong UART là

– XTAL /12 /32 = 28,800Hz (với XTAL = 11.0592MHz) – Thiết lập SMOD (bit 7 của thanh ghi PCON) để lập trình cho

(cid:122) Các giá trị của TH

– Tốc độ: 9600 = 28800/3 (cid:68) TH1 = -3 = 0xFD – Tốc độ: 2400 = 28800/12 (cid:68) TH1 = -12 = 0xF4

8051 để sử dụng bộ chia 1/16 (cid:122) XTAL / 12 / 16 = 56,700Hz (cid:122) Thực tế, tần số này gấp đôi tốc độ truyền (cid:122) 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

DCE

10/1/2005

13

11. Thanh ghi SCON

(cid:122) SCON.0 = RI (Receive interrupt flag)

– Cờ ngắt nhận. 1 byte hợp lệ được nhận trong SBUF

(cid:122) SCON.1 = TI (Transmit interrupt flag)

(cid:122) SCON.4 = REN (Receive enable)

– Cho phép nhận. Lập bằng 1 để cho phép nhận, xoá sẽ chỉ cho

– Cờ ngắt truyền. 1 Byte trong SBUF đã được truyền thành công.

(cid:122) SCON.7:SCON.6 = SM0:SM1

phép truyền.

(cid:122) 8bit data, 1start bit and 1 stop bit (cid:122) Tất cả các bit khác đều được đặt về 0

– Thiết lập chế độ – 01 = Mode 1 là chế độ được sử dụng rộng rãi nhất

DCE

10/1/2005

14

12. Ví dụ 1: Truyền 1 ký tự

(cid:122) 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:

AGAIN: HERE: mov TMOD, #20H ;T1 is mode2 ;9600 baud mov TH1, #-3 mov SCON, #50H ;8b, 1stop, 1start, REN enabled setb TR1 mov SBUF, #’A’ jnb TI, HERE

;start T1 ;letter A is transmitted ;poll TI until all the bits are ;transmitted ;clear TI for the next character ;while(1) clr TI sjmp AGAIN

DCE

10/1/2005

15

12. Ví dụ 2: Nhận dữ liệu

(cid:122) 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:

HERE:

mov TMOD, #20H mov TH1, #-3 mov SCON, #50H setb TR1 jnb RI, HERE mov A, SBUF

mov P1, A clr RI sjmp HERE ;T1 in mode 2 ;9600 baud ;8b, 1start, 1stop ;start T1 ;wait until one byte is Rx-ed ;read the received byte from ;SBUF ;display on P1 ;ready to Rx next byte ;while (1)

DCE

10/1/2005

16

13. Ngắt của cổng nối tiếp

(cid:122) 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ế.

(cid:122) 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.

(cid:122) 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

(cid:122) 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.

được thực hiện theo phương thức hỏi vòng dựa vào cờ RI.

DCE

10/1/2005

17

13. Ngắt của cổng nối tiếp …

(cid:122) 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

(cid:122) Viết thường trình phục vụ ngắt ISR cho S0 sao cho:

– Cả việc truyền và nhận được điều khiển bởi ngắt

– 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ắt S0

– Nếu RI được lập, thì đọc dữ liệu từ SBUF rồi lưu lại và xoá cờ

RI

– Nếu TI được lập, thì copy ký tự kế tiếp được truyền vào SBUF

và xoá TI.

DCE

10/1/2005

18

14. Ví dụ : Trường hợp đơn giản

(cid:122) 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 100H

;avoid the IVT ;serial port ISR

org 0 ljmp MAIN org 23H ljmp SERIAL org 30H

MAIN: mov P1, #0FFH ;P1 as input port

;9600 baud

SERIAL: jb TI, TRANS mov A, SBUF ;copy received ;data mov P0, A ;display in on P0 clr RI ;clear RI RETI

mov TMOD, #20 ;T1 in mode 2 mov TH1, #-3 mov SCON, #50H; 8b, 1start, 1stop mov IE, #10010000B ;enable S0 interrupt setb TR1

;enable T1

BACK: mov A, P1 mov P2, A sjmp BACK

TRANS: clr TI ;do nothing RETI ;ISR does ;not handleTX end

DCE

10/1/2005

19