Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51
1
CHƯƠNG 4: CÁC CHỨC NĂNG CỦA HỌ VI ĐIỀU KHIỂN
MCS-51 I. TIMER
1. Giới thiệu
- Một bộ đònh thời (timer) là một chuỗi các Flip Flop (FF) với mỗi FF là một mạch chia
2. Chuỗi này nhận một tín hiệu ngõ vào làm xung clock kích cho tầng đầu tiên, ngõ ra của tầng
đầu lại trở thành nguồn xung clock cho tầng kế tiếp. Ngõ ra của tầng cuối cùng làm xung clock
cho một FF báo tràn timer hay còn gọi là cờ tràn (overflow flag). Cờ tràn này sẽ được kiểm tra
bởi phần mềm hay tạo ra một ngắt (interrupt). Hình 4.1 minh họa một timer đơn giản 3-bit.
- Giá trò nhò phân trong các FF của timer được dùng để tính số xung clock (số chu kì) của
tín hiệu ngõ vào từ khi timer bắt đầu đếm.
Hình 4.1
- 8051/8031 có 2 timer 16 bit:
+ Timer 0: số đếm chứa trong thanh ghi TH0 (byte cao) và TL0 (byte thấp)
+ Timer 1: số đếm chứa trong thanh ghi TH1 (byte cao) và TL1 (byte thấp)
Ngoài ra, các chip 8032/8052 còn có thêm timer 2.
- Các timer chỉ đếm lên (0000H ÷ FFFFH). Khi số đếm tràn từ FFFFH xuống 0000H, cờ
tràn sẽ được đặt lên 1.
2. Các thanh ghi của timer:
a. Thanh ghi chế độ đònh thời (TMOD):
MSB LSB
Gate
T/C
M1 M0 Gate
LSB MSB
Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51
2
b. Thanh ghi điều khiển đònh thời (TCON):
MSB LSB
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer
Interrupt
- Chứa các bit điều khiển và trạng thái của timer 0 và 1 ở 4 bit cao, 4 bit thấp được dùng
cho chức năng ngắt (interrupt).
- Được đònh đòa chỉ bit.
- Chức năng từng bit:
+ TFx: cờ tràn của timer x (x là 0 hay 1)
+ TRx = 0: không cho phép timer chạy.
TRx = 1: cho phép timer chạy.
3. Điều khiển các bộ đònh thời
Hình 4.2
-
T/C
(Counter/Timer):
+
T/C
= 0: timer nhận xung clock từ bộ dao động nội (sau khi qua bộ chia 12).
→ Ứng dụng: thường dùng cho việc đònh thời một khoảng thời gian (mỗi số đếm
tương ứng với 1 chu kỳ máy).
+ Gate = 1: việc điều khiển timer x phụ thuộc vào TRx và
xINT
.
TRx = 1 và
xINT
= 1: cho phép timer chạy.
→ Ứng dụng: thường dùng để đo độ rộng xung (thời gian xung ở mức cao) đưa
vào ở chân
xINT
. Độ rộng xung tương ứng với số đếm trong THx/TLx.
4. Các chế độ đònh thời
a. Chế độ 0
- Xác lập M1M0 = 00
- Là chế độ đònh thời 13-bit tương thích với bộ vi điều khiển 8048 trước đó. Chế độ này
thường ít dùng.
b. Chế độ 1
- Xác lập M1M0 = 01
- Là chế độ đònh thời 16-bit: số đếm 16-bit chứa trong cặp thanh ghi THx/TLx → khoảng
đếm tối đa là 65536 chu kì máy.
- Giá trò bắt đầu đếm được nạp vào THx và TLx. Khi timer tràn, để nạp lại giá trò bắt
đầu đếm cần phải dừng timer.
Ví dụ 1.1: Viết 1 đoạn chương trình khởi động timer 0 ở chế độ 1 và dùng timer 0 để tạo ra 1
xung mức cao rộng 1ms ở chân P1.0. Giả sử dùng thạch anh 12MHz.
Giải:
MOV TMOD,#00000001B ; khởi động timer 0 ở chế độ 1
CLR P1.0 ; xóa P1.0
MOV TH0,#HIGH(-1000) ; nạp byte cao của -1000 (FCH) vào TH0
MOV TL0,#LOW(-1000) ; nạp byte thấp của -1000 (18H) vào TL0
SETB TR0 ; cho timer 0 chạy
SETB P1.0 ; đặt P1.0 lên mức cao
số
lần lặp là 4.
Chương trình:
DELAY_200MS:
MOV TMOD,#10H
MOV R7,#4
LOOP:
MOV TH1,#HIGH(-50000)
MOV TL1,#LOW(-50000)
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
DJNZ R7, LOOP
RET
Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51
4
Ví dụ 1.3: Viết chương trình dùng timer tạo sóng vuông đối xứng có tần số 1KHz trên chân
P1.0.
Giải:
f = 1KHz
→
chu kỳ
s1000s10
10
1
f
1
H
= t
L
= 500T
M
Chương trình: (sử dụng timer 0)
ORG 0
MOV TMOD,#01H
LOOP:
MOV TH0,#HIGH(-500)
MOV TL0,#LOW(-500)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
CPL P1.0
SJMP LOOP
END
c. Chế độ 2
- Xác lập M1M0 = 10
- Là chế độ đònh thời 8 bit tự động nạp lại.
+ TLx: bộ đếm 8 bit
→
khoảng đếm tối đa là 256 chu kì máy.
+ THx: lưu giá trò bắt đầu đếm được cài đặt.
- Mỗi khi timer tràn từ FFH xuống 00H, không chỉ cờ tràn được đặt lên 1 mà giá trò lưu
trong THx còn được tự động nạp vào cho TLx (không cần dừng timer) và việc đếm sẽ tiếp tục
từ giá trò này cho đến khi xảy ra lần tràn kế tiếp rồi lặp lại…
Ví dụ 1.4: Viết chương trình con delay 100
μ
Lưu ý: thông thường lệnh khởi động chế độ timer được đặt trong chương trình chính.
Ví dụ 1.5: Viết chương trình dùng timer 1 để tạo sóng vuông đối xứng, tần số f = 10KHz tại
chân P1.7 (giả sử f
OSC
= 6MHz).
Giải:
f = 10KHz
→
chu kỳ
s100s10
10.10
1
f
1
T
4
3
μ====
−
→
t
H
= t
L
= 50
μ
s
Tần số thạch anh:
f
END
4. Chế độ 3
- Xác lập M1M0 = 11
- Là chế độ tách timer: timer 0 16-bit được chia thành 2 timer 8-bit riêng lẽ TL0 và TH0
với cờ tràn tương ứng là TF0 và TF1 (TF1 lúc này không còn là cờ tràn của timer 1 nữa).
- Timer 1 không hoạt động ở chế độ 3 nhưng có thể được dùng trong các chế độ khác
(không sử dụng cờ tràn TF1).
Chú ý: Các kỹ thuật thường được dùng để tạo các khoảng thời gian đònh thời khác nhau
Khoảng thời gian (chu kỳ máy) Kỹ thuật
≈
10 Điều chỉnh phần mềm
256 Bộ đònh thời 8 bit tự động nạp lại
65536 Bộ đònh thời 16 bit
Không giới hạn Bộ đònh thời 16 bit + các vòng lặp
II. PORT NỐI TIẾP
1. Giới thiệu
- Chức năng cơ bản của port nối tiếp là chuyển đổi dữ liệu từ song song thành nối tiếp
khi phát và từ nối tiếp thành song song khi thu.
- Truy xuất port nối tiếp thông qua 2 chân:
+ RxD (P3.0): chân thu của port nối tiếp.
+ TxD (P3.1): chân phát của port nối tiếp.
- Có khả năng hoạt động song công (full duplex), tức là thu và phát đồng thời. Ngoài ra
port nối tiếp còn có chức năng đệm dữ liệu khi thu cho phép một ký tự được nhận và lưu giữ
trong bộ đệm thu trong khi ký tự tiếp theo được nhận vào. Nếu vi điều khiển đọc ký tự thứ nhất
trước khi ký tự thứ hai được thu đầy đủ, dữ liệu sẽ không bò mất.
- Các thanh ghi liên quan đến port nối tiếp:
+ SCON: chứa các bit trạng thái và các bit điều khiển port nối tiếp.
+ SBUF: là bộ đệm của port nối tiếp. Thực tế, port nối tiếp gồm 2 bộ đệm riêng
cho phát và thu.
Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51
CLK
D
Thanh ghi dòch
CLK
SBUF
(read-only)
TXD
(P3.1)
RXD
(P3.0)
Xung clock
tốc độ baud
(thu)
Xung clock
tốc độ baud
(phát)
Bus nội 8051
Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51
7
+ TI: cờ ngắt phát. Cờ này được đặt lên 1 bằng phần cứng khi phát xong 1 ký tự
(để báo bộ đệm phát đã rỗng), được xóa bằng phần mềm.
+ RI: cờ ngắt thu. Cờ này được đặt lên 1 bằng phần cứng khi thu xong 1 ký tự (để
báo bộ đệm thu đã đầy), được xóa bằng phần mềm.
3. Các chế độ hoạt động của port nối tiếp
a. Chế độ 0 (thanh ghi dòch 8 bit)
- Xác lập SM0 SM1 = 0 0
- Dữ liệu nối tiếp được thu/phát thông qua chân RxD.
- Chân TxD phát xung clock để dòch bit.
đầu bit Start).
- Khi 1 bit Start hợp lệ được phát hiện, bit Start được bỏ qua và 8 bit dữ liệu được nhận
tuần tự vào thanh ghi dòch bit của port nối tiếp. Sau khi thu xong cả 8 bit, các điều sau sẽ xảy ra:
+ Bit thứ 9 (bit Stop) được đưa đến bit RB8 trong SCON.
8051
TXD (P3.1)
RXD (P3.0)
CLOCK
Data
Thanh ghi dòch
8 ngõ ra mở rộng
Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51
8
+ 8 bit data được nạp vào SBUF (thu).
+ Cờ ngắt thu RI được đặt lên 1 bởi phần cứng.
Tuy nhiên các điều trên chỉ xảy ra nếu tồn tại các điều kiện sau:
+ REN = 1
+ RI = 0 (báo bộ đệm thu chưa đầy).
+ SM2 = 0 hoặc SM2 = 1 và bit Stop nhận được bằng 1.
c. Chế độ 2 (UART 9 bit, tốc độ baud cố đònh)
- Xác lập SM0 SM1 = 1 0
- Port nối tiếp hoạt động ở chế độ UART 9 bit có tốc độ baud cố đònh.
- Truyền 11 bit:
1 bit Start + 8 bit data + bit data thứ 9 + 1 bit Stop
(luôn mức 0) (bit LSB trước) (lập trình được) (luôn mức 1)
- Tốc độ baud = f
OSC
/ 64 (nếu bit SMOD = 0)
TI = 1 ?
Xóa cờ TI
Ghi ra SBUF
RET
YY
NN