ch"¬ng 4 LËp tr×nh cho cæng vµo - ra I/0 4.1 M« t¶ ch©n cña 8051. !"# $% #&# '()*( +,-* #./ (0 1234 5+6 $7 18349 1:;349 <=3222> ?@A #B #&# C,DA ?B*E +F C(&# *(/A9 #(G*E (H* *(I (/, ()*E #(J* <KL 5<A/M K*NO,*P L/C/EP> $H*E +F $Q' +AR*E STL 5SA/$ TM/' L/C/EP> +) $H*E #(6U C(R*E #B #(J* ?V OO; 5OP/$MPWW ;(,U ;/XX,PX> '(Y #(Z*E ?@A #B [2 #(J* #(\ #&# #(]# *^*E C(&# *(/A *(I +)\ X/ K_29 ?0# RD 9 E(, WR 9 ?`/ #(a9 $b M,cA +) *Ed'e ;f* U(g, MIA h Xi*E jk' Wl (m*E #A*E #nU jk' U(,-* og* 1234 #B p2 #(J* +q, Wl #r*E +)\NX/ 6' (s* #(\ #&# ]*E $7*E t-A #fA '(nU (s*e uAt *(,-*9 +Y (fA (v' #&# *() U(&' 'X,D* #(6*( Ww $7*E #(6U ?B*E +F [2 #(J* +q, (/, ()*E #(J* <KL *-* '/ #(a 'xU #(A*E jR 'g U(,-* og* *)te H×nh 4.1: =s ?y ol 'X6 #(J* #./ 1234e uX-* (Y*( [e4 M) Ws ?y ol 'X6 #(J* #./ 1234e u/ '(nt Xi*E 'X\*E [2 #(J* '(Y #B zp #(J* $)*( #(\ #&# #r*E L29 L49 Lp +) Lz +q, j{, #r*E #B 1 #(J*e ;&# #(J* #|* MH, ?I}# $)*( #(\ *EAy* ~ ;; 9 ?n' •N<9 #&# #(J*E,/\ ?k*E XuAO4 +) XuAOp '&, MxU R=u #(\ U(ÐU #(l' ?`/ #(a AOE 'XAt #xU ?I}# ?`/ #(a *E\), EA 9 #(\ U(ÐU #n' #(Is*E 'XY*( PSEN e uX\*E 1 #(J* *)t '(Y 6 #(J* ~ ;; 9 •N<9 XuAO49 XuAOp9 R=u +) EA ?I}# #&# (0 12z4 +) 1234 Ww $7*Ee H/t *B, #&#( C(&# M) #(Z*E U(g, ?I}# P1.0 P1.1 P1.2 L4ez P1.4 P1.5 P1.6 P1.7 RST P0.0 ( AD0 ) Vcc 1 2 3 5 6 4 7 8 9 11 12 10 13 14 15 17 18 16 19 20 40 39 38 36 35 37 34 33 32 30 29 31 28 27 26 24 23 25 22 21 8051 (8031) P0.1 ( AD1 ) P0.2 ( A D2 ) P0.4 ( AD4 ) P0.5 ( AD5 ) P0.3 ( AD3 ) PSEN P0.6 ( AD6 ) P2.5 ( A13 ) P2.3 ( A11 ) P2.1 ( A9 ) P2.7 ( A15 ) P2. 4 ( A12 ) P2.6 ( A14 ) P2.0 ( AB ) P2.2 ( A10 ) ( RXD ) P3.0 ( T XD ) P3.1 ( NT0 ) P3.2 ( NT1 ) P3.3 ( T 0 ) P3.4 ( T1 ) P3.5 ( WR ) P3.6 ( RD ) P3.7 XTAL2 XTAL1 GND P0.6 ( AD6 ) EA/CPP ALE/PROG *l, ?D #(\ (c '(l*E M)j +,c# j) C(R*E #f* o,v' ok +, ?,@A C(,D* '(Ak# (0 1234 (/t 12z4e ;|* (/, #(J* C(&# M) PSEN +) AOE ?I}# Ww $7*E #(. tvA 'X\*E #&# (c '(l*E $ù/ 'X-* 12z4e 4e ;(J* ~ ;; : ;(J* Wl [2 M) ~ ;; #nU ?,c* &U *EAy* #(\ #(6Ue NEAy* ?,c* &U M) +3~e pe ;(J* •N<: ;(J* •N<: ;(J* Wl p2 M) •N<e ze ;(J* XuAO4 +) XuAOp: 1234 #B jk' ok E,/\ ?k*E 'X-* #(6U *(I*E *B t-A #fA #B jk' xA*E ?y*E (y *E\), ?D #(Ht *Be Bk E,/\ ?k*E '(H#( /*( '(Iê*E xAt-* *(n' ?I}# *l, 'q, #&# #(J* ?fA +)\ XuAO4 5#(J* 4:> +) XuAOp 5#(J* 41>e Bk E,/\ ?k*E '(H#( /*( ?I}# *l, 'q, XuAO4 +) XuAOp #ò*E #f* (/, '7 ?,c* E,& 'X` z2UTe !k' U(6/ #./ '7 ?,c* ?I}# *l, xAl*E ?n' *(I ?I}# 'XY*( o)t 'X-* (Y*( [ep/e ;f* U(g, MIA h Xi*E #B *(,@A 'l# ?k C(&# *(/A #./ (0 1234e ul# ?k ?I}# #\, *(I M) 'f* Wl #ù# ?H, #./ ok E,/\ ?k*E ?I}# *l, 'q, #(J* XuAOe ~6 $79 jk' #(6U 4p!Hz (\"# '(nU (s*e uIs*E 'ù *(I +xt '(Y jk' ok +, ?,@A C(,D* #ò*E t-A #fA jk' ',*( '(D #B 'f* Wl C(R*E Mq* (s* p2!Hze K(, 1234 ?I}# *l, 'q, jk' ok E,/\ ?k*E ',*( '(D '(H#( /*( +) #nU *EAy* '(Y '/ #B '(D qA/* W&' 'f* Wl 'X-* #(J* XuAOp oi*E j&t (,c* WB*Ee NvA '/ qAtv' ?`*( Ww $7*E jk' *EAy* 'f* Wl C(&# ok E,/\ ?k*E '(H#( /*( #(G*E (H* *(I M) ok E,/\ ?k*E uuO '(Y *B WÏ ?I}# *l, 'q, #(J* XuAO49 #|* #(J* XuAOp '(Y ?D (ë C(R*E *l, *(I (Y*( [epoe H×nh 4.2: /> Nl, XuAO 'q, 1234 o> Nl, XuAO 'q, *EAy* ?y*E ok *E\),e [e ;(J* R=ue ;(J* Wl : M) #(J* '&, MxU RE=Eue NB M) jk' ?fA +)\ +) #B j]# '6#( #ù# #/\ 5oY*( '(Iê*E ë j]# '(nU>e K(, #nU xA*E #/\ 'q, #(J* *)t '(Y ok +, ?,@A C(,D* WÏ '&, MxU +) Cv' '(Z# j0, (\H' ?k*Ee §,@A *)t '(Iê*E ?I}# #\, *(I M) Wù '&, ox' *EAy*e K(, C6#( (\H' '&, ox' *EAy* WÏ M)j jn' j0, E,& 'X` 'X-* #&# '(/*( E(,e Bg*E [e4 #A*E #nU jk' #&#( M,c' C- #&# '(/*( E(, #./ 1234 +) #&# E,& 'X` #./ #(Z*E W/A C(, '&, ox' *EAy*e B¶ng 4.1: •,& 'X` jk' Wl '(/*( E(, W/A RE=Eue C2 C1 30pF XTAL2 XTAL1 GND XTAL2 XTAL1 GND NC EXTERRNAL OSCILLATAOR SIGNAL Register Reset Value PC 0000 ACC 0000 B 0000 PSW 0000 SP 0000 DPTR 0007 0000 OIA h Xi*E E,& 'X` #./ ok ?vj #(Is*E 'XY*( L; M) 2 C(, '&, MxU ?D ÐU ;LU *HU jm Mc*( ?fA ',-* 'õ ok *(q RO! 'H, +` 'X6 *E^* *(q 2222e §,@A *)t #B *E(Ü/ M) '/ U(g, ?"' $|*E ?fA ',-* #./ jm *EAy* 'H, +` 'X6 *E^* *(q 2 #./ RO! +Y ?Jt M) jm ;LU 'Ü*( '(]# +) 'Yj Mc*( ?fA ',-*e HY*( [ez 'XY*( o)t (/, #&#( *l, #(J* R=u +q, jH#( ox' *EAy*e NNNNNNNNNNNNNNNNNNNNNNNN H×nh 4.3: /> !H#( '&, ox' *EAy* RE=Eue o> !H#( '&, ox' *EAy* +q, <Po\A*#Pe N(ij M)j #(\ ?fA +)\ RE=Eu #B (,cA qAg '(Y *B U(g, #B 'l, '(,DA p #(A Cú j&te H/t *B, #&#( C(	 xA*E #/\ U(g, CÐ\ $), 'l, '(,DA p #(A Cú j&t 'XIq# C(, *B xAl*E '(nUe uX\*E 1234 jk' #(A Cú j&t ?I}# ?`*( *E(Ü/ oi*E 4p #(A Cú $/\ ?k*E *(I ?m *B, ë #(Is*E z +) ?I}# 'XY*( o)t 'H, +` 'X6 [e4e 3e ;(J* EA : ;&# '()*( +,-* (0 1234 *(I 18349 :1;34 (\"# <=3222 ?@A #B RO! 'X-* #(6U MIA #n' #(Is*E 'XY*(e uX\*E #&# 'XIê*E (}U *(I +xt '(Y #(J* EA ?I}# *l, 'q, ~ ;; e §l, +q, #&# '()*( +,-* #. (0 *(I 12z4 +) 12zp j) C(R*E #B RO! 'X-* #(6U '(Y jm #(Is*E 'XY*( ?I}# MIA #n' ë 'X-* ok *(q RO! *E\), +) #(Z*E ?I}# *HU #(\ 12z4_zpe <\ +xt9 ?l, +q, 12z4 '(Y #(J* EA U(g, ?I}# *l, ?n' ?D o&\ Xi*E jm #(Is*E 'XY*( ?I}# #n' ë *E\),e EA #B *E(Ü/ M) 'XAt #xU *E\), 5Ex'PX*/M A##PWW> M) #(J* Wl z4 'X-* +F C,DA <KLe NB M) jk' #(J* ?fA +)\ +) U(g, ?I}# *l, (\"# +q, ~ ;; (\"# •N<e H/t *B, #&#( C(&# M) *B C(R*E ?I}# ?D (ëe Vcc Vcc 10 m F 8.2K RST 30 m F X2 3 1 EA/Vpp 19 9 18 + 30 m F 3 1 9 EA/Vpp X1 X1 X2 RST 8.2K 10 m F 11.0592 MHz ë #(Is*E 4[ #(Z*E '/ WÏ 'XY*( o)t #&#( 12z4 Ww $7*E #(J* *)t Cv' (}U +q, PSEN ?D 'XAt #xU #&# #(Is*E 'XY*( ?I}# #n' 'X-* ok *(q RO! ë *E\), 12z4e uX\*E #&# #(6U 1234 +q, ok *(q RO! 'X-* #(6U *(I 18349 1:;34 (\"# <=3222 '(Y EA ?I}# *l, +q, ~ ;; e VÝ dô 4: Hmt 'Yj #(A Cú j&t ?l, +q, /> XuAO = 44e23:p!Hz o> XuAO = 46!Hze Lêi gi¶i: /> 44e23:p!Hz_4p = :p4e6CHze ;(A Cú j&t = 4_:p4e6CHz = 4e213mWe o> 46!Hz_4p = 4ezzz!Hz ;(A Cú j&t = 4_4ezzz!Hz = 2e83mWe ;&# #(J* jR 'g 'X-* ?Jt U(g, ?I}# *l, j) C(R*E #f* '()*( +,-* *)\ ?I}# Ww $7*Ee ;|* (/, #(J* $Iq, ?Jt ?I}# Ww $7*E #(. tvA 'X\*E (c '(l*E $ù/ 'X-* 12z4 +) WÏ ?I}# 'XY*( o)t #(, ',v' ë #(Is*E 44e 6e ;(J* PSEN : §Jt M) #(J* ?fA X/ #(\ U(ÐU #n' #(Is*E 'XY*( 5LX\EX/j ='\XP E*/oMP> 'X\*E (c '(l*E $ù/ 'X-* 12z4 '(Y #(Is*E 'XY*( ?I}# #n' ë ok *(q RO! *E\), '(Y #(J* *)t ?I}# *l, 'q, #(J* OE #./ RO!e ;(, ',v' ?I}# o)* ë #(Is*E 4[e 8e ;(J* AOE: ;(J* #(\ U(ÐU #(l' ?`/ #(a AOE M) #(J* ?fA X/ +) ?I}# '6#( #ù# #/\e K(, *l, 12z4 'q, ok *(q *E\), '(Y #r*E 2 #ò*E ?I}# #nU ?`/ #(a +) $b M,cAe H/t *B, #&#( C(&# 12z4 $y* ?`/ #(a +) $b M,cA qA/ #r*E 2 ?D ',v' C,cj Wl #(J*e ;(J* AOE ?I}# Ww $7*E ?D U(J* C-*( ?`/ #(a +) $b M,cA oi*E #&#( *l, 'q, #(J* • #./ #(6U 8[O=z8ze §,@A *)t ?I}# *B, #(, ',v' ë #(Is*E 4[e 1e ;&# #(J* #r*E +)\ X/ +) #&# #(]# *^*E #./ #(Z*Ee Bl* #r*E L29 L49 Lp +) Lz ?@A Ww $7*E 1 #(J* +) 'H\ '()*( #r*E 1 o6'e un' #g #&# #r*E C(, RE=Eu ?@A ?I}# #nA (Y*( *(I #&# ?fA X/9 W½* W)*E ?D ?I}# Ww $7*E *(I #&# #r*E ?fA X/e !Al* Ww $7*E #r*E *)\ 'X\*E Wl #&# #r*E *)t M)j ?fA +)\ '(Y *B U(g, ?I}# MxU 'XY*(e :e ;r*E L2e ;r*E 2 #(,vj 'n' #g 1 #(J* 5'õ #(J* zp ?v* z:>e NB #B '(D ?I}# $%*E *(I #r*E ?fA X/9 ?D Ww $7*E #&# #(J* #./ #r*E 2 +õ/ M)j ?fA X/9 +õ/ M)j ?fA +)\ '(Y j{, #(J* U(g, ?I}# *l, 'q, jk' ?,c* 'Xë CÐ\ o-* *E\), 42CWe §,@A *)t M) $\ jk' '(ù# 'v M) #r*E L2 M) jk' j)*E jë C(&# +q, #&# #r*E L49 Lp +) Lze K(&, *,cj j&*E jë ?I}# Ww $7*E 'X\*E #&# #(6U !O= +@ #(õ*E jù# *)\ ?B *B E,l*E *(I ;RNMP#N's (ë ?l, +q, #&# #(6U uuOe uX\*E on' Cú (c '(l*E *)\ Ww $7*E 18349 1:;34 (\"# <=3222 '/ '(Iê*E *l, #r*E L2 'q, #&# ?,c* 'Xë CÐ\9 XPj (Y*( [e[ oi*E #&#( *)t '/ #B ?I}# #&# IA ?,Dj #./ #r*E L2 #(\ #g ?fA X/ +) ?fA +)\e ~q, *(b*E ?,c* 'Xë CÐ\ *E\), ?I}# *l, C(, '&, MxU #r*E L2 ?I}# #nA (Y*( *(I jk' #r*E ?fA X/e ~6 $79 ?\H* jm W/A ?Jt WÏ M,-* '7# Ew, X/ #r*E L2 #&# E,& 'X` 33[ +) AAHe MOV A, #554 BACK: MOV P0, A ACALL DELAY CPL A SJMP BACK Hình 4.4: ;r*E L2 +q, #&# ?,c* 'Xở Cé\e /> ;r*E L2 ?fA +)\: ~q, #&# ?,c* 'Xở ?I}# *l, 'q, #r*E L2 *(ij ?D 'H\ *B '()*( #r*E ?fA +)\ '(Y *B U(g, ?I}# MxU 'XY*( oi*E #&#( E(, 4 'q, 'n' #g #&# o,'e Đ\H* jm $Iq, ?Jt Wẽ #nA (Y*( L2 MZ# ?fA M) ?fA +)\ oi*E #&#( E(, 4 ?v* *B +) W/A ?B $b M,cA *(x* ?I}# 'ừ *B ?I}# Ew, ?v* L4e o> MOV A,#FFH ; Gán A = FF dạng Hex MOV P0, A ; Tạo cổng P0 làm cổng đầu vào bằng cách ; Ghi tất cả các bit của nó. BACK: MOV A, P0 ; Nhận dữ liệu từ P0 MOV P1, A ; Gửi nó đến cổng 1 SJMP BACK ; Lặp lại o> ~/, 'X| CéU #./ #r*E L2: N(I 'XY*( o)t 'X-* (Y*( [e49 #r*E L2 ?I}# E&* A<2 N A<8 #(\ U(éU *B ?I}# Ww $7*E +ừ/ #(\ ?`/ #(a9 +ừ/ #(\ $b M,cAe K(, *l, 1234_z4 'q, ok *(q *E\), '(Y #r*E 2 #A*E #nU #g ?`/ #(a +) $b M,cA 1234 $y* $b M,cA +) ?`/ #(a qA/ #r*E L2 ?D ',v' C,cj Wl #(J*e AOE o&\ *vA L2 #B ?`/ #(a (/t $b M,cA C(, AOE N 2 *B #nU $b M,cA <2 N <8e <\ +xt9 AOE ?I}# Ww $7*E ?D '&#( ?`/ #(a +) $b M,cA +q, Wự 'X} E,ZU #./ #(l' 8[O=z8z j) '/ Wẽ o,v' #7 '(D ở #(Is*E 4[e 42e ;r*E L4e ;r*E L4 #ũ*E #(,vj 'n' #g 1 #(J* 5'ừ #(J* 4 ?v* #(J* 1> *B #B '(D ?I}# Ww $7*E *(I ?fA +)\ (\"# ?fA X/e =\ +q, #r*E L2 '(Y #r*E *)t C(R*E #f* ?v* ?,c* 'Xở Cé\ +Y *B ?m #B #&# ?,c* 'Xở Cé\ o-* 'X\*Ee uX\*E qA& 'XY*( '&, MHU '(Y #r*E L4 ?I}# #nA (Y*( *(I jk' #r*E ?fA X/e ~6 $79 ?\H* jm W/A Wẽ Ew, M,-* '7# #&# E,& 'X` 33 +) AAH X/ #r*E L4e MOV A, #55H BACK: MOV P1, A Vcc 10K P0 .0 P0 .1 P0 .2 L2 ez P0 .4 P0 .5 P0 .6 P0 .7 DS5000 8751 8951 Port 0 ACALL DELAY SJMP BACK ;r*E L4 *(I ?fA +)\: ĐD o,v* #r*E L4 '()*( ?fA +)\ '(Y *B U(g, ?I}# MxU 'XY*( oi*E #&#( E(, jk' ?v* 'n' #g #&# o,' #./ *Be Oh $\ +@ ?,@A *)t ?I}# o)* ở j7# M7# AUUP*$,x ;epe uX\*E ?\H* jm W/A9 #r*E L4 MZ# ?fA ?Is# #nA (Y*( *(I #r*E ?fA +)\ oi*E #&#( E(, 4 +)\ #&# o,' #./ *B +) W/A ?B $b M,cA *(x* ?I}# 'ừ #r*E *)t ?I}# #n' +)\ R89 R6 +) R3e MOV A, #0FFH ; Nạp A = FF ở dạng hex MOV P1, A ; Tạo cổng P1 thành cổng đầu vào bằng ; cách ghi 1 vào các bit của nó. MOV A, P1 ; Nhận dữ liệu từ P1 MOV R7, A ; Cất nó vào thanh ghi R7 ACALL DELAY ; Chờ MOV A, P1 ; Nhận dữ liệu khác từ P1 MOV R6, A ; Cất nó vào thanh ghi R6 ACALL DELAY ; Chờ MOV A, P1 ; Nhận dữ liệu khác từ cổng P1 MOV R5, A ; Cất nó vào thanh ghi R5 44e ;r*E Lp: ;r*E Lp #ũ*E #(,vj 1 #(J* 5#&# #(J* 'ừ p4 ?v* p1>e NB #B '(D ?I}# Ww $7*E *(I ?fA +)\ (\"# ?fA X/ E,l*E *(I #r*E L49 #r*E Lp #ũ*E C(R*E #f* ?,c* 'Xở Cé\ +Y *B ?m #B #&# ?,c* 'Xở Cé\ o-* 'X\*Ee K(, '&, MxU9 '(Y #r*E Lp ?I}# #nA (Y*( *(I jk' #r*E ?fA X/e ~6 $79 ?\H* jm W/A Wẽ Ew, M,-* '7# X/ #r*E Lp #&# E,& 'X` 33H +) AAHe ĐB M) 'n' #g #&# o,' #./ Lp M-* xAl*E M,-* '7#e MOV A, #55H BACK: MOV P2,A ACALL DELAY CPL A SJMP BACK /> ;r*E Lp *(I ?fA +)\e ĐD 'H\ #r*E Lp *(I ?fA +)\ '(Y *B U(g, ?I}# MxU 'XY*( oi*E #&#( E(, #&# Wl 4 'q, 'n' #g #&# #(J* #./ *Be Đ\H* jm W/A ?Jt ?fA ',-* #nA (,*( Lp M) #r*E +)\ oi*E #&#( E(, jk' ?v* 'n' #g #&# #(J* #./ *B +) W/A ?B $b M,cA *(x* ?I}# 'ừ Lp ?I}# Ew, M,-* '7# ?v* L4e MOV A, 0FFH ; Gán A giá trị FF dạng Hex MOV P2, A ; Tạo P2 là cổng đầu vào bằng cách ; ghi một đến các chân của nó BACK: MOV A, 2 ; Nhận dữ liệu từ P2 MOV P1, A ; Gửi nó đến P1 SJMP BACK ; Lặp lại o> ~/, 'X| CéU #./ Lpe uX\*E #&# (c '(l*E $ự/ 'X-* 18349 1:;34 +) <=3222 '(Y Lp ?I}# $%*E *(I ?fA X/ ?s* E,g*e uAt *(,-* 'X\*E (c '(l*E $ự/ 'X-* 12z4p '(Y #r*E Lp U(g, ?I}# $%*E #%*E +q, L2 ?D 'H\ X/ ?`/ #(a 46 oX' ?l, +q, ok *(q *E\),e N(I #(a X/ 'X-* (Y*( [e4 #r*E Lp #ũ*E ?I}# #(a ?`*( *(I M) A1 N A43 o&\ #(]# *^*E CéU #./ *Be ~Y jk' ok 12z4 #B C(g *^*E 'XA*E #xU 6[C ot'P ok *(q *E\),9 *B #f* jk' ?Iờ*E ?`/ #(a 46 o6'e uX\*E C(, Le2 #A*E #nU 1 o,' '(nU qA/ A2 N A8e ;R*E +,c# #./ Lp M) #A*E #nU #&# o6' ?`/ #(a A1 N A43e H/t *B, #&#( C(&# C(, 12z4?I}# *l, 'q, ok *(q *E\), '(Y Lp ?I}# $%*E #(\ 1 o6' #./ ?`/ #(a 46 o,' +) *B C(R*E '(D $%*E #(\ +)\ X/e Đ,@A *)t Wẽ ?I}# 'XY*( o)t #(, ',v' ở #(Is*E 4[e uừ *(b*E 'XY*( o)t 'X-* ?Jt '/ #B '(D Cv' MAx* Xi*E 'X\*E #&# (c '(l*E $ự/ 'X-* #&# ok +, ?,@A C(,D* 18349 1:;34 (\"# <=3222 '(Y '/ #B z #l*E L29 L4+) Lp #(\ #&# '(/\ '&# +)\ X/ +) *(I '(v M) #B '(D ?. #(\ #&# ]*E $7*E +q, (fA (v' #&# ok +, ?,@A C(,D*e ;|* #nU Lz M)?D $)*( #(\ *Ed' +) '/ Wẽ #%*E o)* $Iq, ?Jte 44 N ;r*E Lz: ;r*E Lz #(,vj 'r*E #k*E M) 1 #(J* 'ừ #(J* 42 ?v* #(J* 48e NB #B '(D ?I}# Ww $7*E *(I ?fA +)\ (\"# ?fA X/e ;l*E Lz C(R*E #f* #&# ?,c* 'Xở Cé\ #ũ*E *(I L4 +) Lpe !"# $% #l*E Lz ?I}# #nA (Y*( *(I jk' #l*E ?fA X/ C(, '&, MxU9 *(I*E ?Jt C(R*E U(g, M) #&#( *B ?I}# ]*E $7*E U(r o,v* *(n'e ;l*E Lz #B #(]# *^*E or xA*E M) #A*E #nU jk' Wl '6* (,cA qA/* 'X0*E ?"# o,c' #(G*E (H* *(I #&# *Ed'e Bg*E [ep #A*E #nU #&# #(]# *^*E C(&# #./ #l*E Lze u(R*E ',* *)t &U $7*E #(\ #g 1234 +) 12z4e Bảng 4.2: ;&# #(]# *^*E C(&# #./ #l*E Lz Bít của cống P3 Chức năng chân số P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Nhận dữ liệu (RXD) Phát dữ liệu (TXD) Ngắt 0(INT0) Ngắt 1(INT1) Bộ định thời 0 (TO) 1 Bộ định thời 1(T1) Ghi (WR) Đọc (RD) 10 11 12 13 14 15 16 17 ;&# o,' Lze2 +) Lze4 ?I}# $%*E #(\ #&# '6* (,cA *(x* +) U(&' $b M,cA 'X\*E 'XAt@* '(R*E $b M,cA *l, ',vUe XPj #(Is*E 42 ?v' o,v' #&# #(Z*E ?I}# *l, E(éU *(I '(v *)\e ;&# o,' Lzep +) Lzez ?I}# $)*( #(\ #&# *Ed' *E\), +) #(Z*E ?I}# 'XY*( o)t #(, ',v' ở #(Is*E 44e B,' Lze[ +) Lze3 ?I}# $%*E #(\ #&# ok ?`*( '(-j 2 +) 4+) #(, ',v' ?I}# 'XY*( o)t ở #(Is*E :e ;Al, #%*E #&# o,' Lze6 +) Lze8 ?I}# #nU #(\ #&# '6* (,cA E(, +) ?0# #&# ok *(q *E\), ?I}# *l, 'q, #&# (c '(l*E $ự/ 'X-* 12z4e ;(Is*E 4[ Wẽ 'XY*( o)t #&#( #(Z*E ?I}# Ww $7*E *(I '(v *)\ 'X\*E #&# (c '(l*E $ự/ 'X-* 12z4e uX\*E #&# (c '(l*E $ự/ 'X-* 18349 1:;34 (\"# <z3222 '(Y #&# #(J* Lze6 +) Lze8 ?I}# $%*E #(\ +)\ N X/ #|* #&# #(J* C(&# #./ Lz ?I}# Ww $7*E oY*( '(Iờ*E 'X\*E +/, 'X| #(]# *^*E '(/t ?r,e 4.2 Lập trình vào - ra: thao tác bit. 4.2.1 các cách khác nhau để truy cập toàn bộ 8 bit. uX\*E ?\H* j) $Iq, ?Jt #ũ*E *(I 'X\*E *(,@A +6 $7 +)\ X/ 'XIq# ?Jt '\)* ok 1 o,' #./ #r*E L4 ?I}# #xUe BACK: MOV A, # 55H MOV P1,A ACALL DELAY MOV A, #0AAH MOV P1, A ACALL DELAY SJMP BACK Đ\H* j) 'X-* #(l' j{, o,' #./ L4 jk' #&#( M,-* '7#e ;(Z*E '/ ?m '(d*E jk' o,v* '(v #./ #(Is*E 'XY*( 'X-* 'XIq# ?Be BJt E,ờ '/ #B '(D +,v' MH, ?\H* jm 'X-* '(P\ #&#( (,cA qAg (s* oi*E #&#( 'XAt #xU 'Xự# ',vU #r*E j) C(R*E qA/ '(/*( E(, 'r*E *(I W/A: BACK: MOV P1, # 55H ACALL DELAY MOV P1, #00H CALL DELAY SJMP BACK u/ #B '(D +,v' jk' $H*E C(&# #./ ?\H* j) 'X-* oi*E Cỹ '(Ax' ?0# N Ww/ ?r, E(, *(I ở j7# [epep $Iq, ?Jte 4.2.2 Đặc điểm Đọc- sửa đổi - ghi (Read - Modify Write). ;&# #l*E 'X\*E 1234 #B '(D ?I}# 'XAt #xU oi*ECỹ '(Ax' ?I}# E0, M) Đ0#NWw/ ?r,NE(,e Đ"# ?,Dj *)t ',v' C,cj Xn' *(,@A $|*E Mc*( oi*E #&#( Cv' (}U 'n' #g z '(/\ '&#: 4?0# #l*E9 p Ww/ ?r, *B+) z E(, *B X/ #l*E +)\ jk' Mc*( ?s*e Đ\H* j) $Iq, ?Jt 'XIq# (v' ?"' 242424245*(` U(J*> +)\ #l*E 4e =/A ?BMc*( XOR L49 #2TTH '(ự# (,c* U(éU MRNE6#( OR M\H, 'Xừ M) XOR 'X-* #l*E U4 +q, 4444 4444 5 *(` U(J* > +) W/A ?B E(, Cv' qAg 'Xở MH, #l*E L4e MOV P1, #55H ; P1 = 01010101 AGAIN: XLR P1,# 0FFH ; EX - 0R P1 với 1111 1111 ACALL DELAY SJMP AGAIN OIA h Xi*E Mc*( X2R #./ 33H +) TTH Wẽ #(\ Cv' qAg M) AAHe uIs*E 'ự *(I +xt Mc*( X2R #./ AAH +q, TTH MH, #(\ E,& 'X` Cv' qAg M) 33He ;&# Mc*( MRNE6#( ?I}# 'XY*( o)t ở #(Is*E 8e 4.2.3. Khả năng đánh địa chỉ theo bít của các cống ;B *(,@A MZ# #(Z*E '/ #f* 'XAt #xU #(a 4 (\"#p o6' #./ #l*E '(/t +Y 'XAt #xU #g 1 o,' #./ #r*Ee !k' ?,Dj jH*( #./ #&# #r*E 1234 M) #(Z*E #B C(g *^*E 'XAt #xU 'ừ*E o6' X,-*E Xẽ j) C(R*E M)j '(/t ?r, #&# o6' #|* MH, 'X\*E #r*E ?B +6 $79 ?\H* j) $Iq, ?Jt #(l' o,' L4ep M,-* '7#: BACK: CPL P1.2 ; Lấy bù 2 chỉ riêng bit P1.2 ACALL DELAY SJMP BACK !k' o,v* '(D C(&# #./ ?\H* jm 'X-* M): AGACN: SETB P1.2 ; Chỉ thay đổi bít P1.2 lên cao ACALL DELAY CLR P1.2 ; Xoá bít P1.2 xuống thấp ACALL DELAY SJMP AGAIN OIA h Xi*E o6' L4ep M) o6' '(] z #./ #r*E L49 +Y o6' '(] *(n' M) L4e2 +) o,' '(] (/, M) L4e4 +e+eee Bg*E [ez 'XY*( o)t #&# o6' #./ #&# #r*E +)\ X/ #./ 1234e XPj +6 $7 [ep +@ '(/\ '&# o6' #./ #&# o6' +)\ N X/e OIA h Xi*E 'X\*E +6 $7 [ep #&# o,' C(R*E $%*E ?v* M) C(R*E o` g*( (Iở*Ee ĐJt M) C(g *^*E ?&*( ?`/ #(a '(P\ o,' #./ #&# #r*E +)\ N X/ +) M) jk' 'X\*E *(b*E ?,Dj jH*( *(n' #./ ok +, ?,@A C(,D* 1234e Ví dụ 4.2: (mt +,v' #(Is*E 'XY*( '(ự# (,c* #&# #R*E +,c# W/A: /> <At 'XY (,D* '(` o,' L4ep #(\ ?v* C(, *B M-* #&U o> K(, L4ep M-* #/\9 (mt E(, E,& 'X` [3H +)\ #r*E L2 #> w, jk' xA*E #/\ xAl*E '(nU 5HN'\NO> 'q, Lpez Lời giải: SET P1.2 ; Tạo bit P1.2 là đầu vào MOV A, #45H ; Gán A = 45H AGAIN: JNB P1.2, AGAIN ; Thoát khi P1.2 = 1 MOV P0, A ; Xuất A tới cổng P0 SETB P2.3 ; Đ"a P2.3 lên cao CLR P2.3 ; Tạo P2.3 xuống thấp để có xung H-T0-L uX\*E #(Is*E 'XY*( *)t Mc*( JNB L4ep9 A;N 5JNB #B *E(ĩ/ M) *(gt *vA C(R*E o,'> ở MH, +|*E M"U #(\ ?v* C(, L4ep #(I/ M-* #/\e K(, L4ep M-* #/\ *B '(\&' X/ C(F, +|*E M"U E(, E,& 'X` [3H 'q, #r*E L2 +) 'H\ X/ xA*E HN'\NO oi*E #(A{, #&# Mc*( =EuB +) ;ORe . MOV P1, A ; Tạo cổng P1 thành cổng đầu vào bằng ; cách ghi 1 vào các bit của nó. MOV A, P1 ; Nhận dữ liệu từ P1 MOV R7, A ; Cất nó vào thanh ghi R7. P0, A ; Tạo cổng P0 làm cổng đầu vào bằng cách ; Ghi tất cả các bit của nó. BACK: MOV A, P0 ; Nhận dữ liệu từ P0 MOV P1, A ; Gửi nó đến cổng 1 SJMP