DuyTan University
Kỹ thuật Vi xử lý
ĐẠI HỌC DUY TÂN
KHOA CÔNG NGHỆ THÔNG TIN
CHƯƠNG 2
VI ĐIỀU KHIỂN MCS51
Nguyễn Văn Thọ
Khoa Điện tử viễn thông
Đại học Duy Tân – 2010
Nguyen Van Tho – Duy Tan University
GIỚI THIỆU
Các vi bộ điều khiển và các bộ vi xử lý có ba điểm khác
nhau chính sau:
9 Kiến trúc phần cứng
9 Phạm vi ứng dụng
9 Đặc điểm tập lệnh
Các họ vi điều khiển phổ biến
9 Intel 8051
9 PIC16C5x
9 Motorola MC68xxx
9 AVR
9 PSoC
5-2
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
VI ĐIỀU KHIỂN 8051
Hiện nay có hơn 40 cơng ty sản xuất các loại vi điều khiển
khác nhau của họ 8051.
Một số cơng ty có trên 40 version 8051.
Các CORE 8051 có thể được tổ hợp trong các FPGA hay
ASIC.
Trên 100 triệu vi điều khiển 8051 được bán ra mỗi năm.
Họ 8051 gặt hái được rất nhiều thành công và nó cũng
trực tiếp ảnh hưởng đến cấu trúc của các họ vi điều khiển
hiện nay.
5-3
Nguyen Van Tho – Duy Tan University
VI ĐIỀU KHIỂN 8051
8051 thuộc họ vi điều khiển MCS-51.
MCS-51 được phát triển bởi Intel và các nhà sản xuất khác
(như Siemens, Philips) là các nhà cung cấp đứng thứ hai
của họ này.
Tóm tắt một số đặc điểm chính của họ 8051:
•
•
•
•
•
•
•
4K bytes ROM trong
128 bytes RAM trong
4 cổng I/O 8-bit
2 bộ định thời 16 bit
Giao diện nối tiếp
Quản lý được 64K bộ nhớ code bên ngoài
Quản lý được 64K bộ nhớ dữ liệu bên ngoài
5-4
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
SƠ ĐỒ KHỐI 8051
External interrupts
Interrupt
Control
On-chip
ROM for
program
code
Timer/Counter
On-chip
RAM
Timer 1
Timer 0
Counter
Inputs
CPU
OSC
Bus
Control
Serial
Port
4 I/O Ports
TxD RxD
P0 P1 P2 P3
Address/Data
5-5
Nguyen Van Tho – Duy Tan University
CÁC CHÂN CỦA 8051
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
8051
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
EA/VPP
ALE/PROG
PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
5-6
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
CÁC CHÂN CỦA 8051
Vcc (chân 40):
9Cung cấp nguồn cho chip
9+5V
GND (chân 20): đất
XTAL1 & XTAL2 (chân 19, 18)
92 chân cung cấp xung clock ngoài
9Cách 1: dao động dùng thạch anh
9Cách 2: dao động từ nguồn xung clock TTL bên ngoài
9Quan hệ giữa chu kỳ máy và XTAL
5-7
Nguyen Van Tho – Duy Tan University
CÁC CHÂN CỦA 8051
RST (chân 9): reset
9input & kích hoạt mức cao
9Để đảm bảo hoạt động reset xảy ra, xung kích khởi
phải kéo dài ít nhất là 2 chu kỳ máy
9Giá trị các thanh ghi chịu tác động bởi hoạt động reset,
xem bảng trong phần 5 bài giảng
9Mạch reset có chống rung
5-8
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
CÁC CHÂN CỦA 8051
¾ /EA (chân 31): External Access
9/EA nối mass chỉ định rằng code lưu trên bộ nhớ ngoài
9/PSEN & ALE dùng cho ROM ngoài
9Với 8051, 8031, 8032 thì /EA nối Vcc
9“/”: chỉ định tác động mức thấp
¾ /PSEN (chân 29): Program Store Enable
9Output, cho phép truy xuất bộ nhớ chương trình ngồi
9Nối tới chân /OE của ROM/EPROM
9Khi thực thi chương trình ở ROM nội, /PSEN được giữ ở
mức 1
5-9
Nguyen Van Tho – Duy Tan University
CÁC CHÂN CỦA 8051
¾ ALE (pin 30):Address Latch Enable
¾Là chân output cho phép chốt địa chỉ để giải đa hợp (demultiplexing) bus dữ liệu và bus địa chỉ
¾ALE xuất tín hiệu để chốt địa chỉ (byte thấp địa chỉ 16-bit)
vào 1 thanh ghi ngoài trong suốt nửa đầu của chu kỳ bộ nhớ
(memory cycle). Trong nửa chu kỳ bộ nhớ còn lại, P0 sẽ
xuất/nhập dữ liệu
¾ALE có f=1/6fclock
¾Có 1 ngoại lệ: trong thời gian thực thi lệnh MOVX, một
xung ALE bị bỏ qua
¾ Cổng I/O: P0, P1, P2, & P3. Mỗi cổng: 8 chân.
5-10
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
CÁC CỔNG I/O
¾ 4 cổng I/O
Port 0 (chân 32-39)
Port 1 (chân 1-8)
Port 2 (chân 21-28)
Port 3 (chân 10-17)
:P0 (P0.0~P0.7)
:P1 (P1.0~P1.7)
:P2 (P2.0~P2.7)
:P3 (P3.0~P3.7)
Mỗi cổng có 8 chân
Đánh tên P0.X (X=0,1,...,7), P1.X, P2.X, P3.X
Ex:P0.0 là bit 0 (LSB) của P0
Ex:P0.7 là bit 7 (MSB) của P0
8 bits này cấu thành 1 byte
Mỗi cổng có thể được dùng như input hay output
5-11
Nguyen Van Tho – Duy Tan University
TỔ CHỨC BỘ NHỚ
Bộ nhớ chương trình
Bộ nhớ dữ liệu
FFFFh
FFFFh
External
(ngồi)
External
Internal
(trong)
External
(ngồi)
EA=0
0000h
PSEN
EA=1
FFh
Internal
00h
Kiến trúc Harvard
0000h
RD
5-12
WR
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
KHÔNG GIAN BỘ NHỚ RAM NỘI
Byte address
7F 7E 7D 7C 7B 7A 79 78
…
7FH
2F
2E
RAM đa mục
30H
2FH
đích
RAM định địa
chỉ bit
20H
1FH
18H
17H
10H
0FH
08H
07H
00H
Bank 3
…
Bank 2
1F 1E 1D 1C 1B 1A 19 18
Bank 1 (Stack)
17 16 15 14 13 12 11 10
Default Register
Bank for R0-R7
R7
R6
0F 0E 0D 0C 0B 0A 09 08
07 06 05 04 03 02 01 00
20
R5
R4
Bit address
R3
R2
R1
R0
5-13
Nguyen Van Tho – Duy Tan University
GHÉP NỐI VÀ TRUY XUẤT ROM NGOÀI
5-14
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
GHÉP NỐI VÀ TRUY XUẤT RAM NGOÀI
5-15
Nguyen Van Tho – Duy Tan University
CÁC CHẾ ĐỘ ĐỊA CHỈ
Các kiểu định địa chỉ cho phép xác định nguồn và đích của dữ liệu theo
nhiều cách khác nhau tùy tình huống lập trình
¾
Định địa chỉ tức thời :
MOV A, #65H ; đưa giỏ tr 65h vo thanh ghi A
ặ A=65h
ắ
nh a ch thanh ghi
MOV R1, A
; đưa dữ liệu trong thanh ghi A vo thanh ghi R1
ặ R1=A
ắ
nh a ch trc tip
MOV R0, 40H ; lấy dữ liệu tại địa chỉ 40h đưa vào thanh ghi R0
¾
Định địa chỉ gián tiếp
MOV A, @R1 ; lấy dữ liệu tại địa chỉ được chứa trong thanh
ghi R1 đưa vào thanh ghi A
5-16
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
CÁC THANH GHI
5-17
Nguyen Van Tho – Duy Tan University
THANH GHI PSW
Thanh ghi PSW (bit addressable)
C
AC
RS1
RS0
OV
--
P
Cờ nhớ
Cờ nhớ phụ
Available to user for general purpose
Bit chọn dãy thanh ghi 1
Bit chọn dãy thanh ghi 0
Cờ tràn
Dự trữ - User define bit
Cờ chẵn lẻ
PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0
RS0
0
1
0
1
Byte Address of R0-R7
00H-07H
08H-0FH
10H-17H
18H-1FH
RS1
0
0
1
1
D7
F0
D6
D5
Register Bank
0
1
2
3
D4
D3
D2
D1
D0
C
AC
-RS1
RS0
OV
-P
Địa chỉ bit
5-18
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
THANH GHI B
B được dùng với thanh chứa A trong các phép toán
nhân, chia
MUL A,B ; nhân 2 số 8-bit không dấu chứa trong A
& B, KQ 16-bit chứa vào cặp thanh ghi
B:A (B chứa byte cao)
DIV AB
; chia A bởi B, thương số cất trong A, dư
cất trong B
B còn được xử lý như thanh ghi nháp
B được định địa chỉ bit
F7
F6
F5
F4
F3
F2
F1
F0
5-19
Nguyen Van Tho – Duy Tan University
CON TRỎ NGĂN XẾP SP
¾ SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của stack
¾ Muốn stack bắt đầu ở 60H:
• MOV
SP,#5FH
• Thì vùng stack sẽ là 32 byte trên 8051 vì địa chỉ cao
nhất của RAM nội là 7FH
• 5FH được dùng vì SP tăng lên 60H trước khi thao tác
cất vào stack đầu tiên được thực thi
¾ Nếu khơng khởi động SP, nội dung mặc định là 07H
Ỉ thao tác cất vào stack đầu tiên sẽ lưu dữ liệu vào vị trí
nhớ có địa chỉ 08H
5-20
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
CON TRỎ DỮ LIỆU DPTR
DPTR được dùng để truy xuất bộ nhớ chương trình
ngồi hoặc bộ nhớ dữ liệu ngồi
Phần cao và phần thấp của DPTR cũng có thể được
dùng như 2 thanh ghi 8bit (DPH và DPL)
VD:
MOV
A,#55H
MOV
DPTR,#1000H
MOVX
@DPTR,A
83H
DPTR (High)
82H
DPTR (Low)
5-21
Nguyen Van Tho – Duy Tan University
THANH GHI CỔNG I/O
¾ 8051 có 4 thanh ghi cổng I/O : P0, P1, P2, P3
¾ Tất cả port đều được định địa chỉ bit
¾ Để truy cập đến các bit ta dùng cú pháp sau :
<Port name> . <bit>
Ví dụ để xóa bit 4 của cổng P0
CLR P0.4
5-22
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
CÁC THANH GHI KHÁC
¾ THANH GHI ĐỊNH THỜI
8051 có 2 bộ đếm/định thời 16-bit để định các khoảng thời gian hoặc
đếm các sự kiện
Hoạt động của bộ định thời được thiết lập bởi:
• TMOD (Timer Mode Register)
• TCON (Timer Control Register)
¾ THANH GHI PORT NỐI TIẾP
8051 có 1 port nối tiếp để truyền thông với các thiết bị nối tiếp
SBUF (Serial Data Buffer): lưu trữ dữ liệu truyền và nhận
SCON (Serial Port Control Register): chọn chế độ hoạt động
¾ THANH GHI NGẮT
IE (interrupt enable)
IP (interrupt priority
5-23
Nguyen Van Tho – Duy Tan University
TẬP LỆNH
¾Lệnh chuyển dữ liệu
MOV dest, source
; dest = source
Ví dụ : MOV A, #72H
;A=72H
MOV A, R4
;A=62H
MOV B, 7EH
MOV P1, A
;mov A to port 1
Chú ý :
¾
MOV A,#72 ≠ MOV A,72
¾
MOV DPTR, A
¾
MOV #30,A
¾ dest và source khơng được đồng thời là Rn
MOV R1,R2
5-24
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
TẬP LỆNH
¾Truy cập bộ nhớ ROM ngồi
MOVC A, @A + DPTR
MOVC A, @A + PC
¾ Truy cập bộ nhớ RAM ngồi
MOVX A, @Ri
MOVX A, @DPTR
MOVA @Ri, A
MOVX @DPTR, A
¾ Tráo đổi dữ liệu
XCH A, Rn
XCH A, mem
¾Thao tác ngăn xếp
PUSH mem
XCH A, @Ri
POP mem
5-25
Nguyen Van Tho – Duy Tan University
TẬP LỆNH
¾Nhóm lệnh số học
ADD A,Rn
ADDC A,Rn
ADD A,mem
ADDC A,mem
ADD A,@Ri
ADDC A,@Ri
ADD A,#data
ADDC A,#data
SUBB A,Rn
SUBB A,mem
SUBB A,@Ri
SUBB A,#data
INC A
INC Rn
INC mem
INC @Ri
DEC A
DEC Rn
DEC mem
DEC @Ri
MUL AB
; Lấy giá trị trong thanh ghi A nhân với giá trị trong thanh ghi B
; byte thấp của kết quả chứa trong A, byte cao chứa trong B
DIV AB
; Lấy A chia B
; kết quả thương Ỉ A ; số dư Ỉ B
INC DPTR
5-26
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
TẬP LỆNH
¾ Nhóm lệnh logic
ANL A,Rn
ANL A,mem
ANL mem,A
ANL mem,#data
ORL A,Rn
ORL A,mem
ORL mem,A
ORL mem,#data
XRL A,Rn
XRL A,mem
XRL mem,A
XRL mem,#data
ANL A,@Ri
ANL A,#data
ORL A,@Ri
ORL A,#data
XRL A,@Ri
XRL A,#data
CLR A
CPL A
RL A
RLC A
RR A
RRC A
5-27
Nguyen Van Tho – Duy Tan University
TẬP LỆNH
¾Nhóm lệnh xử lý bit
SETB
CLR
Vi dụ : SETB
SETB
SETB
CLRB
bit
bit
C
P0.0
ACC.2
P3.7
ANL C,bit
ORL C, bit
; bit=1
; bit=0
; CY=1
;bit 0 của port 0 =1
;bit 2 của Accumulator =1
;bit 7 của port 3 = 0
; AND cờ C với bit
; OR cờ C với bit
5-28
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
TẬP LỆNH
¾ Lệnh nhảy khơng điều kiện
SJMP rel
;
AJMP Addr11
;
LJMP Addr16
;
¾ Lệnh gọi chương trình con
ACALL addr11
;
LCALL adde16
;
¾ Lệnh trở về từ chương trình con
RET
¾Lệnh trở về từ ngắt
RETI
5-29
Nguyen Van Tho – Duy Tan University
TẬP LỆNH
Lệnh nhảy có điều kiện
JZ rel
Jump if A=0
JNZ rel
Jump if A≠0
DJNZ byte, rel
Decrement & jump if A≠0
CJNE dest, source, rel
Jump if dest ≠ source
JC rel
Jump if CY=1
JNC rel
Jump if CY=0
JB bit, rel
Jump if bit=1
JNB bit, rel
Jump if bit=0
JBC bit, rel
Jump if bit=1 & clear bit
5-30
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH HỢP NGỮ CHO 8051
5-31
Nguyen Van Tho – Duy Tan University
KHN DẠNG CHƯƠNG TRÌNH
Dạng chương trình khơng có ngắt và không khai báo dữ liệu
ORG 00H
; Bắt đầu vùng nhớ chương trình
; các mã lệnh của chương trình
END
; kết thúc chương trình
Dạng chương trình khơng ngắt và có khai báo dữ liệu
ORG 00H
LJMP Main
ORG 20h
; khai báo các hằng số
ORG 30h
; khai báo các ô nhớ đệm (biến)
ORG 100h
Main
; Bắt đầu vùng nhớ chương trình
; các mã lệnh của chương trình
END
; kết thúc chương trình
5-32
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
KHN DẠNG CHƯƠNG TRÌNH
Dạng chương trình sử dụng ngắt
ORG 0H
LJMP MAIN
ORG 03H
JMP EXINTER0
ORG 0BH
JMP COUNTER0
ORG 13H
JMP EXINTER1
ORG 1BH
JMP COUNTER1
MAIN:
; nhảy tới Main
EXINTER0
; external interrupt 0 ; chương trình phục vụ ngắt 0
RETI
; timer 0 interrupt
EXINTER1
; chương trình phục vụ ngắt 1
; external interrupt 0 RETI
COUNTER0
;timer 1 interrupt
; chương trình phục vụ bộ đếm 0
RETI
COUNTER1
; chương trình phục vụ bộ đếm 1
RETI
END
5-33
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH I/O
¾ Xuất dữ liệu ra cổng :
Xuất dữ liệu ra thanh ghi cổng tương ứng
Ví dụ : MOV P1,#54H ; xuất giá trị 54h ra cổng P1
¾Lấy dữ liệu từ cổng :
Đọc thanh ghi cổng tương ứng
Ví dụ : MOV A, P2 ; lấy dữ liệu từ cổng P2 lưu vào A
Chú ý : Một chân là Input thì phải đưa giá trị 1 ra chân đó
trước khi thao tác với nó.
5-34
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH I/O
Ví dụ 1 : Viết chương trình đọc dữ liệu từ cổng P2 vào A, sau
đó cộng 3 vào A mười lần?
GIẢI :
AGAIN:
ORG 00H
MOV P2,#FFH
MOV A, P2
MOV R2, #10
ADD A, #03
DJNZ R2, AGAIN ;repeat until R2=0 (10 lần)
MOV R5, A
END
5-35
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH I/O
Ví dụ 2 : Viết 1 chương trình so sánh R0, R1:
Nếu R0>R1: gửi 1 ra port 2
Else if R0
Else gửi 0 ra port 2
Giải đáp:
NOT_EQ:
R0_NHO_HON:
CJNE R0, 1, NOT_EQ
…
JC
R0_NHO_HON
…
…
;R0=R1
;R0>R1
;R0
5-36
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
TẠO TRỄ (DELAY)
CHU KỲ MÁY :
Chy kỳ máy (machine cycle) là đơn vị đo thời gian
thực thi các lệnh
Tần số dao động của thạch anh cho họ 8051 có thể từ
4MHz đến 30 MHz, tùy thuộc nhà sản xuất. Song thông
thường, loại 11.0592 MHz được dùng nhằm làm cho
các hệ thống dựa trên 8051 tương thích với cổng nối
tiếp của IBM PC.
1 Chu kỳ dao động = 1/f = 0.0904 µs
Với họ 8051, một chu kỳ máy kéo dài 12 chu kỳ dao
động
1 chu kỳ máy = 12 x 0.0904 µs = 1.085µs
5-37
Nguyen Van Tho – Duy Tan University
TẠO TRỄ (DELAY)
Tìm thời gian trễ cho chương trình con say đây, (với
tần số dao động thạch anh là 11.0592 MHz)
DELAY:
HERE:
MOV R3,#250
NOP
NOP
NOP
NOP
DJNZ R3,HERE
RET
;
;
;
;
;
;
;
Answer: [250x(1+1+1+1+2)+2]x1.085 us=1629.67 us
1 MC
1 MC
1 MC
1 MC
1 MC
2 MC
1 MC
5-38
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
TẠO TRỄ (DELAY)
Đoạn chương trình tạo trễ 500ms
D1:
D2:
MOV
MOV
DJNZ
MOV
DJNZ
DJNZ
MOV
MOV
DJNZ
MOV
DJNZ
DJNZ
R1, #250
R0, #250
R0, $
R0, #250
R0, $
R1, D1
R1, #250
R0, #250
R0, $
R0, #250
R0, $
R1, D2
5-39
Nguyen Van Tho – Duy Tan University
TẠO TRỄ (DELAY)
Ví dụ : Giả sử có 1 hệ thống gồm 8 đèn led ghép nối với port 0 của
8051. Đèn led sáng khi xuất tín hiệu mức 0, tắt khi xuất tín hiệu mức 1.
Hãy lập trình sáng lần lượt từng Led 1 trong thời gian 1 giây
5-40
DuyTan University
Kỹ thuật Vi xử lý
ORG
L1:
0000
MOV
LCALL
LCALL
MOV
LCALL
LCALL
MOV
LCALL
LCALL
MOV
LCALL
LCALL
MOV
LCALL
LCALL
MOV
LCALL
LCALL
MOV
LCALL
LCALL
MOV
LCALL
LCALL
Nguyen Van Tho – Duy Tan University
P2,#00000000b
DELAY_500ms
DELAY_500ms
P2,#00000001b
DELAY_500ms
DELAY_500ms
P2,#00000010b
DELAY_500ms
DELAY_500ms
P2,#00000100b
DELAY_500ms
DELAY_500ms
P2,#00001000b
DELAY_500ms
DELAY_500ms
P2,#000100000b
DELAY_500ms
DELAY_500ms
P2,#001000000b
DELAY_500ms
DELAY_500ms
P2,#010000000b
DELAY_500ms
DELAY_500ms
MOV
P2,#100000000b
LCALL DELAY_500ms
LCALL DELAY_500ms
SJMP
L1
DELAY_500ms:
PUSH 00H
PUSH 01H
MOV
R1, #250
D1:
MOV
R0, #250
DJNZ
R0, $
MOV
R0, #250
DJNZ
R0, $
DJNZ
R1, D1
MOV
R1, #250
D2:
MOV
R0, #250
DJNZ
R0, $
MOV
R0, #250
DJNZ
R0, $
DJNZ
R1, D2
POP
01H
POP
00H
RET
5-41
END
Nguyen Van Tho – Duy Tan University
Dùng lệnh quay chương trình sẽ gọn hơn
ORG
L1:
0000
MOV
RL
MOV
LCALL
LCALL
SJMP
A,#01H
A
P2,A
DELAY_500ms
DELAY_500ms
L1
DELAY_500ms:
PUSH 00H
PUSH 01H
D1:
MOV
MOV
DJNZ
MOV
DJNZ
DJNZ
R1, #250
R0, #250
R0, $
R0, #250
R0, $
R1, D1
D2:
MOV
MOV
DJNZ
MOV
DJNZ
DJNZ
R1, #250
R0, #250
R0, $
R0, #250
R0, $
R1, D2
POP
POP
RET
01H
00H
END
5-42
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
8051 có 2 bộ timer/counter
¾Timer/counter 0
¾Timer/counter 1
Chúng có thể được dùng như
Bộ định thời (Timer) dùng như 1 bộ tạo trễ
Bộ đếm sự kiện (Event Counter)
9Đầu vào từ chân bên ngoài để đếm số sự kiện
9Có thể dùng để đếm số người qua cổng, số vòng quay
của bánh xe
Tạo tốc độ baud cho cổng nối tiếp của 8051
5-43
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
Thanh ghi điều khiển trạng thái TCON
TR (run control bit)
• TR0 for Timer/counter 0; TR1 for Timer/counter 1.
• TR được thiết lập hay xóa bởi phần mềm để bật tt timer/counter
ắTR=0: off (stop)
ắTR=1: on (start)
TF (timer flag, control flag)
ã Cờ tràn của bộ định thời
• TF0 cho timer/counter 0; TF1 cho timer/counter 1
• Ban đầu TF=0 và được thiết lp =1 khi cú trn ( TH-TL ặ 0)
ã c xóa bởi phần mềm hoặc phần cứng khi bộ vi xử lý trỏ đến trình
phục vụ ngắt
(MSB)
TF1
TR1
Timer 1
TF0
Timer0
TR0
IE1
IT1
IE0
for Interrupt
(LSB)
IT0
5-44
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
Thanh ghi chế độ định thời TMOD
• Thanh ghi 8-bit
• Thiết lập chế độ hoạt động cho các bộ định thời :
¾4 bits thấp dành cho Timer 0 (Thiết lập = 0000 nếu
khơng sử dụng )
¾4 bits cao dành cho Timer 1 (Thiết lập = 0000 nếu
không sử dụng )
• Khơng được định địa chỉ bit.
(MSB)
GATE
(LSB)
C/T
M1
M0
GATE
C/T
Timer 1
M1
M0
Timer 0
5-45
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
Thanh ghi chế độ định thời TMOD
GATE
C/T
M1
Timer 1
M0
GATE
C/T
M1
M0
Timer 0
GATE = 0
9 Điều khiển bên trong
9 Bật hay tắt timer bằng phần mềm
9 Timer được cho phép khi TR được thiết lập =1
GATE = 1
9 Điều khiển bên ngoài
9 Bật hay tắt timer bằng cả phần mềm và nguồn bên ngoài
9 Timer được cho phép khi chân /INT ở mức cao và TR được thiết
lập bằng 1
5-46
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
Thanh ghi chế độ định thời TMOD
C//T : Bit chọn chức năng đếm hay định thời
đếm : C//T=1 ; định thời : C//T=0
M1 & M0 : Chọn mode
M1
M0
MODE HOẠT ĐỘNG
0
0
0
0
1
1
1
0
2
1
1
3
Chế độ định thời 13 bit
8 bit TH + 5 bit cao của TL
Chế độ 16 bit
8 bit TH + 8 bit TL
Chế độ 8 bit auto reload
Tự động nạp lại giá trị của TH vào TL khi đếm tràn
Chế độ 1 bộ đếm 8 bit riêng lẻ
Chỉ cho TL0 và TH0
5-47
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
Ví dụ : Tìm giá trị TMOD nếu muốn lập trình Timer 0 làm việc
ở mode 2 ? Dùng 8051 XTAL cho xung clock, & dùng lệnh để
bật hay tắt timer
GIẢI :
timer 1
timer 0
TMOD= 0000 0010
Timer 1 không dùng
Timer 0, mode 2
C/T = 0 Ỉ dùng nguồn xung clock (Timer)
GATE = 0 Ỉ điều khiển bằng phần
mềm
5-48
DuyTan University
Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
Hoạt động của Timer/Counter
Ví dụ : Chọn Timer 0 làm việc ở Mode 1 - Chế độ 16 bit
MOV TMOD,#01H
MOV TH0,#FFH
MOV TL0,#FCH
CLR TF0
SETB TR0
; chọn chế độ làm việc
; Khởi tạo giá trị ban đầu
; cho TH0 & TL0.
; Xóa cờ TF0 về 0
; bật timer0
5-49
Nguyen Van Tho – Duy Tan University
LẬP TRÌNH TIMER/COUNTER
Hoạt động của Timer/Counter
TH0
TL0
TF
FF
00
FC
FD
FE
FF
00
0
1
TR0
1
¾ Khi có xung clock 8051 đếm lên (tăng giá trị TH-TL)
¾Khi có sự chuyển số đếm về 0000 , cờ TF=1
Clock
t
1.085 µs
5-50