Tải bản đầy đủ (.pdf) (24 trang)

6. Các nhóm lệnh cơ bản của 8051, TS Nguyễn Hồng Quang

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (398.91 KB, 24 trang )

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



×