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:
- Kiến trúc phần cứng
- Phạm vi ứng dụng
- Đặc điểm tập lệnh
Các họ vi điều khiển phổ biến
- Intel 8051
- PIC16C5x
- Motorola MC68xxx
- AVR
- PSoC
30 trang |
Chia sẻ: lylyngoc | Lượt xem: 1747 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Chương 2 Vi điều khiển MCS51, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
DuyTan University Kỹ thuật Vi xử lý
CHƯƠNG 2
VI ĐIỀU KHIỂN MCS51
ĐẠI HỌC DUY TÂN
KHOA CÔNG NGHỆ THÔNG TIN
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
5-2
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-3
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.
Nguyen Van Tho – Duy Tan University
5-4
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-5
SƠ ĐỒ KHỐI 8051
CPU
On-chip
RAM
On-chip
ROM for
program
code
4 I/O Ports
Timer 0
Serial
PortOSC
Interrupt
Control
External interrupts
Timer 1
Timer/Counter
Bus
Control
TxD RxDP0 P1 P2 P3
Address/Data
Counter
Inputs
Nguyen Van Tho – Duy Tan University
5-6
CÁC CHÂN CỦA 8051
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(T0)P3.4
(T1)P3.5
XTAL2
XTAL1
GND
(INT0)P3.2
(INT1)P3.3
(RD)P3.7
(WR)P3.6
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)
8051
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-7
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
Nguyen Van Tho – Duy Tan University
5-8
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-9
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 ngoà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
Nguyen Van Tho – Duy Tan University
5-10
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 (de-
multiplexing) 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.
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-11
CÁC CỔNG I/O
¾ 4 cổng I/O
Port 0 (chân 32-39) :P0 (P0.0~P0.7)
Port 1 (chân 1-8) :P1 (P1.0~P1.7)
Port 2 (chân 21-28) :P2 (P2.0~P2.7)
Port 3 (chân 10-17) :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
Nguyen Van Tho – Duy Tan University
5-12
TỔ CHỨC BỘ NHỚ
PSEN
External
(ngoài)
External
(ngoài)
EA=0
Internal
(trong)
EA=1
FFFFh
0000h
RD WR
External
Internal
FFFFh
0000h00h
FFh
Bộ nhớ chương trình Bộ nhớ dữ liệu
Kiến trúc Harvard
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-13
KHÔNG GIAN BỘ NHỚ RAM NỘI
RAM đa mục
đích
7FH
30H
RAM định địa
chỉ bit
2FH
20H
Bank 31FH
Bank 2
17H
10H
Bank 1 (Stack)0FH
07H Default Register
Bank for R0-R7
08H
18H
00H
R7
R6
R4
R3
R5
R2
R0
R1
7F 7E 7D 7C 7B 7A 79 78
…
…
1F 1E 1D 1C 1B 1A 19 18
17 16 15 14 13 12 11 10
0F 0E 0D 0C 0B 0A 09 08
07 06 05 04 03 02 01 00
2F
2E
20
Byte address
Bit address
Nguyen Van Tho – Duy Tan University
5-14
GHÉP NỐI VÀ TRUY XUẤT ROM NGOÀI
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-15
GHÉP NỐI VÀ TRUY XUẤT RAM NGOÀI
Nguyen Van Tho – Duy Tan University
5-16
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 vào thanh ghi A
Æ A=65h
¾ Định địa chỉ thanh ghi
MOV R1, A ; đưa dữ liệu trong thanh ghi A vào thanh ghi R1
Æ R1=A
¾ Định địa chỉ trực tiếp
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-17
CÁC THANH GHI
Nguyen Van Tho – Duy Tan University
5-18
THANH GHI PSW
Thanh ghi PSW (bit addressable)
C AC F0 RS1 OVRS0 P--
RS1 RS0 Register Bank Byte Address of R0-R7
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
CPSW.7Cờ nhớ
ACPSW.6Cờ nhớ phụ
--PSW.5Available to user for general purpose
RS1PSW.4Bit chọn dãy thanh ghi 1
RS0PSW.3Bit chọn dãy thanh ghi 0
OVPSW.2Cờ tràn
--PSW.1Dự trữ - User define bit
PPSW.0Cờ chẵn lẻ
Địa chỉ bitD7 D6 D5 D4 D3 D2 D1 D0
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-19
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
Nguyen Van Tho – Duy Tan University
5-20
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-21
CON TRỎ DỮ LIỆU DPTR
DPTR được dùng để truy xuất bộ nhớ chương trình
ngoài hoặc bộ nhớ dữ liệu ngoà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
DPTR (High)
DPTR (Low)
83H
82H
Nguyen Van Tho – Duy Tan University
5-22
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 :
.
Ví dụ để xóa bit 4 của cổng P0
CLR P0.4
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-23
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
Nguyen Van Tho – Duy Tan University
5-24
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-25
TẬP LỆNH
¾Truy cập bộ nhớ ROM ngoài
MOVC A, @A + DPTR
MOVC A, @A + PC
¾ Truy cập bộ nhớ RAM ngoà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 XCH A, @Ri
¾Thao tác ngăn xếp
PUSH mem POP mem
Nguyen Van Tho – Duy Tan University
5-26
TẬP LỆNH
¾Nhóm lệnh số học
ADD A,Rn ADD A,mem ADD A,@Ri ADD A,#data
ADDC A,Rn ADDC A,mem ADDC A,@Ri ADDC A,#data
SUBB A,Rn SUBB A,mem SUBB A,@Ri SUBB A,#data
INC A INC Rn INC mem INC @Ri INC DPTR
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-27
TẬP LỆNH
¾ Nhóm lệnh logic
ANL A,Rn ANL A,mem ANL A,@Ri ANL A,#data
ANL mem,A ANL mem,#data
ORL A,Rn ORL A,mem ORL A,@Ri ORL A,#data
ORL mem,A ORL mem,#data
XRL A,Rn XRL A,mem XRL A,@Ri XRL A,#data
XRL mem,A XRL mem,#data
CLR A
CPL A
RL A RLC A
RR A RRC A
Nguyen Van Tho – Duy Tan University
5-28
TẬP LỆNH
¾Nhóm lệnh xử lý bit
SETB bit ; bit=1
CLR bit ; bit=0
Vi dụ : SETB C ; CY=1
SETB P0.0 ;bit 0 của port 0 =1
SETB ACC.2 ;bit 2 của Accumulator =1
CLRB P3.7 ;bit 7 của port 3 = 0
ANL C,bit ; AND cờ C với bit
ORL C, bit ; OR cờ C với bit
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-29
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
Nguyen Van Tho – Duy Tan University
5-30
TẬP LỆNH
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
Lệnh nhảy có điều kiện
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-31
LẬP TRÌNH HỢP NGỮ CHO 8051
Nguyen Van Tho – Duy Tan University
5-32
KHUÔN 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
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
Dạng chương trình không ngắt và có khai báo dữ liệu
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-33
KHUÔN DẠNG CHƯƠNG TRÌNH
Dạng chương trình sử dụng ngắt
ORG 0H
LJMP MAIN ; nhảy tới Main
ORG 03H ; external interrupt 0
JMP EXINTER0
ORG 0BH ; timer 0 interrupt
JMP COUNTER0
ORG 13H ; external interrupt 0
JMP EXINTER1
ORG 1BH ;timer 1 interrupt
JMP COUNTER1
MAIN:
EXINTER0
; chương trình phục vụ ngắt 0
RETI
EXINTER1
; chương trình phục vụ ngắt 1
RETI
COUNTER0
; chương trình phục vụ bộ đếm 0
RETI
COUNTER1
; chương trình phục vụ bộ đếm 1
RETI
END
Nguyen Van Tho – Duy Tan University
5-34
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ó.
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-35
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 :
ORG 00H
MOV P2,#FFH
MOV A, P2
MOV R2, #10
AGAIN: ADD A, #03
DJNZ R2, AGAIN ;repeat until R2=0 (10 lần)
MOV R5, A
END
Nguyen Van Tho – Duy Tan University
5-36
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<R1: gửi 0FFH ra port 2
Else gửi 0 ra port 2
Giải đáp:
CJNE R0, 1, NOT_EQ
… ;R0=R1
NOT_EQ: JC R0_NHO_HON
… ;R0>R1
R0_NHO_HON: … ;R0<R1
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-37
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
Nguyen Van Tho – Duy Tan University
5-38
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: MOV R3,#250 ; 1 MC
HERE: NOP ; 1 MC
NOP ; 1 MC
NOP ; 1 MC
NOP ; 1 MC
DJNZ R3,HERE ; 2 MC
RET ; 1 MC
Answer: [250x(1+1+1+1+2)+2]x1.085 us=1629.67 us
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-39
TẠO TRỄ (DELAY)
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
Đoạn chương trình tạo trễ 500ms
Nguyen Van Tho – Duy Tan University
5-40
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
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-41
ORG 0000
L1: MOV P2,#00000000b
LCALL DELAY_500ms
LCALL DELAY_500ms
MOV P2,#00000001b
LCALL DELAY_500ms
LCALL DELAY_500ms
MOV P2,#00000010b
LCALL DELAY_500ms
LCALL DELAY_500ms
MOV P2,#00000100b
LCALL DELAY_500ms
LCALL DELAY_500ms
MOV P2,#00001000b
LCALL DELAY_500ms
LCALL DELAY_500ms
MOV P2,#000100000b
LCALL DELAY_500ms
LCALL DELAY_500ms
MOV P2,#001000000b
LCALL DELAY_500ms
LCALL DELAY_500ms
MOV P2,#010000000b
LCALL DELAY_500ms
LCALL 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
END
Nguyen Van Tho – Duy Tan University
5-42
Dùng lệnh quay chương trình sẽ gọn hơn
ORG 0000
MOV A,#01H
L1: RL A
MOV P2,A
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
END
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-43
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
Nguyen Van Tho – Duy Tan University
5-44
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 tắt 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 lập =1 khi có tràn ( 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
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer 1 Timer0 for Interrupt
(MSB) (LSB)
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-45
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.
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
(MSB) (LSB)
Nguyen Van Tho – Duy Tan University
5-46
LẬP TRÌNH TIMER/COUNTER
Thanh ghi chế độ định thời TMOD
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
GATE = 0
9 Điều khiển bên trong
9Bật hay tắt timer bằng phần mềm
9Timer được cho phép khi TR được thiết lập =1
GATE = 1
9Điều khiển bên ngoài
9Bật hay tắt timer bằng cả phần mềm và nguồn bên ngoài
9Timer được cho phép khi chân /INT ở mức cao và TR được thiết
lập bằng 1
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-47
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
1
1
0
1
0
1
0
1
2
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
Nguyen Van Tho – Duy Tan University
5-48
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
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
GIẢI :
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-49
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 ; chọn chế độ làm việc
MOV TH0,#FFH ; Khởi tạo giá trị ban đầu
MOV TL0,#FCH ; cho TH0 & TL0.
CLR TF0 ; Xóa cờ TF0 về 0
SETB TR0 ; bật timer0
Nguyen Van Tho – Duy Tan University
5-50
LẬP TRÌNH TIMER/COUNTER
TH0 TL0
FF FC
TF TR0
0 1DEF00 00 1
t
1.085 µs
¾ 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
Hoạt động của Timer/Counter
Clock
DuyTan University Kỹ thuật Vi xử lý
Nguyen Van Tho – Duy Tan University
5-51
LẬP TRÌNH TIMER/COUNTER
Tính toán tạo trễ : ( với XTAL =11.0592MHz)
Chuyển giá trị ban đầu của TH – TL sang dạng thập phân
Thời gian trễ = (65536 – giá trị ban đầu) * 1.085µs
Nguyen Van Tho – Duy Tan University
5-52
LẬP TRÌNH TIMER/COUNTER
Ví dụ : Viết lại chương trình nháy led sử dụng Timer để
làm bộ trễ
MOV A,#01H
MOV TMOD, #01 ;Timer 0,mode 1(16-bit)
HERE: MOV TL0, #064H ;Giá trị Timer0 = FC64H
MOV TH0, #0FCH
RL A
MOV P0,A
ACALL DELAY1s
SJMP HERE
;tạo trễ dùng timer 0
DELAY1s:
SETB TR0 ;start the timer 0
AGAIN: JNB TF0,AGAIN
CLR TR0 ;stop timer 0
CLR TF0 ;clear timer 0 flag
RE