NGHIÊN CỨU vi ĐIỀU KHIỂN
8051
Hà Nội, tháng 9 năm 2020
VI XỬ LÝ ( MICROPROCESSOR )
KHÁI NIỆM
- Bộ vi xử lý là một mạch tích hợp hàng ngàn thậm chí hàng triệu Transistor (LSI, VLSI, MSI) được kết
nối với nhau. Các Transistor cùng nhau làm việc để lưu trữ và xử lý dữ liệu cho bộ VXL. Chúng có thể
thực hiện nhiều chức năng hữu ích.
- Chức năng của một bộ VXL được xác định bằng phần mềm ( có thể lập trình được).
LSI: Large Scale Integration
VLSI : Very Large Scale Integration
MSI : Medium Scale Integration
VI XỬ LÝ 8051
SƠ ĐỒ KHỐI TỔNG QUÁT CỦA VI ĐIỀU KHIỂN 8051
External
by Timers, Serial
Port
On-chip
ROM for
program
code 4K
Interrupt
Control
Timer/Counter
On-chip
RAM
128Byte
Timer 1
Counter
Inputs
T1, T0
Timer 0
CPU
Bus
Control
OSC
4 I/O Ports
Serial
Port
Crystal
33pF
EA
ALE
P0
P1
P3
Address/Data
P2
T×D
R×D
VI XỬ LÝ 8051
1. CÁC ĐẶC TRƯNG VÀ SƠ ĐỒ CHÂN VĐK 8051
a) Các đặc trưng ( Feature) 8051:
• 4 KB ROM nội ( on– chip)
• 128 bytes RAM nội ( on- chip)
• 64 KB ROM ngồi
• 64 KB RAM ngồi
• Có khả năng truy cập 210 bit
• Truyền nối tiếp chuẩn UART
• 2 bộ Timer/ Counter 16 bit
• Có 6 nguồn ngắt và có 2 mức ưu tiên ngắt
• Bộ tạo dao động on-chip
• 4 Port xuất/ nhập IO 8bit
ã Lnh nhõn, chia mt 4 às
VI XỬ LÝ 8051
b) Sơ đồ chân :
4 cổng = 4*8 chân = 32 chân
8 chân đặc biệt : Vcc , GND, rST, XTAL1, XTAL2,
, ALE,
VI XỬ LÝ 8051
8 chân đặc biệt:
Vcc ( chân 40)
Cung cấp nguồn cho chip
Nguồn +5V ± 5%
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
Tần số thạch anh của 8051 thường là 12 MHz hoặc 11,0582 MHz (
fosc )
Nếu kết nối VĐK với máy tính buộc phải dùng fosc = 11,0592MHz
VI XỬ LÝ 8051
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
Mạch reset có chống rung
( chân 31) : External Access
nối GND chỉ định rằng code lưu trên bộ nhớ ngoài
& ALE dùng cho ROM ngồi
Với 8051, 8031, 8032 thì
nối Vcc : truy cập bộ nhớ
trong
“/” : Chỉ dịnh tác động mức thấp
VI XỬ LÝ 8051
(chân 29) : Program Store Enable
Output, cho phép truy xuất bộ nhớ chương trình ngồ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)
ALE (pin 30) : Address Latch Enable
•
Là chân output cho phép chốt địa chỉ byte thấp của cổng đa hợp chung 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ớ. Trong nửa chu kỳ bộ nhớ còn lại, P0 sẽ xuất/
nhập dữ liệu
• ALE có f = (1/6)fclock = (1/6)fosc
•
Có 1 ngoại lệ: trong thời gian thực thi lệnh MOVX, một xung ALE bị bỏ qua
VI XỬ LÝ 8051
Sơ đồ ghép nối vi điều khiển với bộ nhớ ngoài:
32KB= 256Kbit
VI XỬ LÝ 8051
Các cổng vào/ra ( I/O = Input/ Output)
4 cổng I/O mỗi cổng 8 chân -> 32 chân 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:
Mặc định là cổng ra
Nếu muốn là cổng vào thì out ra mức 1 mọi chân trước khi đọc về
Ví dụ: định nghĩa P1 là cổng vào:
MOV
MOV A, P1
P1, #0FFH
VI XỬ LÝ 8051
Cổng P0:
Đặc điểm: Ngoài chức năng vào/ra thơng thường cịn có chức năng sau:
- Là cổng Open Drain (cực máng để hở) khác so với các cổng P1, P2, P3 cịn lại: phải mắc
điện trở
treo ở ngồi Rpull-up
- Là cổng đa hợp : AD0 ÷ AD7
- Vừa xuất nhập dữ liệu (Data)
- Vừa xuất nhập địa chỉ (Address): xuất nhập địa chỉ byte thấp
VI XỬ LÝ 8051
Cổng P1:
Đặc điểm: Chỉ có chức năng vào/ra thơng thường
Cổng P2: Đặc điểm: Ngồi chức năng vào/ra thơng thường cịn có chức năng xuất địa chỉ byte
cao: A8 ÷ A15 Cổng P3: Đặc điểm: Ngồi chức năng vào/ra thơng thường cịn có các chức năng
khác
Gọi là cổng đa chức
năng
Port
pin
Name
Function
P3.0
RXD
Serial input port (Nhận)
P3.1
TXD
Serial output port ( Truyền)
P3.2
External interrupt 0 (Ngắt ngoài 0)
P3.3
External interrupt 1 (Ngắt ngoài 1)
P3.4
T0
Counter 0 external input (Đầu vào bộ
đếm 0)
P3.5
T1
Counter 0 external input (Đầu vào bộ
đếm 0)
P3.6
external data memory write strobe
TỔ CHỨC BỘ NHỚ VĐK 8051
2. TỔ CHỨC BỘ NHỚ CỦA VĐK 8051
Không gian bộ nhớ 8051
Program Memory (Read
Only)
7FFFH
FFFFh
0000
H
8FFFH
32
K
Data Memory (Read/
Write )
FFFFFh
Extern
al
1000
H
0FFFH
0FFFh
0
Externa
l
0000h
64
K
Intern
al
0000
H
4K
Bộ nhớ chương trình
00FFh
0000h
256byt
e
Internal
128byte
Bộ nhớ dữ liệu
64K
TỔ CHỨC BỘ NHỚ VĐK 8051
256
DE
C
BIN
HEX
0
0000
0
1
0001
1
2
0010
2
3
0011
3
4
0100
4
5
0101
5
6
0110
6
7
0111
7
8
1000
8
Địa chỉ của 4KB là: 0000H ÷ 0FFFH
9
1001
9
4KB = * Byte =
...
Cần 12 bit để định địa chỉ cho 4KB
...
12
1100
0CH
254
1111
1110
0FEH
255
1111
1111
0FFH
Byte= 1KB (1 Kbyte)
KB = 1MB
MB = 1GB
GB = 1TB
Dung lượng bộ nhớ 4KB =4 * Byte = 4*
1024 Byte =4096 Byte (0- 4095)
TỔ CHỨC BỘ NHỚ VĐK 8051
MAIN
MAIN
Chương
Chương
FFFH
trình chính
0030H
030H
023H
01BH
8
8
013H
00BH
003H
000H LJMP MAIN
Bộ nhớ chương
trình trong
8
Điểm nhập
của ngắt port
nối tiếp
Điểm nhập
của ngắt
Timer 1
Điểm nhập
của ngắt
ngoài
Điểm nhập
của ngắt
Timer 0
8
Điểm nhập của
ngắt ngoài 0
3
Điểm nhập của
reset hệ thống
trình chính
8
Điểm nhập của
ngắt port nối
tiếp
8
Điểm nhập của
ngắt Timer 1
0023H
001BH
0013H
000BH
0003H
0000H
8
8
8
3
Điểm nhập
của ngắt
ngoài
Điểm nhập của
ngắt Timer 0
Điểm nhập
của ngắt
ngoài 0
Điểm nhập của
reset hệ thống
Bộ nhớ chương
trình ngồi
Nhảy tới các chương
trình phục vụ ngắt
Nhảy tới các
chương trình phục
vụ ngắt
TỔ CHỨC BỘ NHỚ VĐK 8051
Bộ nhớ dữ liệu
RAM
Byte
address
Bit address
TỔ CHỨC BỘ NHỚ VĐK 8051
Bộ nhớ dữ liệu RAM
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
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:
MOVA,2FH
: đọc cả byte
ORL A,#10000000B: set cả bit
MOV 2FH,A
: ghi trở lại cả byte
TỔ CHỨC BỘ NHỚ VĐK 8051
Bộ nhớ dữ liệu RAM
Các băng thanh ghi (register )
• Các lệnh dùng thanh ghi là những lệnh ngắn & thực
hiện nhanh hơn
– MOVA,R5
– MOVA,05H
: 1 byte
: 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
Ngăn xếp
• 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.
TỔ CHỨC BỘ NHỚ VĐK 8051
Bộ nhớ dữ liệu RAM
Các thanh ghi đặc biệt : Special Function Register _SFR
TỔ CHỨC BỘ NHỚ VĐK 8051
Thanh ghi từ trạng thái: PSW
• Thanh ghi PSW (bit addressable)
C
AC
F0
RS1
RS0
OV
--
P
Cờ nhớ
PSW.7
C
Cờ nhớ phụ
PSW.6
AC
Available to user for general purpose
PSW.5
–
Bit chọn dãy thanh ghi 1
PSW.4
RS1
Bit chọn dãy thanh ghi 0
Cờ tràn
PSW.2
OV
Dự trữ - User define bit
PSW.1
–
Cờ chẵn lẻ
PSW.0
P
P =1: số con 1 là lẻ; =0 nếu số con 1 là chẵn
RS1
RS0
REGISTER
Byte
BANK
Address of
R0-R7
0
0
0
00H-07H
0
1
1
08H-0FH
1
0
2
10H-17H
1
D4
3
18H-1FH
1
D7
D6
D5
D3
D2
D1
D0
Địa chỉ
TỔ CHỨC BỘ NHỚ VĐK 8051
• 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
SETB
SETB
RS1
RS0
MOV
A,R7
TỔ CHỨC BỘ NHỚ VĐK 8051
• 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
KQ -114
vượt không
quá 255
• 8EH
biễukhi
diễn
đúng với KQ mong muốn là 142 nên OV = 1
• 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
• MOVA,#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
3. TẬP LỆNH HỌ µc8051
Các quy ước trong câu lệnh và địa chỉ
+ Rn: Thanh ghi R0-R7 của băng thanh ghi hiện hành đang được chọn để định địa chỉ thanh ghi.
+ Direct: Địa chỉ 8 bit của ô nhớ dữ liệu nội trú, nó có thể là ơ nhớ trong RAM nội hoặc SFR. (00h-FFh)
+ @Ri: Ô nhớ 8 bit của RAM nội được định địa chỉ gián tiếp thơng qua thanh ghi R0 họăc R1.
+ Source (Src): tốn hạng nguồn, có thể là Rn hoặc direct hoặc @Ri.
+ Dest: Tốn hạng đích, có thể là Rn hoặc direct hoặc @Ri.
+ #Data: Hằng số 8 bit chứa trong lệnh.
+ #Data16: Hằng số 16 bit chứa trong lệnh.
+ Bit: Bit được định địa chỉ trực tiếp trong RAM nội trú hoặc SFR.
+ Rel: Offset 8 bit có dấu (từ -128 đến +127). Nó được lệnh SJMP và các lệnh nhảy có điều kiện sử
dụng.
+ Addr11: địa chỉ 11 bit của bộ nhớ chương trình , được lệnh ACALL và AJMP sử dụng.
+ Addr16: địa chỉ 16 bit của 64Kb bộ nhớ chương trình, được lệnh LCALL và LJMP sử dụng
3. TẬP LỆNH HỌ µc8051
Các ký hiệu dùng trong mơ tả lệnh
Ký hiệu
Ý nghĩa
Được thay thế bởi…
()
(( ))
rrr
Nội dung của...
Dữ liệu được trỏ bởi…
1 trong 8 thanh ghi (R0-R7) của các băng thanh ghi
dddddddd
Các bit dữ liệu
aaaaaaaa
Các bit địa chỉ
bbbbbbbb
Địa chỉ của 1 bit
i
eeeeeeee
Định địa chỉ gián tiếp thông qua R0 hoặc R1
Địa chỉ tương đối 8 bit
3. TẬP LỆNH HỌ µc8051
1.Các lệnh di chuyển:
a)Kiểu Byte: Cú pháp câu lệnh: MOV <dest-byte>, <src-byte>
Chức năng: Sao chép nội dung của tốn hạng nguồn vào tốn hạng đích, nội dung của tốn hạng nguồn
khơng thay đổi. Lệnh này khơng làm ảnh hưởng tới các cờ và các thanh ghi khác.
Câu lệnh
Số
byte
Số chu
kỳ
Mã lệnh
Hoạt động
MOV A, Rn
1
1
11101rrr
(A) ← (Rn
MOV A, direct
2
1
11100101 aaaaaaaa
(A) ← (direct)
MOV A, @Ri
1
1
1110111i
(A) ← ((Ri))
MOV A, #data
2
1
01110100 dddddddd
(A) ← #data
MOV Rn, A
1
1
11111rrr
(Rn) ← (A)
MOV Rn, direct
2
2
10101rrr aaaaaaaa
(Rn) ← (direct)
MOV Rn, #data
2
1
01111rrr dddddddd
(Rn) ← #data
MOV direct, A
2
1
11110101 aaaaaaaa
(direct) ← (A)
MOV direct, Rn
2
2
10001rrr aaaaaaaa
(direct) ← (Rn)
MOV direct, direct
3
2
10000101 aaaaaaaa aaaaaaaa
(direct) ← (direct)
MOV direct, @Ri
2
2
1000011i aaaaaaaa
(direct) ← ((Ri))
MOV direct, #data
3
2
01110101 aaaaaaaa dddddddd
(direct) ← #data
MOV @Ri, A
1
1
1111011i
((Ri)) ← (A)
MOV @Ri, direct
2
2
1010011i
((Ri)) ← (direct)
MOV @Ri, #data
2
1
0111011i dddddddd
((Ri)) ← #data