6. Các nhóm lệnh cơ bản của 8051
TS Nguyễn Hồng Quang
Electrical Engineering
1
6.1 Lập trình có cấu trúc
• Lập trình tuần tự (sequential programming)
• Lập trình cấu trúc (structure programming)
• Lập trình hướng đối tượng (object oriented
programming)
Electrical Engineering
2
1
6.2 Các đặc trưng lập trình cấu trúc
• Dữ liệu + giải thuật = chương trình
• Chương trình
– Chương trình con
– Có 3 loại cú pháp cơ bản
• Lệnh gán
• Lệnh if .... then
• Lệnh do while
Electrical Engineering
3
6.3 Các nhóm lệnh 8051
•6.3.1 Nhóm lệnh chuyển dữ liệu
•6.3.2 Nhóm lệnh số học
•6.3.3 Nhóm lệnh logic
•6.3.4 Nhóm lệnh xử lý bit
•6.3.5 Nhóm lệnh rẽ nhánh
•6.3.6 Ví dụ lệnh vòng lặp
Electrical Engineering
4
2
6.3.1 Nhóm lệnh chuyển dữ liệu
Electrical Engineering
5
6.3.1 Truyền dữ liệu với RAM ngoài
Electrical Engineering
6
3
6.3.2 Lệnh xử lý lôgic
7
Electrical Engineering
6.3.2 Ví dụ
Electrical Engineering
8
4
6.3.2 Ví dụ XOR
Electrical Engineering
9
6.3.2 Kiểm tra dùng XOR
Đọc
ọc và kiểm
ể ttraa cổng
cổ g P1 xem
e nóó có chứa
c ứa giá
g á trị
t ị A5H
5 không?
ô g?
Nếu có gửi FFH đến cổng P2, nếu không xoá nó
Electrical Engineering
10
5
6.3.2 Ví dụ về debounce XOR
11
Electrical Engineering
6.3.2 Lấy bù 2
Electrical Engineering
12
6
6.3.2 Lệnh xử lý lôgic (tiếp)
13
Electrical Engineering
6.3.2 Ví dụ
Electrical Engineering
14
7
6.3.2 Quay có nhớ
Electrical Engineering
15
6.3.2 Nhân và Chia cơ số 2
Electrical Engineering
16
8
6.3.2 Ví dụ
Viết một chương trình để tìm số các số 1 trong một byte đã
cho.
Electrical Engineering
17
6.3.2 Ví dụ ASCII - BCD
Giả sử thanh ghi A có số mã BCD hãy viết một chương trình để chuyển
đổi mã BCD đó về hai số ASCII và đặt chúng vào R2 và R6
Electrical Engineering
18
9
6.3.3 Lệnh làm việc với bit
Electrical Engineering
19
6.3.3 Lệnh làm việc với bit
Electrical Engineering
20
10
6.3.3 Ví dụ
21
Electrical Engineering
6.3.3 Ví dụ tiếp
Trạng thái của các bít P1.2 và P1.3 của cổng vào/ra P1 phải được lưu cất
trước khi chúng được thay đổi. Hãy viết chương trình để lưu trạng thái
của P1.2 vào vị trí bít 06 và trạng thái P1.3 vào vị trí bít 07
Electrical Engineering
22
11
6.3.3 Ví dụ với bit C
Hãy viết một chương trình để hiển thị (“New Message”) trên
màn hình LCD nếu bít 12H của RAM có giá trị cao. Nếu
nóó có
ó giá
iá trịị thấp
hấ thì
hì LCD hiển
hiể thị
hị (“No
(“N New
N M
Message”).
”)
Electrical Engineering
23
6.3.4 Lệnh nhảy có điều kiện
Electrical Engineering
24
12
6.3.4 Tính tổng
Hãy tìm tổng của các giá trị 79H, F5H và E2H. Đặt vào trong
các thanh ghi R0 (byte thấp) và R5 (byte cao).
25
Electrical Engineering
6.3.4 Chuỗi ký tự
Electrical Engineering
26
13
6.3.4 Các lệnh nhảy không điều kiện
27
Electrical Engineering
6.3.4 Ví dụ JMP
Electrical Engineering
28
14
6.3.4 Lệnh làm việc với bảng dữ liệu
MOVC, nghĩa là move constant
Electrical Engineering
29
6.3.4 Ví dụ bảng tìm kiếm
Electrical Engineering
30
15
6.3.4 Lệnh nhảy với cờ
Electrical Engineering
31
6.3.5 Lưu ý với lệnh CJNE
• Nếu tham số 1 < tham số 2,
2 bit nhớ C được
đặt lên 1
• Nếu tham số 1 > tham số 2, bit nhớ C được
xóa về 0
Electrical Engineering
32
16
6.3.5 Ví dụ
33
Electrical Engineering
6.3.5 Ví dụ lệnh if
Giả sử P1 là một cổng đầu vào được nối tới một cảm biến nhiệt. Hãy viết chương
trình đọc nhiệt độ và kiểm tra nó đối với giá trị 75. Theo kết quả kiểm tra hãy
đặt giá trị nhiệt độ vào các thanh ghi được chỉ định như sau:
Nếu T = 75
thì A = 75
Nếu T < 75
thì R1 = T
Nếu T > 75
thì R2 = T
Electrical Engineering
34
17
6.3.5 Phát biểu While/do
• while [condition] Do
•
các lệnh chương trình
•
do
•
các lệnh chương trình
•
while
hil (...)
( )
Electrical Engineering
35
6.3.5 Ví dụ tính tổng
• Tính tổng dãy số
• Chiều dài của dãy số chứa trong thanh ghi
R7
• Địa chỉ bắt đầu dãy số trong thanh ghi R0
Electrical Engineering
36
18
6.3.5 Ví dụ
• [sum] = 0
• WHILE (length > 0) Do
– [sum = sum + @pointer]
– [pointer = pointer + 1]
– [[length
g = length
g – 1]]
• End
37
Electrical Engineering
6.3.5 Ví dụ
Electrical Engineering
38
19
6.3.5 Phát biểu case
case [ expression] of
0: do0
1: do1
.....
n: don
d
default: do_default
End_case
Electrical Engineering
39
6.3.5 Ví dụ case (tiếp)
Call InChar
CJNE A, #’0’, Skip1
Act0:
.................
JMP Exit
Skip1: CJNE A, # ’1’, Skip2
Act1:
..................
JMP Exit
.......................................
Exit:
DoN
Electrical Engineering
40
20
6.3.5 Ví dụ T-bird light system
41
Electrical Engineering
6.3.5 Yêu cầu
•
•
•
•
Brake bật 6 LEDs.
LEDs
Dừng tắt 6 LEDs.
Rẽ trái thì bật 3 LED trái tuần tự
Rẽ phải thì bật 3 LED phải tuần tự
Electrical Engineering
42
21
6.3.6 Lệnh số học
Electrical Engineering
43
6.3.6 Ví dụ lệnh cộng
Cộng 2 số 16-bit tại RAM 30h (high byte) và 31h
(low byte),
byte) cộng với 1045h và lưu tại32h (high
byte) and 33h (lowbyte)
Electrical Engineering
44
22
6.3.6 Sự khác nhau cơ bản giữa
ADD và ADDC
• Lệnh ADD tương đương với lệnh
– CLR C
– ADDC
• Cờ OV xác định số có phải là số âm không
– Ví dụ:
ụ 20h + 70h = 90 h ((tươngg đươngg -10h))
Electrical Engineering
45
6.3.6 Ví dụ về MUL, DIV
Electrical Engineering
46
23
6.3.6 Lệnh DA
• Lệnh DA (Decimal Adjust for addition điều chỉnh thập
phân đối với phép cộng) trong 8051 để dùng hiệu chỉnh sự
sai lệch đã nói trên đây liên quan đến phép cộng các số
BCD
•
•
Nếu 4 bít
Nế
bí thấp
hấ lớn
lớ hơn
h 9 hoặc
h ặ nếu
ế AC = 1 thì
hì nóó
cộng 0110 vào 4 bít thấp.
Nếu 4 bit cao lớn hơn 9 hoặc cờ CY = 1 thì nó cộng
0110 vào 4 bit cao.
Electrical Engineering
47
24