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

Tài liệu Ứng dụng KIT 8051 dùng để chuyển đổi A/D-D/A, chương 10 pptx

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 (81.53 KB, 9 trang )

Chương 10:
PHÂN LOẠI LỆNH
Các lệnh 8051 được chia thành 5 nhóm như sau:
 Số học
 Logic
 Trao đổi dữ liệu
 Luận lý
 Rẽ nhánh chương trình
Các lệnh số học
Các lệnh số học thường sử dụng 4 mode đònh vò. Lệnh
ADD A có thể được viết bằng nhiều cách khác nhau:
ADDA, 7FH (Đònh vò trực tiếp)
ADDA, @R0 (---------gián tiếp)
ADDA, R7 (---------thanh ghi)
ADDA, #35H (--------- tức thời)
Tất cả các lệnh số học thi hành trong một chu kỳ máy,
ngoại trừ lệnh INC DPTR (2 chu kỳ máy), MUL AB và DIV
AB (4 chu kỳ máy).
8051 cung cấp cách đònh vò rất mạnh cho vùng RAM nội
của nó. Bất kỳ byte nhớ nào cũng đều có tể tăng, giảm bằng
đònh vò trực tiếp mà không cần thông qua thanh ghi tích luỹ.
Lệnh INC có thể thao tác trên con trỏ dữ liệu (16 bit).
Nhưng lệnh DEC không được đònh nghóa trên con trỏ. Do đó để
thực hiện được điều này ta có các lệnh sau:
DEC DPL ; giảm byte thấp DPTR
MOV R7, DPL ; chuyển vào DPL
CJNE R7, #0FFH, SKIP ; nếu vượt quá FF
DEC DPH ; giảm luôn byte cao
SKIP : (tiếp tục)
Các lênh MUL AB và DIV AB chỉ thao tác trên các thanh
ghi A và B.


Lệnh Logic :
Các lệnh logic biểu diễn các toán tử luận lý như AND, OR,
EA-OR và NOT … Các lệnh này trên từng bit của byte dữ liệu.
Ví dụ thanh ghi ACC chứa số 10101101B thì lệnh:
ANL A, #10110010B
Chứa kết quả 10100000 vào thanh ghi ACC. Các mode đònh vò
trong lệnh logic cũng giống như trong lệnh số học. Tất cả các
lệnh logic dùng đến thanh ghi ACC như một toán hạng đều là
những lệnh một chu kỳ. Các lệnh khác đều chiếm 2 chu kỳ máy.
Lệnh logic có thể thao tác trực tiếp bất cứ byte nào trong
vùng nhớ nội. Lệnh XRL <thanh ghi>, #data đảo nhanh và dễ
dàng các bit của port.
XRL P1, #0FFH;
Lệnh này mô tả hoạt động read-modify-write. 8 bit của
port 1 được đọc, sau đó mỗi bit của XOR với bit tương ứng trong
byte dữ liệu tức thời đều là 1, XOR sẽ đảo mỗi bit được đọc. Kết
quả được viết trở lại port 1.
Các lệnh chuyển dòch dữ liệu:
RAM nội
Các lệnh chuyển dòch dữ liệu trong vùng RAM nội chỉ
chiếm 1 hoặc 2 chu kỳ máy. Lệnh có dạng:
MOV <đích>, <nguồn>
Một nét đặc trưng của họ MSC-51 là stack nằm trong vùng
RAM nội và lớn dần lên phía tên của bộ nhớ. Lệnh PUSH trước
tiên tăng con trỏ stack, sau đó mới sao chép byte vào stack.
PUSH và POP chỉ dùng đònh vò trực tiếp. Thế nhưng bản thân
stack lại dùng đònh vò trực tiếp thông qua con trỏ stack (SP).
8031/8051 không dùng 128 byte cao trong vùng nhớ nội
làm stack. Nếu SP vượt quá 127 bytes được push bò mất và byte
được pop không xác đònh.

Lệnh dòch chuyển dữ liệu 16-bit (MOV dùng để khởi động
con trỏ dữ liệu.
Lệnh
XCVA, <source>
Chuyển đổi dữ liệu giữa A và byte được đònh vò.
Lệnh
XCHD A, @R1
chuyển đổi 4 bit thấp của thanh ghi ACC với byte được R1 chỉ
đến.
RAM ngoài
Dòch chuyển dữ liệu giữa bộ nhớ trong và ngoài sử dụng
mode đònh vò gián tiếp. Đòa chỉ gián tiếp có thể là một byte hay
2 byte (DPTR). Các lệnh dòch chuyển dữ liệu thao tác trên bộ
nhớ ngoài đều chiếm hai chu kỳ máy và dùng thanh ghi tích luỹ
làm toán hạng nguồn hoặc đích.
Look-Up Tables
Hai lệnh được cho sẵn để đọc một bảng dữ liệu trong bộ
nhớ chương trình. Khi truy xuất đến vùng nhớ chương trình thì
nội dung của bảng chỉ được đọc mà không được ghi. Từ gợi nhớ
MOVC tức là “move constant”. MOVC dùng thanh ghi đếm
chương trình cũng như con trỏ dữ liệu kàm thanh ghi nền và
thanh ghi tích luỹ làm offset.
MOVC A,@A+DPTR ;
Có thể đọc được một số trong bảng 256 phần tử vào thanh ghi
tích luỹ. Trong đó thanh ghi tích luỹ chỉ đến một vò trí trong còn
con trỏ DPTR chỉ đến vò trí đầu bảng.
MOVC A,@A+PC;
Cũng tương tự như trên, chỉ khác là thanh ghi PC được
dùng làm thanh ghi nền và bảng được truy xuất thông qua
chương trình con. Trước tiên chỉ số yêu cầu được nạp cho thanh

ghi tích luỹ sau đó chương trình con được gọi. Việc khởi động và
gọi cụ thể như sau:
MOV A,ENTRY_NUMBER
CALL LOOK_UP
.
.
.
LOOK_UP : INC A
MOVC A, @A+PC
Ret
TAB: DB data, data, data …
Bảng được đặt ngay sau lệnh RET của chương trình con.
Lệnh INC cần thiết vì PC sẽ chỉ đến lệnh RET sau khi thi hành
MOVC. Việc tăng thanh ghi A cho phép nhảy qua khỏi lệnh
RET.
Các lệnh luận lý
Các lệnh luận lý của 8051 thao tác trên bit đơn. RAM nội
cung cấp 128 bit và các thanh ghi chức năng cung cấp 128 bit
khác. Lệnh truy xuất đến các bit thông thường như set, xóa, đảo,
AND, OR …
Tất cả các bit đều truy xuất bằng đònh vò trực tiếp với các
bit có đòa chỉ từ 00H – 7Fh trong 128 đòa chỉ thấp và 80H-FFH
trong SFRs. Các bit trong vùng đòa chỉ thấp đạt tại 20F đến 2FH,
được đánh số lần lượt từ bit 0 của đòa chỉ 200H (bit 00H) đến bit
7 của đòa chỉ 2FH (bit 7Fh).
Ví dụ
SETB P.1.7 set bit 7 port 1
Bit carry trong PSW được sử dụng như single-bit
accumulator.
Ví dụ

CLR C
CLR CY ; xóa carry
Test bit
Các lệnh test bit thường là các lệnh rẽ nhánh chương trình.
Chúng kiểm tra trạng thái các bit để nhảy đến chương trình
tương ứng nếu thỏa điều kiện.
Lệnh rẽ nhánh chương trình
Có một số lệnh điều khiển dòng chương trình, chúng gồm
các lệnh gọi chương trình con và trả về từ một chương trình con
hoặc rẽ nhánh có điều kiện và không có điều kiện. Những khả
năng này có thể được cải tiến hơn nữa khi sử dụng 3 mode đònh
vò trong các lệnh rẽ nhánh chương trình.
Có 3 kệnh JMP khác nhau:SJMP, LJMP và AJMP (tương
ứng là đònh vò tương đối, đònh vò xa và đònh vò tuyệt đối). Trình
biên dòch Intel chấp nhận lệnh chung chung JMP nếu người lập
trình không quan tâm đến sự thay đổi biên dòch. Trong khi trình
biên dòch của những hãng khác không có đặc tính này. JMP
được biên dòch thành AJMP nếu đích nằm ở trước và khoảng
nhảy nằm trong phạm vi 2Kbytes. Trong các trường hợp khác có
thể dòch thành LJMP. Lệnh CALL cũng tương tự như vậy.
Lệnh SJMP đònh đòa chỉ đích như một offset tương đối. Vì
vậy lệnh này dài 2 bytes. Khoảng cách nhảy bò giới hạn từ –128
đến +127 bytes tương đối so lệnh sau lệnh SJMP.
Lệnh LJMP xác đònh một đòa chỉ đích là một số 16 bit. Vì
vậy lệnh này dài 3 bytes. Đòa chỉ đích có thể ở bất kỳ trong vùng
nhớ chương trình 63KB.

×