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 . <&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&. %&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<