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

Tài liệu Chương 5: Các chế độ đánh địa chỉ của 8051 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 (107.63 KB, 10 trang )

Ch"ơng 5
Các chế độ đánh địa chỉ của 8051

!"! #$ %&' %()* #+, /01) %&23 4&05) #6#& 7&6# 4&8)9 :. /01) #$ %&' ; %(34<
=>% %&84& <&0 &3?# %(34< @> 4&A &3?# BCD# #&3 4&C =>% <06 %(E %F# %&G0 #6# #6#&
%()* #+, /01) 7&6# 4&8) BCD# <H0 /I #6# #&J B> B64& BE8 #&K9 !&CL4< 4I* #&M4< %8
@I4 /)+4 N5 #6# #&J B> B64& BE8 #&K #O8 PQRS %(34< ,&T= N0 =>% UV NW -X9
!6# #&J B> B64& BE8 #&K 7&6# 4&8) #O8 @> N0 YZ /[ BCD# Y6# BE4& 4&C 4$ BCD#
%&0J% 7J NI -3 N+* 4<CG0 /+, %(\4& 7&]4< %&' B64& BE8 #&K 7&6# 4&8) /I^
S9 %F# %&G0 _9 `&23 %&84& <&0 a9 `(b# %0J,
c9 <064 %0J, d)8 %&84& <&0 R9 `&23 #&K UV
5.1 Các chế độ đánh địa chỉ tức thời và theo thanh ghi
5.1.1 Chế độ đánh địa chỉ tức thời
`(34< #&J B> B64& BE8 #&K 4I* %364 &T4< 4<)e4 /I =>% &f4< UV9 gI 4&C %h4
<H0 #O8 4$ %&\ 7&0 =>% /14& BCD# &D, -E#& %364 &T4< B0 %F# %&0 4<8* U8) =i /14&9 jC)
[ (f4< %(CA# /01) %F# %&G0 ,&k0 BCD# B?% -l) mno #&J B> B64& BE8 #&K 4I* #$ %&'
BCD# -p4< B' 4T, %&]4< %04 NI3 @l% 7q %&84& <&0 4I3 7' #k %&84& <&0 #34 %(r /01)
:"`s9 gW -X^

MOV A, # 25H ; Nạp giá trị 25H vào thanh ghi A
MOV R4, #62 ; Nạp giá trị 62 thập phân vào R4
MOV B, #40H ; Nạp giá trị 40 H vào thanh ghi B
MOV DPTR, #4521H ; Nạp 4512H vào con trỏ dữ liệu DPTR

t?# -p %&84& <&0 :"`s /I Su @0% 4$ #v4< #$ %&' BCD# %()* #+, 4&C _ %&84&
<&0 P @0% :"w NI :"j %(34< B$ :"w /I @*%2 #83 NI :"j /I @*%2 %&l,9 xy% B3T4 =i
-CA0 Bz*^

MOV DPTR, #2550H
MOV A, #50H
MOV DPH, #25H



!v4< /C) [ (f4< /14& -CA0 Bz* #$ %&' %T3 (8 /{0 N\ <06 %(E 4T, NI3 :"`s /A4
&L4Su @0%^

MOV DPTR, # 68975 ; Giá tri không hợp lệ > 65535 (FFFFH)

`8 #$ %&' -p4< #&K /14& |d} B' %()* #+, /01) %F# %&G0 4&C U8)

COUNT EDU 30

MOV R4, #COUNT ; R4 = 1E (30 = 1EH)
MOV DPTR, #MYDATA ; DPTR = 200H

ORG 200H
MYDATA: DB America

jC) [ (f4< %8 #v4< #$ %&' UZ -X4< #&J B> B64& BCD# #&K %F# %&G0 B' <Z0
/01) BJ4 #6# #~4< #O8 PQRS9
gW -X tOg "S, nRRw /I =>% /14& &D, /19
5.1.2 chế độ đánh địa chỉ theo thanh ghi:
!&J B> B64& BE8 #&K %&23 %&84& <&0 /0h4 d)84 BJ4 N01# UZ -X4< #6# %&84& <&0
B' /01) #ầ4 BCD# %&83 %6# #6# NW -X N5 B64& BE8 #&K %&23 %&84& <&0 4&C U8)^

MOV A, RO ; Sao nội dung thanh ghi RO vào thanh ghi A
MOV R2, A ; Sao nội dung thanh ghi A vào thanh ghi R2
ADD A; R5 ; Cộng nội dung thanh ghi R5 vào thanh ghi A
ADD A, R7 ; Cộng nội dung thanh ghi R7 vào thanh ghi A
MOV R6, A ; Lfu nội dung thanh ghi A vào thanh ghi R6

!v4< 4h4 /C) [ (f4< #6# %&84& <&0 4<)e4 NI BW#& ,&k0 ,&p &D, N5 7W#& %&CA#9

w8* 4$0 #6#& 7&6#, 4J) N0J% tOg :"`s, A Uẽ #&3 =>% /{0 N\ 4<)e4 /I %&84& <&0
P @0% NI BW#& /T0 /I %&84& <&0 Su @0%9 xy% B3T4 =i U8)^

MOV DPTR, #25F5H
MOV R7, DPL
MOV R6, DPH

Đ' [ (f4< %8 #$ %&' #&)*'4 /01) <0.8 %&84& <&0 %W#& /)ỹ A NI %&84& <&0 s4
m4 %ừ Q BJ4 7o 4&C4< N01# #&)*'4 /01) <0.8 #6# %&84& <&0 s4 %&\ 7&]4< BCD# ,&y,9
gW -X, /14& tOg sc, s7 /I 7&]4< &D, /19
`(34< &80 #&J B> B64& BE8 #&K Bầ) %0h4, #6# %364 &T4< #$ %&' &3?# ; @h4 %(34<
=>% %(34< #6# %&84& <&0 &3?# BCD# <ắ4 /054 NA0 /14&9 `(34< &ầ) &J% #6# #&CL4< %(\4&
/01) #ầ4 BCD# YZ /[ %&CG4< ; %(34< =>% UV 4<ă4 #O8 @> 4&A sAt &3?# %(34<
7&]4< <084 =I #O8 sOt9 !$ (l% 4&05) #6#& B' %()* #+, /01) 4I* =I ,&ầ4 %0J,
%&23 Uẽ Yy% BJ49
5.2 Truy cập bộ nhớ sử dụng các chế độ đánh địa chỉ khác nhau.
5.2.1 Chế độ đánh địa chỉ trực tiếp.
N&C Bi 4$0 ; #&CL4< _ %(34< PQRS #$ S_P @*%2 @> 4&A sAt9 B> 4&A sAt
BCD# <64 #6# BE8 #&K %ừ QQ BJ4 FFw NI BCD# ,&z4 #&08 4&C U8)^
S9 !6# 4<ă4 4&A %ừ QQ BJ4 SFw BCD# <64 #&3 #6# @ă4< %&84& <&0 NI 4<ă4 YJ,9
_9 !6# 4<ă4 4&A %ừ _Qw BJ4 _Fw BCD# -I4& #&3 7&]4< <084 B64& BE8 #&K %&23 @0% B'
/C) #6# /01) S @0%9
a9 !6# 4<ă4 4&A %ừ aQw BJ4 7Fw /I 7&]4< <084 B' /C) /01) #$ 7W#& %&CA# S@*%29
t?# -p %3I4 @> @*%2 #O8 @> 4&A sAt #$ %&' BCD# %()* #+, @f4< #&J B> B64&
BE8 #&K %(b# %0J,, 4&C4< #&J B> 4I* %&CG4< BCD# UZ -X4< 4&l% B' %()* #+, #6# 4<ă4
4&A sAt %ừ aQw BJ4 7Fw9 Đz* /I -3 =>% %&b# %J /I #6# 4<ă4 4&A -I4& #&3 @ă4<
<&0 BCD# %()* #+, @f4< %&84& <&0 %&23 #6# %h4 <H0 #O8 #&M4< /I sQ - s7 #ò4 #6# 4<ă4
4&A 7&6# #O8 sAt %&\ 7&]4< #$ %h4 4&C N+*9 `(34< #&J B> B64& BE8 #&K %(b# %0J, %&\
/01) ; %(34< =>% 4<ă4 4&A sAt =I BE8 #&K #O8 4$ BCD# @0J% NI BE8 #&K 4I* BCD#
#&3 4&C /I =>% ,&ầ4 #O8 /14&9 K&6# NA0 #&J B> B64& BE8 #&K %F# %&\ =I %364 &T4< %b

4$ BCD# #l, NA0 /14&9 :l) mn Q /I Ub ,&z4 @01% <0.8 &80 #&J B> B64& BE8 #&K9 xy% #6#
NW -X -CA0 Bz* NI /C) [ (f4< #6# /14& 7&]4< #$ -l) mno^

MOV R0, 40H ; Lfu nội dung của ngăn nhớ 40H của RAM vào R0
MOV 56H, A ; Lfu nội dung thanh ghi A vào ngăn nhớ 56H của RAM
MOV R4, 7FH ; Chuyển nôi dung ngănnhớ 7FH của RAM vào R4

N&C Bi 4$0 ; %(CA# %&\ #6# 4<ă4 4&A %(ừ Q BJ4 7 #O8 sAt BCD# #l, #&3 @f4<
Q #O8 #6# %&84& <&0 sQ - s79 !6# %&84& <&0 4I* #$ %&' BCD# %()* #+, %&23 _ #6#& 4&C
U8)^

MOV A, 4 ; Hai lệnh này giống nhau đều sao nội dung thanh ghi R4 vào A
MOV A, R4

MOV A, 7 ; Hai lệnh này đều nhf nhau là sao nội dung R7 vào thanh ghi A
MOV A,R7

Đ' 4&l4 =T4& Ub d)84 %(H4< #O8 -l) mno %(34< #6# /14& #O8 PQRS9 xy% #6# =i
#&3 U8) Bz*^

MOV R2, #05 ; Gán R2=05
MOV A, 2 ; Sao nội dung thanh ghi R2 vào A
MOV B, 2 ; Sao nội dung thanh ghi R2 vào B
MOC 7,2 ; Sao nội dung thanh ghi R7 vì lệnh MOV R7, R2 là không hợp lệ.

t?# -p UZ -X4< #6# %h4 sQ - s7 -ễ &L4 #6# BE8 #&K @> 4&A #O8 #&M4< 4&C4<
#6# 4<ă4 4&A aQw BJ4 7Fw #O8 sAt 7&]4< %&' BCD# %()* #+, %&23 @l% 7q #6#& 4I3
7&6# /I %&23 BE8 #&K #O8 #&M4< N\ #&M4< 7&]4< #$ %h49
5.2.2 các thanh ghi SFSR và các địa chỉ của chúng.
`(34< #6# %&84& <&0 BCD# 4$0 BJ4 %ừ %(CA# BJ4 <0G %8 %&l* (f4< #6# %&84& <&0

sQ - s7 /I =>% ,&ầ4 %(34< S_P @*%2 #O8 @> 4&A sAt9 g+* #ò4 #6# %&84& <&0 A, B,
"SW NI :"`s /I =>% @> ,&+4 #O8 4&$= #6# %&84& <&0 4&\4 #&)4< BCD# <H0 /I #6#
%&84& <&0 B?# @01% SFs mS,2#08/ F)4%034 s2<0U%2(o9 !$ (l% 4&05) %&84& <&0 NA0 #&F#
4ă4< B?# @01% NI #&M4< BCD# UZ -X4< (l% (>4< (i0 =I %8 Uẽ %(\4& @I* ; #6# #&CL4<
U6)9 !6# %&84& <&0 Fs #$ %&' BCD# %()* #+, %&23 %h4 #O8 #&M4< m=I -ễ &L4 (l% 4&05)o
&3?# %&23 #6# BE8 #&K #O8 #&M4<9 gW -X BE8 #&K #O8 %&84& <&0 A /I |Ow NI %&84& <&0
B /I FOw 4&C #&3 ; %(34< @k4< R9S9 wi* B' [ BJ4 4&.4< #?, /14& #$ #p4< [ 4<&ĩ8
-CA0 Bz*^

MOV 0E0H, #55H ; Nạp 55H vào thanh ghi A(A=55H)
MOV A, #55H ;

MOV 0F0H, #25H ; Nạp 2SH vào thanh ghi B ( B = 25)
MOV 3, #25H ;

MOV 0E0H ; Sao nội dung thanh ghi R2 vào A
MOV A, R2 ;

MOV 0F0 ; Sao nội dung thanh ghi R0 vào B
MOV B, R0 ;

Bk4< R9/ -CA0 Bz* /01% 7h #6# %&84& <&0 #&F# 4ă4< B?# @01% SFs #O8 PQRS NI
#6# BE8 #&K #O8 #&M4<9 !ầ4 ,&k0 /C) [ BJ4 &80 B0'= U8) N5 #6# BE8 #&K #O8 SFs^
S9 !6# %&84& <&0 SFs #$ BE8 #&K 4I= <0.8 PQw NI FFw #6# BE8 #&K 4I* ; %(h4 PQw,
N\ #6# BE8 #&K %ừ QQ BJ4 7Fw /I BE8 #&K #O8 @> 4&A sAt @h4 %(34< PQRS9
_9 7&]4< ,&k0 %l% #k =H0 BE8 #&K %ừ PQw BJ4 FFw B5) -3 SFw UZ -X4<, 4&C4< NE %(W
4<ă4 4&A %ừ PQw BJ4 FFw #&C8 -p4</I B' %(. NI /+, %(\4& N0h4 PQRS #v4< 7&]4<
BCD# UZ -X4<9
Bảng 5.1: !6# BE8 #&K #O8 %&84& <&0 #&F# 4ă4< B?# @01% SFs


Lệnh Tên Địa chỉ
ACC* Thanh ghi tích luỹ (thanh ghi tổng ) A 0E0H
B* Thanh ghi B 0F0H
PSW* Từ trạng thái chfơng trình 0D0H
SP Con trỏ ngăn xếp 81H
DPTR Con trỏ dữ liệu hai byte
DPL Byte thấp của DPTR 82H
DPH Byte cao của DPTR 83H
P0* Cổng 0 80H
P1* Cổng 1 90H
P2* Cổng 2 0A0H
P3* Cổng 3 0B0H
IP* Điều khiển fu tiên ngắt 0B8H
IE* Điều khiển cho phép ngắt A08H
TMOD Điều khiển chế độ bộ đếm/ Bộ định thời 89H
TCON* Điều khiển bộ đếm/ Bộ định thời 88H
T2CON* Điều khiển bộ đếm/ Bộ định thời 2 0C8H
T2MOD Điều khiển chế độ bộ đếm/ Bộ định thời 2 0C9H
TH0 Byte cao của bộ đếm/ Bộ định thời 0 8CH
TL0 Byte thấp của bộ đếm/ Bộ định thời 0 8AH
TH1 Byte cao của bộ đếm/ Bộ định thời 1 8DH
TL1 Byte thấp của bộ đếm/ Bộ định thời 1 8BH
TH2 Byte cao của bộ đếm/ Bộ định thời 2 0CDH
TL2 Byte thấp của bộ đếm/ Bộ định thời 2 0CCH
RCAP2H Byte cao của thanh ghi bộ đếm/ Bộ định thời 2 0CBH
RCAP2L Byte thấp của thanh ghi bộ đếm/ Bộ định thời 2 0CAH
SCON* Điều khiển nối tiếp 98H
SBUF Bộ đệm dữ liệu nối tiếp 99H
PCON Điều khiển công suất 87H


*!6# %&84& <&0 #$ %&' B64& BE8 #&K %&23 @0%9
xy% %&23 #&J B> B64& BE8 #&K %(b# %0J, %&\ #ầ4 ,&k0 /C) [ (f4< <06 %(E BE8 #&K
BCD# <0A0 &T4 BJ4 S@*%2, QQ - FFw9 Đ05) 4I* #$ 4<&ĩ8 /I N01# UZ -X4< #O8 #&J B>
B64& BE8 #&K 4I* @E <0A0 &T4 @;0 N01# %()* #+, #6# NE %(W 4<ă4 4&A #O8 sAt NI #6#
%&84& <&0 NA0 BE8 #&K BCD# #&3 @h4 %(34< PQRS9
Ví dụ 5.1:
g0J% #&CL4< %(\4& B' <Z0 RRw BJ4 #~4< "S NI "_ UZ -X4< &3?#
8o `h4 #6# #~4<
@o w3?# BE8 #&K #6# #~4<
Lời giải:

a) MOV A, #55H ; A = 55H
MOV P1, A ; P1 = 55H
MOV P2, A ; P2 = 55H

@o `ừ @k4< R9S %8 /l* BT0 #&K #~4< "S /I PQw NI "_ /I AQw

MOV A, #55H ; A = 55H
MOV 80H, A ; P1 = 55H
MOV 0A0H, A ; P2 = 55H

5.2.3 Ngăn xếp và chế độ đánh địa chỉ trực tiếp.
t>% #]4< -X4< #&W4& 7&6# #O8 #&J B> B64& BE8 #&K %(b# %0J, /I 4<ă4 YJ,9
`(34< &H PQRS #&K #$ #&J B> B64& BE8 #&K %(b# %0J, /I BCD# ,&y, Bẩ* NI3 4<ă4 YJ,9
:3 N+*, =>% /14& 4&C "gSw A /I 7&]4< &D, /19 g01# Bẩ* %&84& <&0 A NI3 4<ă4
YJ, ,&k0 BCD# N0J% -CA0 -T4< "gAw Q|Qw NA0 Q|Qw /I BE8 #&K #O8 %&84& <&0 A9
`CL4< %b 4&C N+* B' Bẩ* %&84& <&0 sa (i4& Q NI3 4<ă4 YJ, %8 ,&k0 N0J% /I "gSw
Qa9 !&J B> B64& BE8 #&K %(b# %0J, ,&k0 BCD# UZ -X4< #&3 #k /14& "O"9 g\ -X "O"
Qc Uẽ 7y3 BK4& #O8 4<ă4 YJ, NI3 %&84& <&0 sc (i4& Q9
Ví dụ 5.2:

`(\4& @I* =i B' Bẩ* %&84& <&0 sR, su NI A NI3 4<ă4 YJ, NI U8) B$ 7y3
#&p4< 4<CD# %(; /T0 s_, sa NI B %CL4< F4<9
Lời giải:

PUSH 05 ; Đẩy R5 vào ngăn xếp
PUSH 06 ; Đẩy R6 vào ngăn xếp
PUSH 0E0H ; Đẩy thanhghi A vào ngăn xếp
POP 0F0H ; Kéo đỉnh ngăn xếp cho vào thanh ghi B
; Bây giờ B = A
POP 02 ; Kéo đỉnh ngăn xếp cho vào thanh ghi R2
; Bây giờ R2= R6
POP 03 ; Kéo đỉnh ngăn xếp cho vào thanh ghi
; Bây giờ R3 = R5

5.2.4 chế độ đánh địa chỉ gián tiếp thanh ghi.
`(34< #&J B> 4I*, =>% %&84& <&0 BCD# UZ -X4< 4&C =>% #34 %(r BJ4 /01)9
NJ) /01) ; @h4 %(34< !"U %&\ #&K #6# %&84& <&0 sQ NI sS BCD# UZ -X4< #&3 =X#
BW#& 4I*9 w8* 4$0 #6#& 7&6# #6# %&84& <&0 s_ - s7 7&]4< #$ %&' -p4< BCD# B' <0.
BE8 #&K #O8 %364 &T4< 4f= %(34< sAt 7&0 UZ -X4< #&J B> B64& BE8 #&K 4I* 7&0 s3
NI sS BCD# -p4< 4&C #6# #34 %(r, 4<&ĩ8 /I 7&0 #&M4< <0. #6# BE8 #&K #O8 #6# 4<ă4
4&A sAt %&\ %(CA# #&M4< ,&k0 B?% -l) m@o 4&C #&K (8 -CA0 Bz*9

MOV A, @ R0 ; Chuyển nội dung của ngăn nhớ RAM có địa chỉ trong RO và A
MOV @ R1, B ; Chuyển nội dung của B vào ngăn nhớ RAM có địa chỉ ở R1

jC) [ (f4< sQ #v4< 4&C sS /)]4 #$ -l) @ BF4< %(CA#9 K&0 7&]4< #$ -l)
4I* %&\ B$ /I /14& #&)*'4 4>0 -)4< #6# %&84& <&0 s3 NI sS #&F 7&]4< ,&k0 /01)
4<ă4 4&A =I BE8 #&K #$ %(34< sQ NI sS9
Ví dụ 5.3:
g0J% #&CL4< %(\4& B' U83 #&y, <06 %(E RRw NI3 4<ă4 4&A sAt %T0 BE8 #&K cQw

BJ4 ccw UZ -X4<^
8o !&J B> B64& BE8 #&K %(b# %0J,
@o !&J B> B64& BE8 #&K <064 %0J, %&84& <&0 7&]4< -p4< Nò4< /?,
#o !&J B> @ #$ -p4< Nò4< /?,
Lời giải:

MOV A, #55H ; Nạp A giá trị 55H
MOV 40H, A ; Sao chép A vào ngăn nhớ RAM 40H
MOV 41H, A ; Sao chép A vào ngăn nhớ RAM 41H
MOV 42H, A ; Sao chép A vào ngăn nhớ RAM 42H
MOV 43H, A ; Sao chép A vào ngăn nhớ RAM 43H
MOV 44H, A ; Sao chép A vào ngăn nhớ RAM 44H
b)
MOV A, # 55H ; Nạp vào A giá trị 55H
MOV R0, #40H ; Nạp con trỏ R0 = 40 H
MOV @R0, A ; Sao chép A vào vị trí ngăn nhớ RAM do R0 chỉ đến
INC R0 ; Tăng con trỏ. Bây gì R0 = 41H
MOV @R0, A ; Sao chép A vào vị trí ngăn nhớ RAM do R0 chỉ
INC R0 ; Tăng con trỏ. Bây giờ R0 = 42H
MOV @R0,A ; Sao chép Avào vị trí ngăn nhớ RAM do R0 chỉ
INC R0 ; Tăng con trỏ. Bây giờ R0 = 43H
MOV @R0, A ; Sao chép A vào vị trí ngăn nhớ RAM do R0 chỉ
MOV @R0, A ;Tăng con trỏ. Bây gờ R0 = 44H
MOV @R0, A
c)
MOV A, # 55H ; Nạp vào A giá trị 55H
MOV R0, #40H ; Nạp con trỏ địa chỉ ngăn nhớ RAM R0 = 40H
MOV R2, #05 ; Nạp bộ đếm R2 = 5
AGAIN: MOV @R0, A ; Sao chép A vào vị trí ngăn nhớ RAM do Ro chi đến
INC ; Tăng con trỏ Ro

DJNZ R2, AGAIN ; Lặp lại cho đến khi bộ đếm = 0.

5.2.5 "u điểm của chế độ đánh địa chỉ gián tiếp thanh ghi.
t>% %(34< 4&.4< C) B0'= #O8 #&J B> B64& BE8 #&K <064 %0J, %&84& <&0 /I 4$
/I= #&3 N01# %()* #+, /01) 4ă4< B>4< &L4 U3 NA0 #&J B> B64& BE8 #&K %(b# %0J,9
gW -X R9a %(\4& @I* %(CG4< &D, U83 #&y, <06 %(E RRw NI3 #6# NE %(W 4<ă4 4&A
#O8 sAt %ừ cQw BJ4 ccw 9
jC) [ (f4< /G0 <0k0 @o #$ &80 /14& BCD# /?, /T0 NA0 =>% UV /ầ49 `8 #$ %&' %T3 (8
Nò4< /?, NA0 &80 /14& 4I* 4&C ; /G0 <0k0 #o9 jG0 <0k0 #o /I &01) d)k 4&l% NI #&K #$ %&'
7&0 UZ -X4< #&J B> B64& BE8 #&K <064 %0J, d)8 %&84& <&09 gò4< /?, /I 7&]4< %&' %(34<
#&J B> B64& BE8 #&K %(b# %0J,9 Đz* /I Ub 7&6# 4&8) #&O *J) <0.8 B64& BE8 #&K %(b# %0J,
NI <064 %0J,9
Ví dụ 5.4:
wi* N0J% #&CL4< %(\4& B' Y36 Su NE %(W 4<ă4 4&A sAt @ắ% Bầ) %T0 BE8 #&K uQw9
Lời giải:

CLR A ; Xoá A=0
MOV R1, #60H ; Nạp con trỏ. R1= 60H
MOV R7, #16H ;Nạp bộ đếm, R7 = 1 6 (10 H dạng hex)
AGAIN: MOV @R1, A ; Xoá vị trí ngăn nhớ RAM do R1 chỉ đến
INC R1 ; Tăng R1
DJNZ R7, AGAiN ; Lặp lại cho đến khi bộ đếm = 0

t>% NW -X N5 #6#& UZ -X4< #k sQ NI sS %(34< #&J B> B64& BE8 #&K <064 %0J,
%&84& <&0 7&0 %()*54 7&V0 BCD# #&3 %(34< NW -X R9R9
Ví dụ 5.5:
wi* N0J% #&CL4< %(\4& B' U83 #&y, =>% 7&V0 SQ @*%2 /01) %ừ NE %(W 4<ă4 4&A
sAt @ắ% Bầ) %ừ aRw NI3 #6# NE %(W 4<ă4 4&A sAt @ắ% Bầ) %ừ uQw
Lời giải:


MOV R0, # 35H ; Con trỏ nguồn
MOV R1, #60H ; Con trỏ đích
MOV R3, #10 ; Bộ đếm
BACK: MOV A, @R0 ; Lấy 1byte từ nguồn
MOV @R1, A ; Sao chép nó đến đích
INC R0 ; Tăng con trỏ nguồn
INC R1 ; Tăng con trỏ đích
DJNZ R3, BACK ; Lặp lại cho đến khi sao chép hết 10 byte

5.2.6 Hạn chế của chế độ đánh địa chỉ gián tiếp thanh ghi trong 8051.
N&C Bi 4$0 ; ,&ầ4 %(CA# (f4< sQ NI sS /I #6# %&84& <&0 -)* 4&l% #$ %&' BCD#
-p4< B' /I= #6# #34 %(r %(34< #&J B> B64& BE8 #&K <064 %0J, %&84& <&09 g\ sQ NI sS
/I #6# %&84& <&0 P @0%, 4h4 N01# UZ -X4< #O8 #&M4< @E &T4 #&J ; N01# %()* #+, =H0
%&]4< %04 %(34< #6# 4<ă4 4&A sAt @h4 %(34< m#6# 4<ă4 4&A %ừ aQw BJ4 7Fw NI #6#
%&84& <&0 SFso9 `)* 4&0h4, 4&05) 7&0 %8 #ầ4 %()* #+, /01) BCD# #ắ% %(34< sAt
4<3I0 &3?# %(34< 7&]4< <084 =i /14& #O8 sOt %(h4 #&0,9 w3?# /I %()* #+, @> 4&A
sAt 4<3I0 &3?# sOt %(h4 #&W, %&\ %8 #ầ4 UZ -X4< %&84& <&0 Su @0% B$ /I :"`s9
5.2.7 Chế độ đánh địa chỉ theo chỉ số và truy cập bộ nhớ ROM trên chíp.
!&J B> B64& BE8 #&K %&23 #&K UV BCD# UZ -X4< (>4< (i0 %(34<N01# %()* #+, #6#
,&z4 %Z /01) #O8 @k4< %(34< 7&]4< <084 sOt #&CL4< %(\4& #O8 PQRS9 j14& BCD#
-p4< #&3 =X# BW#& 4I* /I t3N2 A, @ A + :"`s9 `&84& <&0 Su @0% :"`s /I %&84&
<&0 A BCD# -p4< B' %T3 (8 BE8 #&K #O8 ,&z4 %Z /01) BCD# /C) #l% %(34< sOt %(h4
#&W,9 :3 #6# ,&z4 %Z /01) BCD# #l% %(34< 7&]4< <084 =i m#&CL4< %(\4&o #O8 sOt
%(h4 #&0, #O8 PQRS, 4$ ,&k0 -p4< /14& t3N2 %&8* #&3 /14& t3N m#&O ! ; #)V0 /14& /I
#&K =I /14& !3-2o9 `(34< /14& 4I* %&\ 4>0 -)4< #O8 A BCD# @~ Y)4< NI3 %&84& <&0
Su @0% :"`s B' %T3 (8 BE8 #&K Su @0% #O8 /01) #ầ4 %&0J%9 xy% NW -X R9u9
Ví dụ 5.6:
G0k UZ %ừ gSA BCD# /C) %(34< sOt #$ Bĩ8 #&K @ắ% Bầ) %ừ _QQw NI #&CL4<
%(\4& BCD# <&0 NI3 sOt @ắ% Bầ) %ừ BE8 #&K Q9 wi* ,&z4 %W#& #6#& #&CL4< %(\4& &3T%
B>4< NI &i* ,&6% @0') Y2= %ừ gSA U8) #&CL4< %(\4& 4I* BCD# #l% NI3 Bz)?

Lời giải:

ORG 0000H ; Bắt đầu đốt ROM tại địa chỉ 00H
MOV DPTR, #200H ; Địa chỉ bẳng trình bày DPTR = 200H
CLA A ; Xoá thanh ghi A (A = 0)
MOVC A, @A + DPTR ; Lấy ký tự từ không gian nhớ chfơng trình
MOV R0, A ; Cất nó vào trong R0
INC DPTR ; DPTR = 201, chỉ đến ký tự kế tiếp
CLR A ; Xoá thanh ghi A
MOVC A, @A + DPTR ; Lấy ký tự kế tiếp
MOV R1, A ; Cất nó vào trong R1
INC DPTR ; DPTR = 202 con trỏ chỉ đến ký tự sau đó
CLA A ; Xoá thanh ghi A
MOVC A, @A + DPTR ; Nhận ký tự kế tiếp
MOV R2, A ; Cắt nó vào R2
HERE: SJMP HERE ; Dừng lại ở đây.
; Dữ liệu đfợc đốt trong không gian mã lệnh tại địa chỉ 200H
ORG 200H
MYDATA: DB VSA
END ; Kết thúc chfơng trình

ở %(34< #&CL4< %(\4& 4$0 %(h4 %&\ #6# NE %(W 4<ă4 4&A sOt #&CL4< %(\4& _QQw
- _QQ_w #$ #6# 4>0 -)4< U8)^
_QQ = mUo; _QS= mSo NI _Q_ = mAo9
!&M4< %8 @ắ% Bầ) NA0 :"`s = _QQw NI A = Q9j14& tOg! A, @ A + :"`s
#&)*54 4>0 -)4< #O8 NE %(W 4&A _QQw %(34< sOt m_QQw + Q = _QQwo NI3 A9
`&84& <&0 A #&F8 <06 %(E RRw /I <06 %(E =I AS! #O8 7[ %b U9 7[ %b 4I* BCD#
#l% NI3 sQ9 KJ B$, :"`s BCD# %ă4< /h4 %T3 %&I4& :"`s = _QSw9 A /T0 BCD# Y36 N5
Q B' /l* 4>0 -)4< #O8 NE %(W 4&A 7J %0J, %(34< sOt /I _QSw #&C8 7[ %b S9 S8) 7&0
#&CL4< %(\4& 4I* #&T* %8 #$ sQ = RRw, sS = Raw NI s_ = cSw /I #6# =i AS!II #O8

#6# 7[ %b U, S NI A9
Ví dụ 5.7:
G0k UZ 7&]4< <084 sOt @ắ% Bầ) %ừ BE8 #&K _RQw #$ #&F8 A=2(0#8, &i* N0J%
#&CL4< %(\4& B' %()*54 #6# @*%2 NI3 #6# NE %(W 4<ă4 4&A sAt @ắ% Bầ) %ừ BE8 #&K cQw9
Lời giải
; (a) Phfơng pháp này sử dụng một bộ đếm
ORG 000
MOV DPTR, # MYDATA ; Nạp con trỏ ROM
MOV R0, #40H ; Nạp con trỏ RAM
MOV R2, #7 ; Nạp bộ đếm
BACK: CLR A ; Xoá thanh ghi A
MOVC A, @A + DPTR ;Chuyển dữ liệu từ khong gian mã
MOV R0, A ;Cất nó vào ngăn nhớ RAM
INC DPTR ; Tăng con trỏ ROM
INC R0 ; Tăng con trỏ RAM
DJNZ R2, BACK ; Lặp lại cho đếnkhi bộ đếm = 0
HERE: SJMP HERE
; không gian mã của ROM trên chíp dùng để cất dữ liệu ORG 250H

MYDATA: DB AMER1CA
END

;(b) phfơng pháp này sử dụng ký tự null để kết thúc chuỗi

ORG 000
MOV DPTR, #MYDATA ; Nạp con trỏ ROM
MOV R0, #40 ; Nạp con trỏ RAM
BACK: CLR A S ; Xoá thanh ghi A(A=0)
MOVC A, @A + DPTR ; Chuyển dữ liệu từ không gian mã
JZ HERE ; Thoát ra nếu có ký tự Null

MOV DPTR, #MYDATA ; Cất nó vào ngădn nhớ của RAM
INC @R0, A ; Tăng con trỏ ROM
INC R0 ; Tăng con trỏ RAM
SJM BACK ; Lặp lại
HERE: SJMP HERE
; không gian mã của ROM trên chíp dùng để cất dữ liệu ORG 250H
MYADTA: DB AMER1CA, 0 ; Ký tự Null để kết thúc chuỗi END

jC) [ BJ4 #6#& %8 UZ -X4< /14& JZ B' ,&6% &014 7[ %b NOjj 7&0 7J% %&M#
#&){0
5.2.8 Bảng xắp xếp và sử dụng chế độ đánh địa chỉ theo chỉ số.
Bk4< Yắ, YJ /I 7&60 401= BCD# UZ -X4< (l% (>4< (i0 %(34< /+, %(\4& #6# @> N0
YZ /[9 N$ #&3 ,&y, %()* #+, #6# ,&ầ4 %ừ #O8 =>% @k4< %&CG4< Y)*h4 BCD# UZ -X4<
NA0 %&83 %6# #b# %0')9 N&C =>% NW -X, &i* <0k %&0J% (f4< BV0 NA0 =>% F4< -X4< 4&l%
BE4& %8 #ầ4 Y
_
<06 %(E %(34< ,&T= N0 Q BJ4 99 `8 #$ %&' UZ -X4< =>% @k4< Yắ, YJ, %&8*
#&3 N01# %W4& %364 4$9 Đ05) 4I* BCD# #&K (8 %(34< NW -X R9P9
Ví dụ 5.8
wi* N0J% =>% #&CL4< %(\4& B' /l* Y <06 %(E #V4< "S NI <Z0 <06 %(E Y
_
%A0 #~4<
"_ /0h4 %X#9
Lời giải:
ORG 000
MOV DPTR, #300 H ; Nạp địa chỉ bảng xắp xêlps
MOV A, #0FFH ; Nạp A giá trị FFH
MOV P1, A ; Đặt cổng P1 là đầu vào
BACK: MOV A, P1 ; Lấy giá trị X từ P1
MOVC A, @A + DPTR ; Lấy giá trị X


từ bảng XSDQ-TABLE
MOV P2, A ; Xuất nó ra cổng P2
SJMP BACK ; Lặp lại

ORG 300H
XSQR - TABLE:
DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
END

jC) [ @k4< /14& Bầ) %0h4 #$ %&' %&8* @f4< tOg :"`s, nxSQs - `ABj|9
Ví dụ 5.9:
`(k /G0 #6# #z) &r0 U8) #&3 NW -X R9P9
8o wi* #&K (8 4>0 -)4< #6# NE %(W aQQ - aQ9w #O8 sOt
@o `T0 NE %(W 4I3 #O8 sOt #$ <06 %(E u NI <06 %(E @I3 4&0h)
#o G0k UZ "S #$ <06 %(E /I 9 %&\ <06 %(E "_ /I @83 4&0h) m; -T4< 4&E ,&z4o?
Lời giải:
8o !6# <06 %(E %(34< #6# 4<ă4 4&A aQQw - aQ9w #O8 sOt /I^
aQQ = mQQo aQS = mQSo aQ_ = mQco aQa = mQ9o
aQc = mSQo c c = Su = SQ 04 &2Y
aQR = mS9o R R = _R = S9 04 &2Y
aQu = m_co u u = au = _cw
aQ7 = maSo aQP = mcQo aQ9 = mRSo
@o NE %(W #&F8 <06 %(E aQuw NI <06 %(E /I _cw
#o QSQSQQQSB /I <06 %(E 4&E ,&z4 #O8 RSw NI PS m9
_
= PSo
N<3I0 N01# UZ -X4< :"`s B' %()* #+, 7&]4< <084 @> 4&A sOt #&CL4< %(\4&
%&\ 4$ #ß4 #$ %&' BCD# UZ -X4< B' %()* #+, @> 4&A 4<3I0 4V0 NA0 PQRS m#&CL4< Sco9
t>% %&84& <&0 7&6# 4.8 BCD# -p4< %(34< #&J B> B64& BE8 #&K %&23 #&K UV /I @>

BJ= #&CL4< %(\4& mA,,24-0YAo9
`(34< 4&05) NW -X %(h4 Bz* %&\ /14& tOg Bi BCD# UZ -X4< B' Bk= @k3 BW4&
(â (I4<, =?# -p %8 #$ %&' UZ -X4< @l% 7q /14& 4I3 7&6# #&õ4< 4I3 4$ &{ %(D #&3 #&J
B> B64& BE8 #&K9 gW -X /14& •A:: A, @sQ” UÏ #>4< 4>0 -)4< 4<¨4 4&A #&3 sO #&K
BJ4 NI3 4>0 -)4< #O8 %&84& <&0 A9

×