BÀI 3: T P L NH 8051
3.2.1.
M
Đ U
Gi ng như m t câu văn đ cượ t o nên b ng cách ghép các t l i v i nhau,
mt ch ngươ trình cũng m t s k tế hp các lnh đi u khi n cơ b n nh :ư ADD,
MOVE ho c JUMP, bài h c này s trình bày v t p l nh c a h MCs 8051 thông qua các
cách đnh đ a ch d li u và các ch ng trình đi nươ hình.
T p l nh ca MCs 8051 đ cượ t i uư hóa cho các ng d ng 8 bít nh m tăng t c đ ,
v i các cách đ nh đ a ch RAM trong ng n g n giúp d dàng cho vi c truy xu t các d li u
c u trúc nh , v i các l nh v bít r t thích hp cho yêu c u đi u khin thi tế b ngo i
vi cũng nh cưho các yêu c u x logic. T p l nh c a 8051 l nh dài 8 bít nên tng
s l nh 28 = 256 l nh, trong đó 255 l nh đ đ nh ngh a m t lnh ch aư xác đ nh.
Mt s l nh c n b sung thêm m t ho c hai byte d li u ho c đ a ch .
Trong t p l nh có 139 lnh có đ dài 1 byte, 92 l nh 2 byte và 24 l nh 3 byte
3.2.2 CÁC CH Đ Đ A CH C A 8051
Các ki u đ nh đ a ch cho phép đ nh n i l y d li u ho c n i nh n d li u tùy ơ ơ
thu c vào cách th c s d ng l nh c a ng i l p trình. Vi đi u khi n 8051 8 ki u đ nh ườ
đ a ch nh sau: ư
- Ki u đ nh đ a ch dùng thanh ghi.
- Ki u đ nh đ a ch tr c ti p. ế
- Ki u đ nh đ a ch gián ti p. ế
- Ki u đ nh đ a ch t c th i.
- Ki u đ nh đ a ch t ng đ i. ươ
- Ki u đ nh đ a ch tuy t đ i.
- Ki u đ nh đ a ch dài.
- Ki u đ nh đ a ch ch s .
3.2.2.1 Ki u đ nh đ a ch ng thanh ghi (Register Addressing)
Ki u này th ng đ c dùng cho các l nh x d li u d li u luôn l u ườ ượ ư
trong các thanh ghi. Đ i v i vi đi u khi n thì mã l nh thu c ki u này ch có 1 byte.
Ví d :
MOV A, R1 ;copy noi dung thanh ghi R1 vao thanh ghi
A
3.2.2.2 Ki u đ nh đ a ch tr c ti p (Direct Addressing) ế
Ki u này th ng đ c dùng đ truy xu t d li u c a b t kỳ ô nh nào trong ườ ượ
256 byte b nh d li u n i c a vi đi u khi n 8051.
Các l nh thu c ki u này th ng l nh 2 byte: byte th nh t l nh, ườ
byte th 2 là đ a ch c a ô nh
Ví d :
1
MOV A, 05H ;copy noi dung o nho co dia chi 05H vao
;thanh ghi A
3.2.2.3 Đ nh đ a ch gián ti p (Indirect Addressing) ế
Ki u đ nh đ a ch gián ti p đ c t ng tr ng b i hi u @ đ c đ t tr c ế ượ ượ ư ượ ướ
các thanh ghi R0, R1 (không s d ng các thanh ghi R2 R7 trong ch đ đ a ch này) ế
hay DPTR. R0 R1 th ho t đ ng nh m t thanh ghi con tr , n i dung c a cho ư
bi t đ a ch c a m t ô nh trong RAM n i mà d li u s ghi ho c s đ c. Còn DPTRế
dùng đ truy xu t ô nh ngo i. Các l nh thu c d ng này ch có 1 byte.
Ví d :
MOV A, @R1 ;copy noi dung o nho co dia chi dat trong
;Thanh ghi R1 vao thanh ghi A
3.2.2.4 Đ nh đ a ch t c th i (Immediate Addressing)
Ki u đ nh đ a ch t c th i đ c t ng tr ng b i hi u # đ c đ t tr c ượ ượ ư ượ ướ
m t h ng s . L nh này th ng dùng đ n p 1 giá tr 1 h ng s byte th 2 (ho c ườ
byte th 3) vào thanh ghi ho c ô nh .
Ví d :
MOV A, #30H ;nap du lieu 30H vao thanh ghi A
3.2.2.5 Đ nh đ a ch t ng đ i ươ
Ki u đ nh đ a ch t ng đ i ch s d ng v i nh ng l nh nh y. N i nh y đ n có ươ ơ ế
đ a ch b ng đ a ch đang l u trong thanh ghi PC c ng v i 1 giá tr 8 bit [còn g i giá ư
tr l ch t ng đ i: relative offset] giá tr t 128 đ n +127 nên vi đi u khi n có th ươ ế
nh y lùi [n u s c ng v i s âm] nh y t i [ n u s c ng v i s d ng]. L nh này ế ế ươ
có mã l nh 2 byte, byte th 2 chính là giá tr l ch t ng đ i: ươ
N i nh y đ n th ng đ c xác đ nh b i nhãn (label) trình biên d ch s tínhơ ế ườ ượ
toán giá tr l ch.
Đ nh v t ng đ i u đi m l nh c đ nh, nh ng khuy t đi m ch ươ ư ư ế
nh y ng n trong ph m vi -128 ÷127 byte [256byte], n u n i nh y đ n xa h n thì l nhế ơ ế ơ
này không đáp ng đ c – s có l i. ượ
Ví d :
SJMP X1 ;nhay den nhan co ten X1 nam trong tam vuc
;256 byte
3.2.2.6 Đ nh đ a ch tuy t đ i
Ki u đ nh đ a ch tuy t đ i đ c dùng v i các l nh ACALL AJMP. Các l nh ượ
này có mã l nh 2 byte.
Đ nh đ a ch tuy t đ i u đi m là mã l nh ng n (2 byte), nh ng khuy t đi m ư ư ế
là mã l nh thay đ i và gi i h n ph m vi n i nh y đ n, g i đ n không quá 2 kbyte. ơ ế ế
Ví d :
AJMP X1 ;nhay den nhan co ten X1 nam trong tam vuc
2
;2Kbyte
3.2.2.7 Đ nh đ a ch dài (Long Addressing)
Ki u đ nh đ a ch dài đ c dùng v i l nh LCALL và LJMP. Các l nh này có ượ
l nh 3 byte trong đó 2 byte (16bit) đ a ch c a n i đ n. C u trúc l nh 3 ơ ế
byte. Đ nh đ a ch dài th g i 1 ch ng trình con ho c th nh y đ n b t kỳ ươ ế
vùng nh nào vùng nh 64K.
Ví d :
LJMP X1 ; nhay den nhan co ten X1 nam trong tam vuc
;64Kbyte
3.2.2.8 Đ nh đ a ch ch s (Index Addressing)
Ki u đ nh đ a ch ch s “dùng m t thanh ghi c b n: b đ m ch ng trình ơ ế ươ
PC ho c b đ m d li u DPTR” k t h p v i “m t giá tr l ch (offset) còn g i là giá tr ế ế
t ng đ i [th ng l u trong thanh ghi]” đ t o ra 1 đ a ch c a ô nh c n truy xu tươ ườ ư
ho c là đ a ch c a n i nh y đ n. Vi c k t h p đ c minh h a nh sau: ơ ế ế ượ ư
Base Register Offset Effective Address
+ =
Ví d :
MOVC A, @A + DPTR ;lay du lieu trong o nho DPTR+A de
;nap vao thanh ghi A
3.3.3 T P L NH C A 8051
Đ kh o sát t p l nh thì ph i th ng nh t m t s qui đ nh v các t ng hi u
trong t p l nh th ng đ c s d ng: ườ ượ
- Direct t ng tr ng cho ô nh n i có đ a ch Direct.ượ ư
- Rn t ng tr ng cho các thanh ghi t thanh ghi R0 đ n thanh ghi R7.ượ ư ế
- @Ri t ng tr ng cho ô nh có đ a ch l u trong thanh ghi Ri và Ri ch có 2 thanh ghiượ ư ư
là R0 và R1.
- Các l nh th ng x y ra gi a các đ i t ng sau: ườ ượ
+ Thanh ghi A.
+ Thanh ghi Rn.
+ Ô nh có đ a ch direct.
+ Ô nh có đ a ch l u trong thanh ghi @Ri. ư
+ D li u 8 bit #data.
+ Addr11 đ a ch 11 bit t A11 A0: đ a ch này ph c v cho l nh nh y ho c
l nh g i ch ng trình con trong ph m vi 2 kbyte. ươ
3
PC (or PDTR) A
+ Addr16 là đ a ch 16 bit t A15 – A0: đ a ch này ph c v cho l nh nh y và l nh
g i ch ng trình con xa trong ph m vi 64 kbyte đó chính đ a ch nh y ươ
đ n, ho c đ a ch c a ch ng trình con.ế ươ
3.3.3.1 NHÓM L NH S H C
1. L nh c ng không nh
ADD A, Rn ;C ng n i dung thanh ghi A v i n i dung thanh ghi Rn,
;k t qu l u trong thanh ghi A. ế ư
Ví d: ADD A, R0 ;A=91h, (C)=1.
ADD A, direct ;C ng n i dung c a ô nh đ a ch direct v i n i
dung
;thanh ghi A, k t qu ch a thanh ghi A. ế
d: Gi s A n i dung 0D9h ô nh đ a ch 30h l u n i dung 0B8h, ư
l nh:
ADD A, 30h ;A=91h, (C)=1.
ADD A, @Ri ;C ng n i dung c a ô nh đ a ch ch a trong thanh
ghi
;Ri v i thanh ghi A, k t q a l u tr trong thanh ghi A. ế ư
Ví d: Gi s A có n i dung 0D9h, ô nh có đ a ch 30h có n i dung là 0B8h, R0
có đ a ch đ t là 30H, l nh:
ADD A, @R0 ;A=91h, (C)=1.
ADD A, #data ;C ng d li u data 8 bit (d0 đ n d7) v i n i dung ế
thanh
;ghi A, k t qu l u tr trong A. ế ư
Ví d: Gi s A có n i dung D9h, d li u tr c ti p là B8h, l nh: ế
ADD A, #0B8h ;A=91h, (C)=1.
2. L nh c ng có nh
ADDC A, Rn ;C ng n i dung thanh ghi A v i n i dung thanh ghi Rn
;v i bit C, k t qu l u trong thanh ghi A. ế ư
Ví d: Gi s A có n i dung 0D9h, R0 có n i dung là 0B8h, (C) =1, l nh:
ADDC A, R0 ;A=92h, (C)=1.
ADDC A, direct ;C ng n i dung c a ô nh có đ a direct n i dung thanh
;ghi A và bit C, k t qu ch a thanh ghi A.ế
Ví d: Gi s A có n i dung 47h, ô nh 30h có n i dung 32h và c (C) = 0, l nh:
ADDC A, 30h ;A=79h, (C)=0.
ADDC A, @Ri ;C ng n i dung c a ô nh đ a ch ch a trong thanh
ghi
4
;Ri v i thanh ghi A v i bit C, k t qu l u tr trong ế ư
thanh
;ghi A.
d: Gi s A có n i dung 0D9h, ô nh 30h n i dung 0B8h, R0 n i
dung 30h và (C) =1, l nh:
ADDC A, @R0 ;A=92h, (C)=1.
ADDC A, #data ;C ng d li u data 8 bit (d0 đ n d7) v i n i dung ế
thanh
;ghi A và bit C, k t qu l u tr trong A. ế ư
d: Gi s thanh ghi A n i dung 37h, d li u tr c ti p 24h, c nh (C) = ế
1, l nh:
ADDC A, 24h ;A=5Ch, (C)=0.
3. L nh tr có nh
SUBB A, Rn ;Tr n i dung thanh ghi A cho n i dung thanh ghi Rn
;tr cho c Carry, k t qu l u trong thanh ghi A. ế ư
d: Gi s A n i dung 0B9h, thanh ghi R0 n i dung 5Ah (C)=1,
l nh:
SUBB A, R0 ;A=5Eh, (C)=0.
SUBB A, direct ;Tr n i dung thanh ghi A cho n i dung c a ô nh
đ a
;ch direct tr cho c Carry, k t qu ch a thanh ế
ghi
;A.
SUBB A, @Ri ;Tr n i dung c a thanh ghi A cho d li u c a ô nh
a ch ch a trong thanh ghi Ri và tr cho c carry, k t ế
;qu l u tr trong thanh ghi A. ư
SUBB A, #data ;Tr n i dung thanh ghi A cho d li u 8 bit d0 đ n d7 ế
;tr cho c carry, k t q a l u tr trong A. ế ư
4. L nh tăng: (increment: tăng lên 1 đ n v ) ơ
INC A ;Tăng n i dung thanh ghi A lên 1.
Ví d: Gi s A có n i dung FFh, l nh:
INC A ;A=00h.
INC Rn ;Tăng n i dung thanh ghi Rn lên 1.
INC direct ;Tăng n i dung c a ô nh có đ a ch tr c ti p lên 1. ế
5