Bài giảng Kỹ thuật Vi điều khiển - Lê Xứng

1. Giới thiệu

2. Sơ đồ khối và chân

3. Tổ chức bộ nhớ

4. Các thanh ghi chức năng đặc biệt

5. Dao động và hoạt động reset

6. Tập lệnh

7. Các mode định địa chỉ

8. Lập trình IO

9. Tạo trễ

10.Lập trình Timer/Counter

11.Lập trình giao tiếp nối tiếp

12.Lập trình ngắt

13.Lập trình hợp ngữXung & Hoi 4

1. LED 1

2. LED 2

3. Hiển thị với LED 7 đoạn

4. Keypad

5. Đo thời gian

6. Tạo sóng vuông

7. Đồng hồ số

8. Giao tiếp PC, viết C code

9. ADC, cảm biến & xuất LED 7 đoạn

10. Motor bước

11. PWM

pdf 195 trang yennguyen 4880
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật Vi điều khiển - Lê Xứng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kỹ thuật Vi điều khiển - Lê Xứng

Bài giảng Kỹ thuật Vi điều khiển - Lê Xứng
Xung & Hoi 1
Kỹ thuật Vi điều khiển
Th.S LÊ XỨNG và Th.S NGUYỄN BÁ HỘI
Trường Đại học Bách khoa, ĐHĐN
Lexung59@yahoo.com hoinb@ud.edu.vn
Xung & Hoi 2
Sách tham khảo
• I. Scott Mackenzie, Họ Vi điều khiển 8051, Dịch: Tống Văn
On và Hoàng Đức Hải, 2001
• Ngô Diên Tập, Kỹ thuật ghép nối máy tính, 2000
• Ngô Diên Tập, Đo lường và điều khiển bằng máy tính, 1998
• Đỗ Xuân Tiến, Kỹ thuật Vi xử lý và lập trình Assembly cho hệ
vi xử lý, 2003
• Sencer Yeralan, The 8051 Cookbook for Assembly and C with 
Experiments in Mechatronics amd Robotics, 2000
• Sencer Yeralan, Programming and Interfacing the 8051 
Microcontroller, 1995
Xung & Hoi 3
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
Xung & Hoi 4
1. LED 1
2. LED 2
3. Hiển thị với LED 7 đoạn
4. Keypad
5. Đo thời gian
6. Tạo sóng vuông
7. Đồng hồ số
8. Giao tiếp PC, viết C code
9. ADC, cảm biến & xuất LED 7 đoạn
10. Motor bước
11. PWM
Xung & Hoi 5
CPU
Vi xử lý RAM ROM
I/O 
Port
Timer
Cổng
nối tiếp
Data Bus
Address Bus
• CPU cho các máy tính
• Không có RAM, ROM, I/O trên CPU chip
• Vd: Intel’s x86, Motorola’s 680x0
Nhiều chips trên bo mạch chủ
Hệ thống vi xử lý
Vi xử lý
Xung & Hoi 6
RAM ROM
I/O 
Port
Timer
Cổng
nối tiếp
CPU
• Là máy tính mini
• Có RAM, ROM, I/O ports trên CPU chip
• Vd: Motorola’s 6811, Intel’s 8051, Zilog’s Z80, & PIC 16X
Vi điều khiển
tất cả bên trong 1 chip
Vi điều khiển
Xung & Hoi 7
Vi xử lý & Vi điều khiển
Vi điều khiển
Ø CPU, RAM, ROM, I/O & 
Timer nằm trên cùng 1 chip
Ø Cố định lượng ROM, RAM, 
I/O Ports trên chip
Ø Thích hợp cho các ứng dụng:
ügiá cả thấp
ünăng lượng tiêu thụ thấp
ükhông gian hạn chế
Ø Đơn mục đích
Vi xử lý
Ø CPU chip riêng biệt. RAM, 
ROM, I/O, Timer bên ngoài
Ø Lượng ROM, RAM, I/O 
Ports tùy ý
Ø Giá thành cao
Ø Đa năng
Ø Đa mục đích
Xung & Hoi 8
Hệ thống nhúng (Embedded System)
Bộ xử lý được nhúng (embedded) vào một ứng dụng cụ thể
Một sản phẩm nhúng chỉ sử dụng VXL,VĐK, FPGA, 
DSP... để thực thi 1 công việc duy nhất
Chỉ có một phần mềm ứng dụng & thông thường được nộp
trong ROM
vd:printer, keyboard, video game player...
Xung & Hoi 9
3 tiêu chí chọn vi điều khiển
1. Đáp ứng yêu cầu về nhiệm vụ và giá thành thi công
Ø Tốc độ, lượng bộ nhớ, cổng I/O, timers, kích cỡ, đóng
gói, năng lượng tiêu thụ
Ø Dễ nâng cấp
Ø Giá thành
2. Các công cụ phát triển phần mềm
Ø Assember, bộ sửa lỗi, trình dịch C, mô phỏng, hỗ trợ kỹ
thuật
3. Thị trường cung cấp sản phẩm tin cậy
Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân (block and pin diagrams)
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt (SFR)
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
Xung & Hoi 2
2-1. Sơ đồ khối
CPU
On-chip 
RAM
On-chip 
ROM for 
program 
code
4 I/O Ports
Timer 0
Serial 
PortOSC
Interrupt 
Control
External 
by Timers, Serial Port
Timer 1
Timer/Counter
Bus 
Control
TxD RxDP0 P1 P2 P3
Address/Data
Counter 
Inputs 
T1,T0
/EA
RST
ALE
/PSEN
Xung & Hoi 3
2-2. So sánh các thành viên họ 8051
5
1
32
2
128
4K 
Flash
8951
5
1
32
2
128
4K
EPROM
8751
5
1
32
2
128
0K 
8031
665Interrupt 
sources
111Serial Port
323232I/O pins
332Timers
256256128Data Mem on 
chip (bytes)
8K
EPROM
8K
ROM
4K
ROM
Code Mem on 
chip (bytes)
875280528051Specification
Xung & Hoi 4
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
2-3. Sơ đồ chân
Xung & Hoi 5
Các chân 8051 (phần 1)
§ Vcc (chân 40):
üCung cấp nguồn cho chip
ü+5V
§ GND (chân 20): đất
§ XTAL1 & XTAL2 (chân 19, 18)
ü2 chân cung cấp xung clock ngoài
üCách 1: dao động dùng thạch anh
üCách 2: dao động từ nguồn xung clock TTL bên ngoài
üQuan hệ giữa chu kỳ máy và XTAL
Xung & Hoi 6
Các chân 8051 (phần 2)
§ RST (chân 9): reset
üinput & kích hoạt mức cao
üĐể đả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
üGiá 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
üMạch reset có chống rung
Xung & Hoi 7
Các chân 8051 (phần 3)
Ø /EA (chân 31): External Access
ü/EA nối mass chỉ định rằng code lưu trên bộ nhớ ngoài
ü/PSEN & ALE dùng cho ROM ngoài
üVới 8051, 8031, 8032 thì /EA nối Vcc
ü“/”: chỉ định tác động mức thấp
Ø /PSEN (chân 29): Program Store Enable
üOutput, cho phép truy xuất bộ nhớ chương trình ngoài
üNối tới chân /OE của ROM/EPROM
üKhi thực thi chương trình ở ROM nội, /EA được gán mức 1,
(khi đó /PSEN được tự động giữ ở mức 1)
Xung & Hoi 8
Các chân 8051 (phần 4)
Ø 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.
Xung & Hoi 9
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
Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ (Memory Organization)
4. Các thanh ghi chức năng đặc biệt
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
Xung & Hoi 2
1. Các thanh ghi và các I/O port được định địa chỉ
theo kiểu ánh xạ bộ nhớ (memory mapped) & do đó
được truy xuất như 1 vị trí nhớ trong bộ nhớ
2. Stack là trên RAM nội thay vì trên RAM ngoài như
đối với các bộ VXL
Hai đặc tính cần lưu ý
Xung & Hoi 3
0000H
0FFFH
0000H
1FFFH
0000H
7FFFH
8751
AT89C51 8752
AT89C52
4k
DS5000-32
8k
32k
Atmel Corporation Dallas Semiconductor
3-1. Không gian bộ nhớ ROM nội
Xung & Hoi 4
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
0001020304050607
08090A0B0C0D0E0F
1011121314151617
18191A1B1C1D1E1F
78797A7B7C7D7E7F 2F
2E
20
Byte address
Bit address
3-2. Không gian bộ nhớ RAM nội
Xung & Hoi 5
3-2-1. Vùng RAM đa mục đích
• Truy xuất tự do 80 bytes này theo kiểu định địa chỉ trực tiếp
hay gián tiếp
• MOV A, 5FH
Hoặc:
MOV R0, #5FH
MOV A, @R0
Xung & Hoi 6
3-2-2. Vùng RAM định địa chỉ bit
• Truy xuất các bit riêng rẽ là 1 đặc trưng của VĐK. Các bit có
thể được set, xóa, AND, OR  chỉ bằng 1 lệnh so với 1 chuỗi
lệnh của VXL
• Các port cũng được định địa chỉ bit
• Vd: để set bit 7FH bằng 1, ta viết:
VĐK:
SETB 7FH
VXL:
MOV A,2FH ; đọc cả byte
ORL A,#10000000B ; set bit
MOV 2FH,A ; ghi trở lại cả byte
Xung & Hoi 7
3-2-3. Các dãy thanh ghi (register banks)
• Các lệnh dùng thanh ghi là những lệnh ngắn & thực hiện
nhanh hơn
– MOV A,R5 ; 1 byte
– MOV A,05H ; 2 bytes
• Các dữ liệu thường dùng nên chứa ở các thanh ghi
• Ý tưởng các dãy thanh ghi cho phép chuyển đổi ngữ cảnh
nhanh và hiệu quả ở các module độc lập nhau của phần mềm
Xung & Hoi 8
• Thanh ghi dùng truy
cập ngăn xếp gọi là
SP (stack pointer)
• SP là thanh ghi 8 bit: 
giá trị từ 00 à FFH. 
• Khi được cấp nguồn
hay sau khi reset, 
SP=07H
3-2-4. Ngăn xếp
7FH
30H
2FH
20H
1FH
17H
10H
0FH
07H
08H
18H
00H Register Bank 0
(Stack) Register Bank 1 
Register Bank 2
Register Bank 3
Bit-Addressable RAM
Scratch pad RAM
Xung & Hoi 9
VD: MOV R6,#25H
MOV R1,#12H
MOV R4,#0F3H
PUSH 6
PUSH 1
PUSH 4
0BH
0AH
09H
08H
Start SP=07H
25
0BH
0AH
09H
08H
SP=08H
F3
12
25
0BH
0AH
09H
08H
SP=0AH
12
25
0BH
0AH
09H
08H
SP=09H
Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt (SFR)
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
Xung & Hoi 2
Xêm thêm Hình 2.6 trang 26
SFRs
Xung & Hoi 3
CPU registers:
- ACC : Accumulator.
- B : B register.
- PSW : Program Status Word.
- SP : Stack Pointer.
- DPTR : Data Pointer (DPH, DPL).
Interrupt control:
-IE : Interrupt Enable.
-IP : Interrupt Priority.
I/O Ports:
- P0 : Port 0.
- P1 : Port 1.
- P2 : Port 2.
- P3 : Port 3.
Xung & Hoi 4
TImers:
- TMOD : Timer mode.
- TCON : Timer control.
- TH0 : Timer 0 high byte.
- TL0 : Timer 0 low byte.
- TH1 : Timer 1 high byte.
- TL1 : Timer 1 low byte.
Serial I/O:
- SCON : Serial port control.
- SBUF : Serial data registers.
Other:
- PCON : Power control & misc.
Xung & Hoi 5
4-1. 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ỉ bitD0D1D2D3D4D5D6D7
Xung & Hoi 6
• C (carry flag) - Cờ nhớ
– Được set bằng 1 nếu có số nhớ từ phép cộng bit 7 hay có số
mượn mang đến bit 7
• MOV A,#FFH
• ADD A,#1
– Còn được dùng như 1 thanh ghi 1 bit đối với các lệnh logic 
thao tác trên các bit
• ANL C,25H
• AC (auxiliary carry) – Cờ nhớ phụ
– Được set bằng 1 nếu có số nhớ từ bit 3 sang bit 4
• RS1, RS0 - Các bit chọn dãy (bank) thanh ghi
– Dùng để xác định dãy thanh ghi tích cực
– Chúng được xóa khi reset
MOV A,R7SETB RS0
SETB RS1 º SETB 0D4H 
Xung & Hoi 7
• OV (overflow flag) - Cờ tràn
– Set bằng 1 sau phép toán cộng hoặc trừ nếu có xuất hiện 1 
tràn số học. Khi các số có dấu được cộng hoặc trừ, phần
mềm có thể kiểm tra bit tràn OV để xác định KQ có nằm
trong tầm hay không
– Với các số có dấu, KQ nhỏ hơn -128 hoặc lớn hơn +127 sẽ
set cờ OV = 1. Với các số không dấu, OV=1 khi KQ vượt
quá 255
– VD: 
• 0F thập phân 15
• +7F +127
• ____ _____
• 8E 142
• 8EH biễu diễn -114 không đúng với KQ mong muốn là
142 nên OV = 1
Xung & Hoi 8
• P (parity) - Cờ chẵn lẻ
– Kiểm tra chẵn lẻ cho thanh chứa A
– Số các bit 1 trong thanh chứa A cộng với bit P luôn luôn
chẵn
• MOV A,#10101101B
• àP=1
– Bit chẵn lẻ được sử dụng kết hợp với các chương trình
xuất/nhập nối tiếp trước khi truyền dữ liệu hoặc để kiểm tra
chẵn lẻ sau khi nhận dữ liệu
VD4: MOV A,#FFH
ADD A,#1
VD3: MOV A,#38H
ADD A,#2FH
VD2: MOV A,#9CH
ADD A,#64H
VD1: MOV A,#88H
ADD A,#93H
Xung & Hoi 9
VD:
MOV A,#38H
ADD A,#2FH
38 00111000
+2F +00101111
---- --------------
67 01100111
C=0 AC=1 P=1
VD:
MOV A,#88H
ADD A,#93H
88 10001000
+93 +10010011
---- --------------
11B 00011011
C=1 AC=0 P=0
VD:
MOV A,#9CH
ADD A,#64H
9C 10011100
+64 +01100100
---- --------------
100 00000000
C=1 AC=1 P=0
VD:
MOV A,#FFH
ADD A,#1
A=00H; C=1; AC=1;
Xung & Hoi 10
Những lệnh ảnh hưởng đến các bit cờ
X có thể là 1 
hoặc 0
Xung & Hoi 11
• 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
4-2. Thanh ghi B
F0F1F2F3F4F5F6F7
Xung & Hoi 12
4-3. Con trỏ ngăn xếp (SP)
• SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của stack
• Các lệnh liên quan đến stack bao gồm lệnh cất dữ liệu vào
stack (làm tăng SP trước khi ghi dữ liệu) và lệnh lấy dữ liệu
khỏi stack (giảm SP)
• 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
Địa chỉ
byte 81
Xung & Hoi 13
• Nếu không khởi động SP, nội dung mặc định là 07H (để duy
trì sự tương thích với 8048) à 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
• Trong trường hợp này, nếu phần mềm ứng dụng không khởi
động SP, dãy thanh ghi 1 (và có lẽ 2, 3) sẽ không còn hợp lệ vì
chúng được sử dụng làm stack
• PUSH & POP cất dữ liệu vào stack và lấy dữ liệu từ stack
• ACALL, LCALL, RET, RETI cất và phục hồi bộ đếm chương
trình PC
Xung & Hoi 14
VD: MOV R6,#25H
MOV R1,#12H
MOV R4,#0F3H
PUSH 6
PUSH 1
PUSH 4
0BH
0AH
09H
08H
Start SP=07H
25
0BH
0AH
09H
08H
SP=08H
F3
12
25
0BH
0AH
09H
08H
SP=0AH
12
25
0BH
0AH
09H
08H
SP=09H
Xung & Hoi 15
4-4. 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
• VD:
MOV A,#55H
MOV DPTR,#1000H
MOVX @DPTR,A
DPH
DPL
83H
82H
Xung & Hoi 16
4-5. Các thanh ghi I/O port: P0, P1, P2, P3
• Tất cả port đều được định địa chỉ bit 
• VD: (điều khiển motor nối bit P1.0)
SETB P1.0
CLR P1.0
• Đoạn chương trình kiểm tra trạng thái BUSY của
thiết bị:
WAIT: JB P1.5, WAIT
Xung & Hoi 17
4-6. Cá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)
Xung & Hoi 18
4-7. Các thanh ghi của 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
Xung & Hoi 19
4-8. Các thanh ghi ngắt
• IE (interrupt enable)
• IP (interrupt priority)
Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt
5. Dao động và hoạt động reset (oscillator and reset)
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
Xung & Hoi 2
C2
30pF
C1
30pF
XTAL2
XTAL1
GND
5-1. Dao động dùng thạch anh
Xung & Hoi 3
N
C
EXTERNAL
OSCILLATOR
SIGNAL
XTAL2
XTAL1
GND
5-2. Da ... động nạp lại (Auto-reloading)
• TL0 được tăng lên khi TR0=1
• VD, tạo thời gian trễ với 200 chu kỳ máy (MC) trên timer 0.
TLx
THx
TFx overflow flag
reload TF goes high when FF à 0
Timer clock
Xung & Hoi 27
1. Chọn mode 2 timer 0
– MOV TMOD,#02H
2. Khởi tạo giá trị đầu trong TH0
– MOV TH0,#38H
3. Xóa cờ TF0=0.
– CLR TF0
4. Sau khi TH0 được gán, 8051 copy giá trị này vào TL0
– TL0=TH0=38H
5. Bật Timer
– SETB TR0
Xung & Hoi 28
6. 8051 đếm lên TL0
– TL0= 38H, 39H, 3AH,....
7. Khi TL0 từ FFH à 00 thì 8051 set TF0=1. Bên cạnh đó, 
TL0 được tự động nạp lại giá trị lưu giữ trong TH0
– TL0= FEH, FFH, 00H (lúc này TF0=1)
– 8051 tự động nạp lại TL0=TH0=38H. 
– Quay lại bước 6
8. CLR TF0
9. CLR TR0 
Xung & Hoi 29
TL1
TH1
TF1 overflow flag
reload
TF goes high 
when FF à 0
XTAL
oscillator ÷ 12
C/T=0: up
C/T=0: down
Timer clockT0 hay 
T1 pin
C/T
TRx
Mode 2
Xung & Hoi 30
10-5. Tính toán trễ dùng Timer
(a) Dạng hexa
(FFFF – YYXX + 1) * 1.085 ms
Trong đó YYXX là các giá
trị ban đầu của TH, TL 
tương ứng
(b) Dạng thập phân
Chuyển các giá trị YYXX 
của TH, TL sang dạng thập
phân NNNNN, à ta có
(65536 – NNNNN) * 1.085 ms
XTAL = 11.0592 MHz
Áp dụng đ/v chế độ định thời 16-bit (mode 1)
Xung & Hoi 31
EChương trình sau tạo sóng vuông trên chân P1.5 liên tục dùng
timer 1 tạo trễ mode 1. Tìm tần số?
(Không bao gồm overhead gây bởi các lệnh trong vòng lặp)
MOV TMOD,#10H ;timer 1, mode 1
AGAIN:MOV TL1,#34H ;timer value=7634H
MOV TH1,#76H 
SETB TR1 ;start
BACK: JNB TF1,BACK 
CLR TR1 ;stop 
CPL P1.5 ;next half clock
CLR TF1 ;clear timer flag 1
SJMP AGAIN ;reload timer1
Bài toán 10.2. Sóng vuông, tìm f
Xung & Hoi 32
Giải đáp:
Với mode 1, các thanh ghi định thời TH, TL phải được khởi động
lại sau mỗi lần tràn.
FFFFH – 7634H + 1 = 89CCH = 35276 clock count 
½ chu kỳ = 35276 × 1.085 ms = 38.274 ms 
Chu kỳ = 2 × 38.274 ms = 76.548 ms
Tần số = 1/ 76.548 ms = 13.064 Hz.
Trong các tính toán trên, không bao gồm overhead gây bởi
các lệnh trong vòng lặp
Xung & Hoi 33
• ETìm KQ các bài toán trên trong trường hợp có tính đến
overhead?
• EGiải các bài toán trên với chế độ định thời tự nạp lại 8-bit 
(mode 2)?
• EVới phạm vi tần số nào thì không thể dùng chế độ tự nạp lại
8-bit (mode 2), giải thích?
Bài toán 10.3.
Xung & Hoi 34
10-6. Tìm giá trị các thanh ghi định thời
• Giả định biết trước thời gian trễ, XTAL = 11.0592 MHz 
• Làm sao tính toán các giá trị cần gán cho TH, TL?
1. Chia thời gian trễ cho 1.085 ms.
2. Thực hiện 65536 –n, với n (decimal) từ bước 1
3. Chuyển KQ trong bước 2 sang hex yyxx
4. Set TH = yy và TL = xx.
Xung & Hoi 35
EXTAL = 11.0592 MHz, viết chương trình tạo sóng vuông 50 
Hz trên chân P2.3
Giải đáp:
(a) T = 1 / 50 Hz = 20 ms.
(b) Thời gian mức cao = Thời gian mức thấp = 10 ms.
(c) 10 ms / 1.085 ms = 9216 
65536 – 9216 = 56320 in decimal = DC00H in hex.
(d) TL1 = 00H and TH1 = DCH.
Bài toán 10.4. Tạo sóng vuông theo f cho
sẵn
Xung & Hoi 36
MOV TMOD,#10H ;timer 1, mode 1
AGAIN: MOV TL1,#00 ;Timer value = DC00H 
MOV TH1,#0DCH 
SETB TR1 ;start
BACK: JNB TF1,BACK 
CLR TR1 ;stop 
CPL P2.3 
CLR TF1 ;clear timer flag 1
SJMP AGAIN ;reload timer since 
;mode 1 is not
;auto-reload
Xung & Hoi 37
Tạo thời gian trễ lớn
• Độ lớn tdelay phụ thuộc 2 thông số:
– Tần số dao động thạch anh
– Giá trị chứa trong các thanh ghi định thời TH & 
TL
• Thời gian trễ là lớn nhất khi TH=TL=0. 
Nếu vẫn chưa đủ?
Xung & Hoi 38
EKhảo sát BT sau và tìm thời gian trễ? (Không tính overhead)
MOV TMOD,#10H 
MOV R3,#200
AGAIN: MOV TL1,#08H
MOV TH1,#01H 
SETB TR1 
BACK: JNB TF1,BACK 
CLR TR1 
CLR TF1 
DJNZ R3,AGAIN 
Giải đáp:
TH – TL = 0108H = 264 (decimal)
65536 – 264 = 65272.
Trễ do timer = 65272 × 1.085 ms = 70.820 ms
Tổng thời gian trễ = 200 × 70.820 ms = 14.164024 seconds
Bài toán 10.5. Tính delay
Xung & Hoi 39
ETìm tần số xung vuông trên chân P1.0 ?
MOV TMOD,#2H ;Timer 0,mode 2
MOV TH0,#0
AGAIN:MOV R5,#250 ;count 250 times
ACALL DELAY
CPL P1.0
SJMP AGAIN
DELAY:SETB TR0 ;start
BACK: JNB TF0,BACK 
CLR TR0 ;stop
CLR TF0 ;clear TF
DJNZ R5,DELAY ;timer 2: auto-reload
RET
Giải đáp:T = 2 (250 × 256 × 1.085 ms) = 138.88 ms à f = 72 Hz.
Bài toán 10.6. Tính tần số xung vuông
Xung & Hoi 40
Bài toán 10.7. Tìm giá trị gán cho TH
EGiả sử đang lập trình
cho Timer ở mode 2, tìm
giá trị hex gán cho thanh
ghi TH trong các trường
hợp sau:
(a) MOV TH1,#-200
(b) MOV TH0,#-60 
(c) MOV TH1,#-3
(d) MOV TH1,#-12 
(e) MOV TH0,#-48
• Giải đáp: Vài 8051 assemblers cho 
phép cách thức sau: 
• -200 = -C8H à 2’s complement 
of –200 = 100H – C8H = 38H
Decimal 2’s complement (TH 
value)
-200 = - C8H 38H
- 60 = - 3CH C4H
- 3 FDH
- 12 F4H
- 48 D0H
Xung & Hoi 41
(a) Tìm tần số sóng vuông với đoạn code sau
(b) Thời gian mức cao và thấp
MOV TMOD,#2H ;Timer 0,mode 2
MOV TH0,#-150 ;Count=150
AGAIN:SETB P1.3 
ACALL DELAY 
ACALL DELAY
CLR P1.3 
ACALL DEALY 
SJMP AGAIN
DELAY:SETB TR0 ;start
BACK: JNB TF0,BACK 
CLR TR0 ;stop
CLR TF0 ;clear TF 
RET
high period
low period
Bài toán 10.8. Tìm f
Xung & Hoi 42
Giải đáp:
“MOV TH0,#-150” dùng 150 clocks. 
CTC DELAY = 150 × 1.085 ms = 162 ms. 
Thời gian mức cao gấp 2 lần thời gian mức thấp (66% duty cycle). 
Chu kỳ = Thời gian mức cao + thời gian mức thấp
= 325.5 ms + 162.25 ms = 488.25 ms 
Tần số = 2.048 kHz.
Xung & Hoi 43
• Các bộ định thời (timers) cũng có thể dùng như những bộ đếm
(counters) để đếm sự kiện xảy ra bên ngoài 8051 
• Khi đó, xung từ ngoài sẽ làm tăng giá trị các thanh ghi TH, TL
• Khi C/T=1, bộ đếm sẽ đếm lên khi có xung xuất hiện từ: 
– T0: timer 0 input (Pin 14, P3.4)
– T1: timer 1 input (Pin 15, P3.5)
Timer/Counter 1 external inputT1P3.515
Timer/Counter 0 external inputT0P3.414
DescriptionFunctionPort PinPin
GATE C/T=1 M1 M0 GATE C/T=1 M1 M0
Timer 1 Timer 0
(MSB) (LSB)
10-7. Bộ đếm
Xung & Hoi 44
10-7-1. Chế độ đếm 16-bit (mode 1)
• 16-bit counter (TH0 and TL0)
• Giá trị trong các thanh ghi TH0-TL0 tăng khi: TR0 được set 
lên 1 và một xung bên ngoài (T0) xuất hiện
• Khi bộ đếm (TH0-TL0) đạt tới giá trị lớn nhất là FFFFH, nó
được chuyển trạng thái về 0000, và TF0 được set lên 1 
• Bằng cách nạp giá trị ban đẩu cho TH0-TL0, theo dõi TF0=1 
để nhận biết 1 tình huống nào đó (vd: 100 người đã đến).
TR0
TH0 TL0 TF0
TF0 goes high 
when FFFF à 0
overflow flag
C/T = 1
Timer 0 ngõ vào
từ bên ngoài
chân 3.4 (T0)
Xung & Hoi 45
• 8-bit counter. 
– Chỉ cho phép các giá trị từ 00 đến FFH nạp vào TH0
• Tự động nạp lại (Auto-reloading)
• Giá trị trong TL0 sẽ tăng nếu TR0=1 và 1 xung bên ngoài xuất
hiện
10-7-2. Chế độ đếm tự nạp lại 8-bit (mode 2)
Xung & Hoi 46
Bài toán 10.9. Đếm xung & xuất port
Giả định 1 xung clock được đưa vào chân T1, viết chương
trình bộ đếm 1 làm việc ở mode 2 để đếm xung & hiển thị giá
trị của TL1 ra P2, khi Counter tràn thì kết thúc?
T1
to
LEDs
P3.5
P2
8051
Xung & Hoi 47
Ans:
MOV TMOD, #01100000B ;mode 2, counter 1
MOV TH1, #0 
SETB P3.5
SETB TR1 ;start
BACK: MOV A,TL1 
MOV P2,A ;display in P2
JNB TF1,BACK ;overflow
CLR TR1 ;stop
CLR TF1 ;make TF=0
Xung & Hoi 48
• Giả sử 1 xung tần số 1Hz được cấp vào chân P3.4. Viết
chương trình hiển thị counter 0 trên LCD. Khởi tạo giá trị ban 
đầu cho thanh ghi TH0 là -60.
T0
to
LCD
P3.4
P1
8051
1 Hz clock
Bài toán 10.10. Đếm xung & Hiển thị LCD
Xung & Hoi 49
ACALL LCD_SET_UP ;initialize the LCD
MOV TMOD,#00000110B ;Counter 0,mode2
MOV TH0,#-60 
SETB P3.4 ;make T0 as input
AGAIN:
SETB TR0 ;starts the counter
BACK: 
MOV A,TL0 ;every 60 events
ACALL CONV ;convert in R2,R3,R4
JNB TF0,BACK ;loop if TF0=0
CLR TR0 ;stop 
CLR TF0 
SJMP AGAIN
Xung & Hoi 50
;converting 8-bit binary to ASCII
CONV: MOV B,#10 ;divide by 10
DIV AB 
MOV R2,B ;save low digit
MOV B,#10 ;divide by 10 once more
DIV AB 
ORL A,#30H ;make it ASCII
MOV R4,A 
MOV A,B
ORL A,#30H
MOV R3,A 
MOV A,R2 
ORL A,#30H
MOV R2,A ;ACALL LCD_DISPLAY here 
RET
R4 R3 R2
Xung & Hoi 51
• Cải tiến ví dụ trên thực hiện 1 đồng hồ số đơn giản, chưa cần
các nút hiệu chỉnh giở, phút ?
• Việc sử dụng lệnh “JNB TF0,target” để giám sát cờ TF0 
là sự hoang phí thời gian vô cùng lớn
– Giải pháp là dùng ngắt, đề cập trong phần 12 của bài giảng
– Với ngắt, ta có thể thực thi nhiều việc
– Khi cờ TF được set, nó sẽ thông báo cho chúng ta
Bài toán 10.11. Đồng hồ số
Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt (SFR)
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ (addressing modes)
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp (serial comm programming)
12.Lập trình ngắt (interrupt programming)
13.Lập trình hợp ngữ
Xung & Hoi 2
11-1. Giới thiệu
• Port nối tiếp hoạt động song công (full duplex), nghĩa là có
khả năng thu và phát đồng thời
• Sử dụng 2 thanh ghi chức năng đặc biệt SBUF (địa chỉ byte là
99H) & SCON (địa chỉ byte là 98H) để truy xuất port nối tiếp
• Việc ghi lên SBUF sẽ nạp dữ liệu để phát, và việc đọc SBUF
sẽ truy xuất dữ liệu đã nhận đượcà thực ra có 2 SBUF riêng
rẽ
• SCON chứa các bit trạng thái và điều khiển, thanh này được
định địa chỉ bit
• Tần số hoạt động của port nối tiếp hay còn gọi là tốc độ baud
(baud rate) có thể cố định hoặc thay đổi
Xung & Hoi 3
Clk SBUF Q
(write only)
SBUF
(read only)
D
Shift Register
Clk
Baud rate clock
(phát)
Baud rate clock
(thu)
TXD
(P3.1)
8051 internal bus
RXD
(P3.0)
Xung & Hoi 4
11-2. Thanh khi điều khiển port nối tiếp
SM1, SM0: chọn chế độ của port nối tiếp
SM2: cho phép truyền thông đa xử lý
REN: cho phép thu, phải được set để nhận các ký tự
TB8: bit thứ 9 được phát ở chế độ 2 & 3
RB8: bit thứ 9 nhận được
TI: cờ ngắt phát, được set ngay sau khi kết thúc việc phát 1 
ký tự; được xóa bởi phần mềm
RI: cờ ngắt thu, được set ngay sau khi kết thúc việc thu 1 
ký tự; được xóa bởi phần mềm
SM0 SM1 SM2 REN RB8TB8 RITISCON
Xung & Hoi 5
11-3. Các chế độ hoạt động
SM0 SM1 Mode Mô tả Tốc độ baud
0 0 0 Thanh ghi dịch Cố định (fOSC/12)
0 1 1 UART 8-bit Thay đổi (thiết lập
bởi bộ định thời) 
1 0 2 UART 9-bit Cố định (fOSC/12 
hoặc fOSC/64)
1 1 3 UART 9-bit Thay đổi (thiết lập
bởi bộ định thời) 
Xung & Hoi 6
11-3-1. Thanh ghi dịch 8-bit (mode 0)
• Khi phát và thu dữ liệu 8-bit, bit LSB được phát hoặc thu trước
tiên
• Tốc độ baud cố định = fOSC/12
• Chân RxD dùng cho cả việc thu phát dữ liệu trong khi TxD
dùng làm chân xuất clock dịch bit
• Phát: 
– Ghi vào SBUF
– Dữ liệu được dịch ra ngoài trên chân RxD (P3.0)
– Xung clock dịch bit được gửi ra trên chân TxD (P3.1)
– Mỗi bit hợp lệ truyền đi trên RxD trong 1 chu kỳ máy
Xung & Hoi 7
• Thu:
– Chỉ được khởi động khi REN = 1 & RI = 0, nghĩa là phải set 
REN = 1 ở thời điểm bắt đầu chương trình & xóa RI để bắt
đầu công việc thu dữ liệu
– Dữ liệu được dịch vào chân RxD bởi xung clock dịch bit 
(tác động sườn lên)
• 1 Ứng dụng của mode 0:
– Mở rộng thêm các ngõ ra cho 8051
8051
TxD(P3.1)
RxD(P3.0)
Clock
Shift Regsiter
Data
8 ngõ ra mở rộng
Xung & Hoi 8
11-3-2. UART 8-bit có tốc độ baud thay
đổi (mode 1)
• UART là bộ thu phát dữ liệu nối tiếp với mỗi ký tự dữ liệu
được đứng trước bởi 1 bit start và đứng sau bởi 1 bit stop. 
Thỉnh thoảng 1 bit parity được chèn vào.
• Hoạt động chủ yếu của UART là biến dữ liệu phát từ // thành
nt và biến dữ liệu thu từ nt thành //
• Cờ ngắt phát TI được set bằng 1 ngay khi bit stop xuất hiện
trên TxD
1 / baud rate
D0 D1 D2 D3 D4 D5 D6 D7
Start 
bit
Stop 
bit
TI (ready 
for more 
data)
TxD
TI
Xung & Hoi 9
• Việc nhận được khởi động bởi 1 chuyển trạng thái từ 1 xuống
0 trên đường RxD (bit start)
• Bit start sau đó được bỏ qua & 8 bit dữ liệu sau đó được nhận
tuần tự vào thanh ghi dịch bit của port nối tiếp. Khi cả 8 bit 
được nhận, ta có:
– Bit thứ 9 (bit stop) à RB8 của SCON
– 8 bit dữ liệu được nạp vào SBUF
– Cờ ngắt thu RI được set
• Note: Các điều trên chỉ xảy ra nếu trước đó cờ RI = 0 
Xung & Hoi 10
11-4. Khởi động và truy xuất các thanh ghi
• Cho phép nhận: REN trong SCON phải được set bởi phần
mềm để cho phép nhận ký tự
SETB REN
Hoặc
MOV SCON, #xxx1xxxxB
• Thêm vào bit chẵn lẻ: bit P trong PSW được set hoặc xóa ở
mỗi chu kỳ máy để thiết lập việc kiểm tra chẵn cho 8 bit chứa
trong A
MOV C, P ; đưa bit kiểm tra chẵn vào TB8
MOV TB8, C ; bit này trở thành bit thứ 9
MOV SBUF, A ; di chuyển 8 bit dữ liệu vào SBUF
Xung & Hoi 11
• Các cờ ngắt: RI và TI được set bằng phần cứng nhưng phải
xóa bằng phần mềm
CTC nhận 1 ký tự qua port nối tiếp như sau:
INCHAR: JNB RI, $
CLR RI
MOV A, SBUF
RET
CTC phát 1 ký tự qua port nt:
OUTCHAR: JNB TI, $
CLR TI
MOV SBUF, A
RET
Xung & Hoi 12
11-5. Tốc độ baud của port nối tiếp
¸12On-chip OSC
Baud rate 
clock
¸64
On-chip 
OSC
Baud rate 
clock
¸32
SMOD=0
SMOD=1
¸32
Timer 1 
overflow
Baud rate 
clock
¸16
SMOD=0
SMOD=1
Mode 0
Mode 2
Mode 1 & 3
Xung & Hoi 13
Dùng timer 1 làm xung clock tốc độ baud
• Thông thường khởi động thanh ghi TMOD ở chế độ tự động
nạp lại 8-bit (mode 2) & đặt giá trị nạp lại thích hợp vào thanh
ghi TH1 để có tốc độ tràn đúng, từ đó tạo ra tốc độ baud
• MOV TMOD, #0010xxxxB ;for timer 1
• Baud rate = Timer 1 overflow / 32 hay /16 tùy thuộc giá trị bit 
SMOD
Xung & Hoi 14
Bài toán 11.1
• Tính toán các giá trị nạp lại cho thanh ghi TH1 đối với các tốc
độ baud 9600, 4800, 2400, 1200 (XTAL = 11,0592MHz)?
~7%8929-7 (F9H)1129600
0,16%1202-26 (E6H)0121200
0%1200-24 (E8H)011,05921200
0%2400-12 (F4H)011,05922400
0%4800-6 (FAH)011,05924800
0%9600-3 (FDH)011,05929600
0%19200-3 (FDH)111,059219200
Sai sốTốc độ baud thực tế
Giá trị nạp
cho TH1SMOD
Tần số thạch
anh (MHz)
Tốc độ
baud
Xung & Hoi 15
Tóm lại:
Nếu PCON.7 = 0
• TH1 = 256 - ((Crystal / 384) / Baud) 
Nếu PCON.7 =1 
• TH1 = 256 - ((Crystal / 192) / Baud)
Làm vd với baud rate 19200 để chứng tỏ vai trò bit SMOD
11.059Mhz crystal:
• TH1 = 256 - ((Crystal / 384) / Baud)
TH1 = 256 - ((11059200 / 384) / 19200 )
TH1 = 256 - ((28799) / 19200)
TH1 = 256 - 1.5 = 254.5
Xung & Hoi 16
• Nếu set 254 ta đạt được 14,400 baud còn với 255 ta đạt được
28,800 baud 
• Set PCON.7 (SMOD). Ta có:
TH1 = 256 - ((Crystal / 192) / Baud)
TH1 = 256 - ((11059200 / 192) / 19200)
TH1 = 256 - ((57699) / 19200)
TH1 = 256 - 3 = 253
Kết luận với 19,200 baud (11.0592MHz crystal) ta phải:
1. Cấu hình Port nối tiếp mode 1 or 3
2. Timer 1 hoạt động mode 2 (8-bit auto-reload)
3. Set TH1 bằng 253 
4. Set PCON.7 (SMOD)
Xung & Hoi 17
Các bài toán
• EBT11.1. Khởi động port nt: Viết chuỗi lệnh khởi động port 
nối tiếp hoạt động như 1 UART 8-bit với tốc độ baud 2400. 
Dùng timer 1 để cung cấp xung clock tốc độ baud?
• EBT11.2. CTC xuất ký tự: Viết CTC mang tên OUTCHAR 
phát mã ASCII 7-bit chứa trong A ra port nối tiếp với bit kiểm
tra chẵn là bit thứ 8. Việc trở về từ CTC phải không làm thay
đổi nội dung thanh chứa A?
• EBT11.3. CTC thu ký tự: Viết CTC mang tên INCHAR để
thu 1 ký tự từ port nối tiếp & trả về mã ASCII 7-bit trong A. 
Sử dụng kiểm tra chẵn trong bit thứ 8 thu được và set cờ nhớ
bằng 1 nếu có lỗi chẵn lẻ?
Xung & Hoi 18
MAX 232
Xung & Hoi 19

File đính kèm:

  • pdfbai_giang_ky_thuat_vi_dieu_khien_le_xung.pdf