1
1
Electrical Engineering
Các nhóm lệnh cơ bản của 8051
TS Nguyễn Hồng Quang
Electrical Engineering
2
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
•Lập trình hướng đối tượng
2
Electrical Engineering
3
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
4
Các nhóm lệnh 8051
•NhãmlÖnhchuyÓnd÷liÖu
•Nhãm lÖnh sè häc
•Nhãm lÖnh logic
•Nhãm lÖnh xö lý bit
•Nhãm lÖnh rÏ nh¸nh
3
Electrical Engineering
5
Nhóm lệnh chuyển dữ liệu
Electrical Engineering
6
Truyền dữ liệu với RAM ngoài
4
Electrical Engineering
7
Lệnh xử lý lôgic
Electrical Engineering
8
Ví dụ
5
Electrical Engineering
9
Ví dụ XOR
Electrical Engineering
10
Kiểm tra dùng XOR
Đọc và kiểm tra cổng P1 xem nó có chứa giá trị A5H không?
Nếu có gửi FFH đến cổng P2, nếu không xoá nó
6
Electrical Engineering
11
Ví dụ về debounce XOR
Electrical Engineering
12
Lấy bù 2
7
Electrical Engineering
13
Lệnh xử lý lôgic (tiếp)
Electrical Engineering
14
Ví dụ
8
Electrical Engineering
15
Quay có nhớ
Electrical Engineering
16
Nhân và Chia cơ số 2
9
Electrical Engineering
17
Ví dụ
Viết một chương trình để tìm số các số 1 trong một byte đã
cho.
Electrical Engineering
18
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
10
Electrical Engineering
19
Lệnh làm việcvới bit (tiếp)
Electrical Engineering
20
Lệnh làm việcvớibit
11
Electrical Engineering
21
Ví dụ
Electrical Engineering
22
Ví dụ tiếp
Trạng thái của các bít P1.2 và P1.3 củacổng vào/ra P1 phải đượclưucất
trước khi chúng đượcthayđổi. Hãy viếtchương trình để lưutrạ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
12
Electrical Engineering
23
Ví dụ vớibit C
Hãy viếtmộtchương trình để hiểnthị (“New Message”) trên
mànhìnhLCD nếu bít 12H củaRAM cógiátrị cao. Nếu
nó có giá trị thấpthìLCD hiểnthị (“No New Message”).
Electrical Engineering
24
Lệnh nhảycóđiềukiện
13
Electrical Engineering
25
Tính tổng
Hãy tìm tổng củacácgiátrị 79H, F5H và E2H. Đặt vào trong
các thanh ghi R0 (byte thấp) và R5 (byte cao).
Electrical Engineering
26
Chuỗikýtự
14
Electrical Engineering
27
Các lệnh nhảy không điềukiện
Electrical Engineering
28
Ví dụ JMP
15
Electrical Engineering
29
Lệnh làm việcvớibảng dữ liệu
MOVC, nghÜa lµ move constant
Electrical Engineering
30
Ví dụ bảng tìm kiếm
16
Electrical Engineering
31
Lệnh nhảyvớicờ
Electrical Engineering
32
Lưuý vớilệnh CJNE
•Nếu tham số 1 < tham số 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
17
Electrical Engineering
33
Ví dụ
Electrical Engineering
34
Ví dụ lệnh if
Giả sử P1 là mộtcổng đầuvàođượcnốitớimộtcảmbiến nhiệt. Hãy viếtchương
trình đọc nhiệt độ và kiểmtranóđốivới giá trị 75. Theo kếtquả kiểmtrahãy
đặt giá trị nhiệt độ vào các thanh ghi đượcchỉđịnh như sau:
Nếu T = 75 thì A = 75
Nếu T < 75 thì R1 = T
Nếu T > 75 thì R2 = T
18
Electrical Engineering
35
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 ( )
Electrical Engineering
36
Ví dụ tính tổng
•Tínhtổng dãy số
•Chiềudàicủadãysố chứa trong thanh ghi
R7
• Địachỉ bắt đầudãysố trong thanh ghi R0
19
Electrical Engineering
37
Ví dụ
•[sum] = 0
• WHILE (length > 0) Do
– [sum = sum + @pointer]
– [pointer = pointer + 1]
– [length = length – 1]
•End
Electrical Engineering
38
Ví dụ
20
Electrical Engineering
39
Phát biểucase
case [ expression] of
0: do0
1: do1
n: don
default: do_default
End_case
Electrical Engineering
40
Ví dụ case (tiếp)
Call InChar
CJNE A, #’0’, Skip1
Act0:
JMP Exit
Skip1: CJNE A, # ’1’, Skip2
Act1:
JMP Exit
Exit:
DoN
21
Electrical Engineering
41
Ví dụ T-bird light system
Electrical Engineering
42
Yêu cầu
•Brake bật 6 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ự
22
Electrical Engineering
43
Lệnh số học
Electrical Engineering
44
Ví dụ lệnh cộng
Cộng 2 số 16-bit tại RAM 30h (high byte) và 31h
(low byte), cộng với 1045h và lưu tại32h (high
byte) and 33h (lowbyte)
23
Electrical Engineering
45
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ương đương -10h)
Electrical Engineering
46
Ví dụ về MUL, DIV
24
Electrical Engineering
47
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 biýt thấp lớn hơn 9 hoặc nếu AC = 1 thì 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.