Professional Documents
Culture Documents
Chuong9 - Lap Trinh Bo Dinh Thoi
Chuong9 - Lap Trinh Bo Dinh Thoi
Hîp
Ch−¬ng 9
bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh
8051 cã hai bé ®Þnh thêi/bé ®Õm. Chóng cã thÓ ®−îc dïng lµm bé ®Þnh thêi
®Ó t¹o trÔ thêi gian hoÆc lµm bé ®Õm ®Ó ®Õm c¸c sù kiÖn x¶y ra bªn ngoµi bé vi
®iÒu khiÓn.
TH0 TL0
TH1 TL1
(MSB) (LSB)
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
GATE §iÒu khiÓn cæng khi ®−îc thiÕt lËp. Bé ®Þnh thêi/bé ®Õm ®−îc më
chØ khi ch©n INTx cao vµ ch©n ®iÒu khiÓn TRx ®−îc lËp.
NÕu GATE ®−îc xo¸, bé ®Þnh thêi ®−îc më khi TRx ®−îc lËp
C/T Bé ®Þnh thêi hoÆc bé ®Õm bÞ xo¸ khi ho¹t ®éng (®Çu vµo tõ ®ång hå
hÖ thèng trong). ThiÕt lËp ho¹t ®éng bé ®Õm (®Çu vµo tõ ch©n vµo Tx)
M1 ChÕ ®é bit 1
M0 ChÕ ®é bit 0
M1 M0 Mode ChÕ ®é ho¹t ®éng
0 0 0 ChÕ ®é bé ®Þnh thêi 13 bit.
Bé ®Þnh thêi/bé ®Õm 8 bit, ®Þnh tû lÖ tr−íc 5 bit.
0 1 1 ChÕ ®é bé ®Þnh thêi 16 bit, kh«ng ®Þnh tû lÖ tr−íc
1 0 2 ChÕ ®é 8 bit tù n¹p l¹i
Bé ®Õm/bé ®Þnh thêi 8 bit tù n¹p l¹i. THx l−u gi¸ trÞ sÏ tù
n¹p vµo TLx mçi khi trµn
1 1 3 ChÕ ®é bé ®Þnh thêi chia t¸ch
a) 12MHz
b) 16MHz
c) 11,0592MHz
Gi¶i:
1 1
a) × 12MHz = 1MHz vµ T = = 1µs
12 1 / 1MHz
1 1
b) × 16MHz = 1,111Mz vµ T = = 0,75µs
12 1,333MHz
1 1
c) × 11,0592 MHz = 921,6kHz vµ T = = 1,085µs
12 0,9216MHz
C¸c hÖ thèng x©y dùng trªn 8051 th−êng cã tÇn sè th¹ch anh tõ 10 ®Õn
40MHz, song ë ®©y, chóng ta chØ quan t©m ®Õn tÇn sè th¹ch anh 11,0592MHz.
Së dÜ cã sè lÎ nh− vËy lµ do liªn quan ®Õn tèc ®é baud truyÒn th«ng nèi tiÕp cña
8051. TÇn sè XTAL = 11,0592MHz cho phÐp hÖ 8051 truyÒn th«ng kh«ng cã lçi
víi IBM PC. VÊn ®Ò nµy chóng ta sÏ t×m hiÓu ë ch−¬ng 10.
GATE
Mét bit kh¸c cña thanh ghi TMOD lµ bit cæng GATE. Nh− ë H×nh 9.3 cã thÓ
thÊy, c¶ hai bé ®Þnh thêi Timer 0 vµ Timer 1 ®Òu cã bit GATE. VËy chøc n¨ng
cña bit GATE lµ g×? Mçi bé ®Þnh thêi ®Òu cã c¸ch khëi ®éng vµ dõng kh¸c nhau.
Mét sè bé ®Þnh thêi thùc hiÖn ®iÒu nµy b»ng phÇn mÒm, mét sè kh¸c b»ng phÇn
cøng vµ mét sè kh¸c n÷a th× kÕt hîp c¶ phÇn cøng lÉn phÇn mÒm. ChÝnh bé ®Þnh
thêi cña 8051 dïng ph−¬ng ph¸p kÕt hîp. Khëi ®éng vµ dõng bé ®Þnh thêi ®−îc
thùc hiÖn b»ng phÇn mÒm nhê c¸c bit khëi ®éng bé ®Þnh thêi TR (Timer Start) lµ
TR0 vµ TR1. LÖnh thùc hiÖn khëi ®éng vµ dõng Timer 1 t−¬ng øng lµ “SETB
TR1” vµ “CLR TR1” cßn ®èi víi Timer 0 lµ “SETB TR0” vµ “CLR TR0”. C¸c
lÖnh nµy thùc hiÖn khëi ®éng vµ dõng c¸c bé ®Þnh thêi khi bit GATE = 0. NÕu
dïng phÇn cøng tõ bªn ngoµi ®Ó khëi ®éng vµ dõng bé ®Þnh thêi th× cÇn ®Æt bit
GATE = 1. Tuy nhiªn, ®Ó tr¸nh nhÇm lÉn, ë ®©y chóng ta gi¶ thiÕt GATE = 0, cã
nghÜa lµ kh«ng sö dông chÕ ®é khëi ®éng vµ dõng bé ®Þnh thêi b»ng phÇn cøng
mµ b»ng phÇn mÒm. C¸ch viÕt lÖnh chung cho hai bé Timer lµ “SETB TRx” vµ
“CLR TRx”. ViÖc sö dông phÇn cøng ngoµi ®Ó khëi ®éng vµ dõng bé ®Þnh thêi
chóng ta sÏ ®Ò cËp tíi ë ch−¬ng 11 khi bµn vÒ c¸c ng¾t.
VÝ dô 9.3:
T×m gi¸ trÞ cña TMOD nÕu muèn lËp tr×nh bé Timer 0 ë chÕ ®é 2 sö dông
th¹ch anh XTAL 8051 lµm nguån ®ång hå vµ sö dông lÖnh ®Ó khëi ®éng vµ
dõng bé ®Þnh thêi.
Gi¶i:
TMOD = 0000 0010: Timer 0, chÕ ®é 2
C/T = 0: Dïng ®ång hå tõ nguån XTAL
GATE = 0 Dïng phÇn mÒm ®Ó khëi ®éng
vµ dõng bé ®Þnh thêi.
ChÕ ®é 1 vµ chÕ ®é 2 lµ hai chÕ ®é ®−îc sö dông kh¸ phæ biÕn, v× vËy ë ®©y
chóng ta sÏ nghiªn cøu chi tiÕt h¬n.
9.1.4 LËp tr×nh chÕ ®é 1 (Mode1)
D−íi ®©y lµ nh÷ng ®Æc tr−ng vµ nh÷ng phÐp to¸n cña Mode1:
1. §ã lµ bé ®Þnh thêi 16 bit, do vËy c¸c gi¸ trÞ trong kho¶ng tõ 0000 ®Õn FFFFH
cã thÓ ®−îc n¹p vµo thanh ghi TL vµ TH cña bé ®Þnh thêi.
2. Sau khi TL vµ TH ®−îc n¹p gi¸ trÞ ban ®Çu 16 bit th× bé ®Þnh thêi ®−îc khëi
®éng. Thùc hiÖn ®iÒu nµy nhê lÖnh “SETB TR0” cho Timer 0 vµ “SETB TR1”
cho Timer 1.
3. Bé ®Þnh thêi sau khi ®−îc khëi ®éng th× b¾t ®Çu tiÕn hµnh ®Õm t¨ng. Bé ®Þnh
thêi ®Õm lªn cho ®Õn khi ®¹t ®−îc giíi h¹n FFFFH. Khi ®ã bé ®Þnh thêi sÏ quay
vßng tõ FFFFH vÒ 0000 vµ bËt cê bé ®Þnh thêi TF (Timer Flag) lªn møc cao. Cê
bé ®Þnh thêi nµy cã thÓ kiÓm tra ®−îc. Khi cê bé ®Þnh thêi ®−îc thiÕt lËp th× ®Ó
dõng bé ®Þnh thêi b»ng phÇn mÒm cã thÓ sö dông lÖnh “CLR TR0” cho Timer 0
hoÆc “CLR TR1” cho Timer 1. Còng nªn nh¾c l¹i lµ mçi bé ®Þnh thêi ®Òu cã cê
TF riªng: TF0 cña Timer 0 vµ TF1 cña Timer 1.
4. Bé ®Þnh thêi sau khi ®¹t gi¸ trÞ giíi h¹n th× thùc hiÖn quay vßng vÒ 0. §Ó lÆp
l¹i qu¸ tr×nh ®Õm cña bé ®Þnh thêi, c¸c thanh ghi TH vµ TL ph¶i ®−îc n¹p l¹i gi¸
trÞ ban ®Çu vµ cê TF cÇn ®−îc xo¸ vÒ 0.
XTAL ÷12 TH TL TF
Bé giao ®éng
TF lªn cao Cê trµn
khi FFFF → 0
C/T = 0 TR
H×nh 9.4: TÝnh thêi gian trÔ ë tÇn sè XTAL = 11, 0592MHz
VÝ dô 9.4:
Ch−¬ng tr×nh d−íi ®©y t¹o ra sãng vu«ng víi ®é ®Çy xung 50% trªn ch©n
P1.5. Sö dông bé ®Þnh thêi Timer 0 ®Ó t¹o trÔ thêi gian. H·y ph©n tÝch ch−¬ng
tr×nh nµy.
MOV TMOD,#01 ;Chän Timer 0 chÕ ®é 1(16 bit)
HERE: MOV TL0,#0F2H ;TL0=F2H,byte thÊp
MOV TH0,#0FFH ;TH0=FFH,byte cao
CPL P1.5 ;Sö dông ch©n P1.5
ACALL DELAY
SJMP HERE ;N¹p l¹i TH,TL
;--- t¹o trÔ dïng timer 0
DELAY:
SETB TR0 ;Khëi ®éng Timer 0
AGAIN: JNB TF0,AGAIN ;KiÓm tra cê bé ®Þnh thêi
;cho ®Õn khi quay vßng
CLR TR0 ;Dõng Timer 0
CLR TF0 ;Xo¸ cê bé ®Þnh thêi 0
RET
Gi¶i:
C¸c b−íc ®−îc thùc hiÖn ë ch−¬ng tr×nh trªn nh− sau:
1. N¹p TMOD.
2. N¹p gi¸ trÞ FFF2H vµo TH0 - TL0.
3. Chän ch©n P1.5 ®Ó t¹o xung.
4. Gäi ch−¬ng tr×nh con t¹o trÔ DELAY.
5. Trong ch−¬ng tr×nh con DELAY, dïng lÖnh “SETB TR0” ®Ó khëi ®éng
bé ®Þnh thêi Timer 0.
6. Bé Timer 0 thùc hiÖn ®Õm t¨ng theo xung ®ång hå tõ m¸y ph¸t th¹ch
anh. Bé ®Þnh thêi ®Õm t¨ng qua c¸c tr¹ng th¸i FFF3, FFF4 ... cho ®Õn
khi ®¹t gi¸ trÞ FFFFH vµ thªm 1 xung n÷a lµ nã quay vÒ 0 vµ bËt cê bé
®Þnh thêi TF0 = 1. T¹i thêi ®iÓm nµy th× lÖnh JNB sÏ tho¸t khái vßng lÆp
vµ rÏ nh¸nh xuèng thùc hiÖn lÖnh sau JNB.
7. Bé Timer 0 ®−îc dõng bëi lÖnh “CLR TR0”. Ch−¬ng tr×nh con DELAY
kÕt thóc vµ qu¸ tr×nh ®−îc lÆp l¹i.
L−u ý r»ng ®Ó lÆp l¹i qu¸ tr×nh trªn cÇn n¹p l¹i c¸c thanh ghi TH, TL vµ
khëi ®éng l¹i bé ®Þnh thêi.
TF = 0 TF = 0 TF = 0 TF = 0 TF = 1
VÝ dô 9.5:
H·y tÝnh thêi gian trÔ do ch−¬ng tr×nh con DELAY t¹o ra ë VÝ dô 9.4 víi
gi¶ thiÕt tÇn sè XTAL = 11,0592MHz.
Gi¶i:
Bé ®Þnh thêi lµm viÖc ë tÇn sè ®ång hå b»ng 1/12 tÇn sè XTAL, do vËy ta
11,0592
cã = 0,9216 MHz lµ tÇn sè cña bé ®Þnh thêi. KÕt qu¶ lµ mçi nhÞp xung
12
1
®ång hå cã chu kú T = = 1,085µs . Nh− vËy, bé Timer 0 tiÕn hµnh
0,9216MHz
®Õm t¨ng sau mçi 1,085µs vµ ®é trÔ ®−îc x¸c ®Þnh b»ng sè ®Õm ×1,085µs.
Sè ®Õm b»ng FFFFH - FFF2H = 0DH (=13D). Tuy nhiªn, ta ph¶i céng 1
vµo 13 v× cÇn thªm mét nhÞp ®ång hå ®Ó thùc hiÖn quay vßng tõ FFFFH vÒ 0
vµ bËt cê TF. Do vËy, ta cã 14 × 1,085µs = 15,19µs cho nöa chu kú, nªn c¶ chu
kú lµ T = 2 × 15,19µs = 30, 38µs lµ thêi gian trÔ do bé ®Þnh thêi t¹o ra.
VÝ dô 9.6:
H·y tÝnh tÇn sè cña xung vu«ng ®−îc t¹o ra trªn ch©n P1.5 ë VÝ dô 9.5.
Gi¶i:
ë VÝ dô 9.5, khi tÝnh thêi gian trÔ, chóng ta kh«ng xÐt ®Õn thêi gian thùc
hiÖn c¸c lÖnh kh¸c cña vßng lÆp. §Ó tÝnh chÝnh x¸c h¬n, cÇn bæ sung thªm c¸c
chu kú thêi gian cña c¸c lÖnh trong vßng lÆp b»ng c¸ch sö dông b¶ng phô lôc
chu kú m¸y A-1.
Sè chu kú m¸y
HERE: MOV TL0, #0F2H 2
MOV TH0, #0FFH 2
CPL P1-5 1
ACALL DELAY 2
SJMP HERE 2
;--- T¹o trÔ b»ng timer 0
DELAY:
SETB TR0 1
AGAIN: JNB TF0,AGAIN 1
CLR TR0 1
CLR TF0 1
RET 1 .
Tæng céng 27
T = (2 × 27 × 1.085µs vµ F = 17067.75Hz).
Tæng sè chu kú ®· bæ xung lµ x7 nªn chu kú thêi gian trÔ lµ T = 2 × 27 ×
1.085µs = 58,59µs vµ tÇn sè lµ F = 17067,75Hz.
VÝ dô 9.7:
T×m ®é trÔ do Timer 0 t¹o ra ë ®o¹n ch−¬ng tr×nh sau, dïng c¶ hai ph−¬ng
ph¸p ë H×nh 9.4 vµ bá qua thêi gian thùc hiÖn c¸c lÖnh kh¸c cña vßng lÆp.
CLR P2.3 ;Xo¸ P2.3
MOV TMOD,#01 ;Chän Timer0,chÕ ®é 1(16 bit)
HERE: MOV TL0,#3EH ;TL0=3EH,byte thÊp
MOV TH0,#0B8G ;TH0=B8H,byte cao
SETB P2.3 ;BËt P2.3 lªn cao
SETB TR0 ;Khëi ®éng Timer0
AGAIN: JNB TF0,AGAIN ;HiÓn thÞ cê bé ®Þnh thêi TF0
CLR TR0 ;Dõng bé ®Þnh thêi
CLR TF0 ;Xo¸ cê bé ®Þnh thêi vßng sau
CLR P2.3
Gi¶i:
a) §é trÔ ®−îc t¹o ra trong ®o¹n ch−¬ng tr×nh trªn lµ:
(FFFF - B83E + 1) = 47C2H = 18370D
Nªn ®é trÔ lµ: 18370 × 1,085µs = 19, 93145µs.
b) V× TH - TL = B83EH = 47166D, nªn ta cã 65536 - 47166 = 18370.
Nh− vËy, bé ®Þnh thêi thùc hiÖn ®Õm tõ B83EH ®Õn FFFF vµ ®−îc céng
thªm 1 ®Ó quay vßng vÒ 0, tæng céng tÊt c¶ lµ 18370 chu kú ®ång hå. Do vËy ta
cã ®é réng xung lµ 18370 × 1,085µs = 19,93145ms.
VÝ dô 9.8:
Thay ®æi l¹i gi¸ trÞ cña TH vµ TL ë VÝ dô 9.7 ®Ó nhËn ®−îc ®é trÔ thêi gian
lín nhÊt. H·y tÝnh ®é trÔ theo miligi©y. CÇn xÐt thªm thêi gian thùc hiÖn c¸c
lÖnh vßng lÆp.
Gi¶i:
§Ó cã trÔ lín nhÊt, ta cÇn ®Æt TH vµ TL b»ng 0. Nh− vËy, bé ®Þnh thêi ®Õm
®−îc tõ 0000 ®Õn FFFFH vµ sau ®ã quay qua vÒ 0.
CLR P2.3 ;Xo¸ P2.3
MOV TMOD,#01 ;Chän Timer0,chÕ ®é 1(16 bit)
HERE: MOV TL0,#0 ;§Æt TL0=0,byte thÊp
MOV TH0,#0 ;§Æt TH0=0,byte cao
SETB P2.3 ;BËt P2.3 lªn cao
SETB TR0 ;Khëi ®éng bé Timer0
AGAIN: JNB TF0,AGAIN ;HiÓn thÞ cê bé ®Þnh thêi TF0
CLR TR0 ;Dõng bé ®Þnh thêi.
CLR TF0 ;Xo¸ cê TF0
CLR P2.3
Cho TH=0 vµ TL = 0 th× bé ®Þnh thêi ®Õm t¨ng tõ 0000 ®Õn FFFFH, sau ®ã
quay vÒ 0 vµ bËt cê bé ®Þnh thêi TF. KÕt qu¶ ®Õm d−îc 65536 gi¸ trÞ. Do vËy,
®é trÔ = (65536 - 0) × 1.085µs = 71.1065µs.
ë VÝ dô 9.7 vµ 9.8 kh«ng cÇn n¹p l¹i gi¸ trÞ TH vµ TL v× chóng ta ®ang lµm
viÖc víi xung ®¬n. Trong VÝ dô d−íi ®©y cÇn n¹p l¹i c¸c thanh ghi ®ã.
VÝ dô 9.9:
Ch−¬ng tr×nh d−íi ®©y t¹o mét sãng vu«ng trªn ch©n P1.5 b»ng c¸ch dïng
bé Timer 1 ®Ó t¹o ra ®é trÔ thêi gian. H·y t×m tÇn sè cña sãng vu«ng nÕu tÇn
sè XTAL = 11.0592 MHz bá qua thêi gian thùc hiÖn c¸c lÖnh kh¸c cña vßng
lÆp.
MOV TMOD,#01H ;Chän Timer0,chÕ ®é 1(16 bit)
Gi¶i:
V× tÇn sè XTAL = 11.0592MHz nªn bé ®Õm t¨ng gi¸ trÞ sau mçi chu kú
1.085µs. §Ó cã ®é réng xung 5ms th× sè nhÞp ®ång hå lµ: n = 5ms/1.085µs =
4608. Gi¸ trÞ cÇn n¹p vµo TL vµ TH ®−îc tÝnh theo c¸ch: lÊy 65536 trõ ®i 4608
b»ng 60928, råi ®æi sè nµy sang sè hex ®−îc EE00H. Do vËy, gi¸ trÞ n¹p vµo
TH lµ EE vµ TL lµ 00.
CLR P2.3 ;Xo¸ bit P2.3
MOV TMOD,#01 ;Chän Timer0,chÕ ®é 1(16 bit)
HERE: MOV TL0,#0 ;N¹p TL=00
MOV TH0,#EEH ;N¹p TH=EEH
SETB P2.3 ;BËt P2.3 lªn cao
SETB TR0 ;Khëi ®éng bé ®Þnh thêi Timer0
AGAIN:JNB TF0,AGAIN ;LÆp cho ®Õn khi TF0 quay vÒ 0
CLR TR0 ;Dõng bé ®Þnh thêi
CLR TF0 ;Xo¸ cê TF0 cho vßng sau
VÝ dô 9.11:
gi¶ sö tÇn sè XTAL lµ 11,0592MHz, h·y viÕt ch−¬ng tr×nh t¹o ra mét sãng
vu«ng tÇn sè 2kHz trªn ch©n P2.5.
Gi¶i:
VÝ dô nµy t−¬ng tù víi VÝ dô 9.10 song kh¸c vÒ ch©n. C¸c b−íc thùc hiÖn
nh− sau:
1 1
a) T = = = 500µs lµ chu kú cña sãng vu«ng.
f 2kHz
b) Kho¶ng thêi gian cao vµ thÊp lµ 0.5T b»ng 250µs.
250µs
c) Sè nhÞp cÇn trong thêi gian ®ã lµ = 230 vµ gi¸ trÞ cÇn n¹p vµo c¸c
1,085µs
thanh ghi lµ 65536 - 230 = 65306D = FF1AH.
d) Nh− vËy, gi¸ trÞ n¹p vµo TL lµ 1AH vµ TH lµ FFH
Ch−¬ng tr×nh ®−îc viÕt nh− sau:
MOV TMOD,#10H ;Chän Timer0,chÕ ®é 1 (16 bit)
AGAIN: MOV TL1,#1AH ;G¸n gi¸ trÞ byte thÊp TL1=1AH
VÝ dô 9.12:
Gi¶ sö XTAL=11.0592 Mhz. H·y viÕt ch−¬ng tr×nh t¹o sãng vu«ng tÇn sè
50 Hz ë ch©n P2.3.
Gi¶i:
C¸c b−íc thùc hiÖn nh− sau:
1
a) TÝnh chu kú sãng vu«ng: T = = 20 ms
50 Hz
b) TÝnh thêi gian nöa chu kú cho phÇn cao: 0.5T=10 ms
10 ms
c) TÝnh sè nhÞp ®ång hå: n = = 9216
1,085µs
d) TÝnh gi¸ trÞ cÇn n¹p vµo TH vµ TL: 65536 - 9216 = 56320 chuyÓn vÒ
d¹ng Hex lµ DC00H, nh− vËy TH = DCH vµ TL = 00H.
MOV TMOD,#10H ;Chän Timer0,chÕ ®é 1(16 bit)
AGAIN: MOV TL1,#00 ;G¸n gi¸ trÞ byte thÊp TL1=00
MOV TH1,#0DHCH ;G¸n gi¸ trÞ byte cao TH1=DC
SETB TR1 ;Khëi ®éng Timer1
BACK: JNB TF1,BACK ;LÆp cho ®Õn khi quay vÒ 0
CLR TR1 ;Dõng bé ®Þnh thêi
CPL P2.3 ;Bï bit P1.5
CLR TF1 ;Xo¸ cê TF1
SJMP AGAIN ;N¹p l¹i bé ®Þnh thêi
C¶ hai yÕu tè nµy n»m ngoµi kh¶ n¨ng ®iÒu chØnh cña lËp tr×nh viªn 8051. VÝ
dô, ®é trÔ thêi gian lín nhÊt cã thÓ ®¹t ®−îc khi ®Æt c¶ TH vµ TL b»ng 0. Nh−ng
nh− vËy lµ ch−a ®ñ nÕu cÇn cã thêi gian trÔ lín h¬n. Tr−íc khi xem xÐt vÝ dô
minh ho¹ néi dung nµy, chóng ta h·y lµm quen víi viÖc sö dông calculator cña
Windows:
Dïng Calculator cña Windows ®Ó tÝnh TH vµ TL
Calculator (bµn tÝnh con) cña Windows cã ngay trong phÇn mÒm Windows
rÊt dÔ sö dông ®Ó tÝnh c¸c gi¸ trÞ cho TH vµ TL. gi¶ sö t×m gi¸ trÞ cho TH vµ TL
víi ®é trÔ thêi gian lín lµ 35.000 nhÞp ®ång hå víi chu kú 1,085µs, ta thùc hiÖn
c¸c b−íc nh− sau:
1. Chän m¸y tÝnh Calculator tõ Windows vµ ®Æt chÕ ®é tÝnh vÒ sè thËp ph©n
Decimal.
2. NhËp tõ bµn phÝm sè 35.000.
3. ChuyÓn vÒ chÕ ®é Hex, Calculator cho gi¸ trÞ 88B8H.
4. Chän +/- ®Ó nhËn sè ®æi dÊu - 35.000 d¹ng thËp ph©n vµ chuyÓn vÒ d¹ng Hex
lµ 7748H.
5. Hai sè hex cuèi lµ cho TL = 48 vµ hai sè Hex tiÕp theo lµ cho TH = 77. Ta bá
qua c¸c sè F ë phÝa bªn tr¸i trªn Calculator v× sè cÇn cã chØ 16 bit.
VÝ dô 9.13:
H·y kiÓm tra ch−¬ng tr×nh sau vµ t×m ®é trÔ thêi gian tÝnh theo gi©y, bá
qua thêi gian thùc hiÖn c¸c lÖnh trong vßng lÆp.
MOV TMOD,#10H ;Chän bé Timer1,chÕ ®é 1(16 bit)
AGAIN: MOV R3,#200 ;Chän bé ®Õm ®é gi÷ chËm lín
MOV TL1,#08 ;N¹p byte thÊp TL1=08
MOV TH1,#08 ;N¹p byte cao TH1=01
SETB TR1 ;Khëi ®éng Timer1
BACK: JNB TF1,BACK ;Gi÷ cho ®Õn khi quay vÒ 0
CLR TR1 ;Dõng bé ®Þnh thêi.
CLR TF1 ;Xo¸ cê bé ®Þnh thêi TF1
DJNZ R3,AGAIN ;NÕu R3≠0 th× n¹p l¹i
9.1.5 ChÕ ®é 0
ChÕ ®é 0 hoµn toµn gièng chÕ ®é 1, chØ cã ®iÓm kh¸c ®ã lµ bé ®Þnh thêi 16
bit ®−îc thay b»ng 13 bit. Bé ®Õm 13 bit cã thÓ l−u ®−îc trong TH - TL c¸c gi¸ trÞ
tõ 0000 ®Õn 1FFFF. Do vËy, khi bé ®Þnh thêi ®¹t ®−îc gi¸ trÞ cùc ®¹i lµ 1FFFH
th× nã sÏ quay trë vÒ 0000 vµ cê TF ®−îc bËt.
9.1.6 LËp tr×nh chÕ ®é 2
§Æc tr−ng vµ c¸c phÐp tÝnh cña chÕ ®é 2:
1. §ã lµ mét bé ®Þnh thêi 8 bit, do vËy chØ cho phÐp c¸c gi¸ trÞ tõ 00 ®Õn FFH
®−îc n¹p vµo thanh ghi TH cña bé ®Þnh thêi.
2. Sau khi TH ®−îc n¹p gi¸ trÞ 8 bit th× 8051 sao néi dung ®ã vµo TL vµ bé ®Þnh
thêi ®−îc khëi ®éng. LÖnh thùc hiÖn khëi ®éng lµ “SETB TR0” ®èi víi Timer0 vµ
“SETB TR1” ®èi víi Timer1 gièng nh− ë chÕ ®é 1.
3. Bé ®Þnh thêi sau khi ®−îc khëi ®éng th× b¾t ®Çu ®Õm t¨ng b»ng c¸ch t¨ng
thanh ghi TL. Bé ®Þnh thêi ®Õm cho ®Õn khi ®¹t gi¸ trÞ giíi h¹n lµ FFH. Khi quay
vßng tõ FFH trë vÒ 00 th× cê bé ®Þnh thêi TF ®−îc thiÕt lËp. Cô thÓ, ®ã lµ hai cê
TF0 vµ TF1 t−¬ng øng víi bé ®Þnh thêi ®−îc sö dông lµ Timer 0 hay Timer 1.
XTAL TL TF Cê trµn
Bé giao ®éng ÷12
4. Khi thanh ghi TL quay tõ FFH trë vÒ 00, cê TF ®−îc bËt lªn 1 th× thanh ghi
TL ®−îc tù ®éng n¹p l¹i víi gi¸ trÞ ban ®Çu ®−îc gi÷ ë thanh ghi TH. §Ó lÆp l¹i
qu¸ tr×nh, ®¬n gi¶n lµ chØ viÖc xo¸ cê TF vµ ®Ó bé ®Þnh thêi tù lµm viÖc mµ kh«ng
cÇn lËp tr×nh viªn can thiÖp hay n¹p l¹i gÝa trÞ ban ®Çu. V× lý do ®ã, chÕ ®é 2 ®−îc
gäi lµ chÕ ®é tù n¹p, vµ kh¸c víi chÕ ®é 1, ë ®ã lËp tr×nh viªn cÇn n¹p l¹i c¸c
thanh ghi TH vµ TL.
Nªn nh¾c l¹i lµ, chÕ ®é 2 lµ bé ®Þnh thêi 8 bit. Tuy nhiªn, chÕ ®é nµy cã kh¶
n¨ng tù n¹p l¹i. Khi tù n¹p l¹i th× TH kh«ng thay ®æi mµ vÉn gi÷ nguyªn gi¸ trÞ
ban ®Çu, cßn TL ®−îc n¹p l¹i gi¸ trÞ lÊy tõ TH. ChÕ ®é nµy cã nhiÒu øng dông,
trong ®ã cã c¶ thiÕt lËp tÇn sè baud trong truyÒn th«ng nèi tiÕp nh− ta sÏ ®Ò cËp
®Õn ë ch−¬ng 10.
VÝ dô 9.15:
H·y t×m tÇn sè cña xung vu«ng ®−îc t¹o ra trªn ch©n P1.0.
Gi¶i:
MOV TMOD,#2H ;Timer0,chÕ ®é 1 (8 bit, tù n¹p)
AGAIN: MOV TH0 #0 ;N¹p TH0=0
MOV R5,#250 ;§Õm cho ®é trÔ lín
ACALL DELAY
CPL P1.0
SJMP AGAIN
DELAY: SETB TR0 ;Khëi ®éng Timer0
BACK: JNB TF1,BACK ;Gi÷ cho ®Õn khi quay vÒ 0
CLR TR0 ;Dõng Timer0.
CLR TF0 ;Xo¸ cê TF0 cho vßng sau.
DJNZ R5,DELAY
RET
T=2×(250×256×1.085µs)=1.38.88ms vµ =72 Hz.
VÝ dô 9.16:
gi¶ sö chÕ ®é 2 ®−îc chän. H·y x¸c ®Þnh gi¸ trÞ (d¹ng Hex) cÇn n¹p vµo
TH cho c¸c tr−êng hîp sau:
a)MOV TH1,#200 b)MOV TH0,#-60
c)MOV TH1,#-3 d)MOV TH1,#-12
e)MOV TH0,#-48
Gi¶i:
Chóng ta cã thÓ dïng Calculator cña Windows ®Ó kiÓm tra kÕt qu¶. §Æt
Calculator ë chÕ ®é Decimal vµ nhËp sè 200. Sau ®ã chän Hex, Ên +/- ®Ó nhËn
gi¸ trÞ cña TH. Nªn l−u ý lµ chóng ta chØ sö dông hai ch÷ sè vµ bá qua c¸c sè
bªn tr¸i v× d÷ liÖu ®óng chØ cã 8 bit. KÕt qu¶ ta nhËn ®−îc nh− sau:
Sè thËp ph©n Sè bï hai (gi¸ trÞ TH)
-200 38H
-60 C4H
-3 FDH
-12 F4H
-48 D0H
Trong nhiÒu vÝ dô tÝnh thêi gian trÔ nªu trªn, chóng ta ®· bá qua thêi gian
thùc hiÖn c¸c lÖnh trong vßng lÆp. DÜ nhiªn, ®Ó tÝnh to¸n chÝnh x¸c th× nh÷ng thêi
gian trªn cÇn ®−îc xÐt ®Õn.
Chóng ta ®· nghiªn cøu bé ®Þnh thêi cña 8051 dïng lµm bé t¹o thêi gian trÔ.
Tuy nhiªn, bé ®Þnh thêi cßn cã mét øng dông thó vÞ n÷a, ®ã lµ lµm bé ®Õm sù
kiÖn. Chóng ta sÏ tiÕp tôc t×m hiÓu néi dung nµy.
VÝ dô 9.18:
gi¶ sö xung ®ång hå ®−îc cÊp tíi ch©n T1. H·y viÕt ch−¬ng tr×nh cho bé
®Õm 1 ë chÕ ®é 2 ®Ó ®Õm c¸c xung vµ hiÓn thÞ tr¹ng th¸i cña sè ®Õm TL1 trªn
cæng P2.
Gi¶i:
MOV TMOD,#01100000B ;Chän bé ®Õm 1, chÕ ®é 2, bit
;C/T=1 xung ngoµi
8051
®Õn
P1 LEDs
§Ó ý lÖnh “SETB P3.5” ë ch−¬ng tr×nh trªn. V× c¸c cæng ®−îc thiÕt lËp lµm
®Çu ra mçi khi 8051 ®−îc cÊp nguån, do ®ã, ®Ó P3.5 trë thµnh ®Çu vµo th× cÇn
chuyÓn nã lªn møc cao. Nãi c¸ch kh¸c, ta cÇn ®Þnh l¹i cÊu h×nh cho ch©n T1
(P3.5) ®Ó trë thµnh ch©n vµo.
Cê OV Cê OV
Timer 0 Timer 0
ch©n vµo TH0 TL0 TF0 ch©n vµo TH1 TL1 TF1
ngoµi ngoµi
Pin 3.4 TR0 TF0 lªn cao Pin 3.5 TR1 TF0 lªn cao
khi FFFF → 0 khi FFFF → 0
− −
C/T =1 C/T =1
H×nh 9.5: a) Timer0, ®Çu vµo ngoµi (mode1) b) Timer1, ®Çu vµo ngoµi (mode1)
VÝ dô 9.19:
Gi¶ sö mét d·y xung cã tÇn sè 1 Hz ®−îc nèi tíi ch©n ®Çu vµo P3.4. H·y
viÕt ch−¬ng tr×nh hiÓn thÞ bé ®Õm 0 trªn mµn LCD. Gi¸ trÞ ban ®Çu cña TH0 lµ -
60.
Gi¶i:
§Ó hiÓn thÞ sè ®Õm TL trªn LCD ta ph¶i thùc hiÖn chuyÓn ®æi d÷ liÖu 8 bit
nhÞ ph©n vÒ m· ASCII.
ACALL LCD-SET UP ;Khëi t¹o CLD
MOV TMOD,#000110B ;Chän Timer0,Mode2,bit C/T=1
MOV TH0,#-60 ;§Õm 60 xung
SETB P3.4 ;LÊy T0 lµm ®Çu vµo
AGAIN: SETB TR0 ;B¾t ®Çu ®Õm TL0
BACK: MOV A,TL0 ;Sao l¹i TL0
ACALL CONV ;ChuyÓn ®æi ë R2,R3,R4
ACALL DISLAY ;HiÓn thÞ trªn LCD
JNB TF0,BACK ;Thùc hiÖn vßng lÆp nÕu TF=0
CLR TR0 ;Dõng bé ®Õm 0
CLR TF0 ;Xo¸ cê TF0=0
SJMP AGAIN ;TiÕp tôc
; chuyÓn ®æi m· nhÞ ph©n 8 bit vÒ mµ SCII
;khi trë vÒ, R4,R3,R2 cã m· ASCII
CONV: MOV B,#10 ;Chia cho 10
DIV AB
MOV R2,B ;L−u gi÷ sè thÊp
MOV B,#10 ;Chia cho 10 mét lÇn n÷a
DIV AB
ORL A,#30H ;§æi vÒ ASCII
MOV R4,A ;L−u MSD
MOV AB
ORL A,#30H ;§æi sè thø hai vÒ ASCII
MOV R3, A
MOV A, R2
ORL A, #30H ;§æi sè thø ba vÒ ASCII
MOV R2, A ;L−u sè ASCII vµo R2
RET
Sö dông tÇn sè 60Hz ta cã thÓ t¹o ra ®ång hå chØ thêi gian gi©y, phót, giê.
L−u ý r»ng, b×nh th−êng vßng ®Çu tiªn ®−îc b¾t ®Çu tõ 0 v× khi RESET th×
TL0 = 0. §Ó gi¶i quyÕt vÊn ®Ò nµy ph¶i n¹p tõ ®Çu ch−¬ng tr×nh TL0 víi gi¸ trÞ
- 60.
8051
P1 ®Õn
LEDs
P3.4
1 Hz clock T0
B¶ng 9.2: C¸c lÖnh t−¬ng ®−¬ng ®èi víi thanh ghi ®iÒu khiÓn bé ®Þnh thêi
§èi víi Timer 0
SETB TR0 = SETB TCON.4
CLR TR0 = CLR TCON.4
th× viÖc khëi ®éng vµ dõng bé ®Þnh thêi Timer 0 vµ Timer 1®−îc thùc hiÖn tõ bªn
ngoµi qua ch©n P2.3 vµ P3.3 t−¬ng øng. Tuy nhiªn, nÕu TRx ®−îc bËt lªn b»ng
lÖnh “SETB TRx” th× còng cho phÐp khëi ®éng vµ dõng bé ®Þnh thêi tõ bªn ngoµi
t¹i bÊt kú thêi ®iÓm nµo th«ng qua c«ng t¾c chuyÓn m¹ch ®¬n gi¶n. Ph−¬ng ph¸p
dïng phÇn cøng ®Ó dõng vµ khëi ®éng bé ®Þnh thêi cã rÊt nhiÒu øng dông. VÝ dô,
hÖ 8051 lµm thiÕt bÞ b¸o ®éng theo tõng gi©y sö dông bé Timer 0. Bé Timer 0
®−îc bËt b»ng phÇn mÒm nhê lÖnh “SETB TR0” vµ n»m ngoµi sù kiÓm so¸t cña
ng−êi dïng. Tuy nhiªn, nÕu nèi mét c«ng t¾c chuyÓn m¹ch tíi ch©n P2.3 th× ta cã
thÓ dõng vµ khëi ®éng bé ®Þnh thêi vµ nh− vËy cã thÓ t¾t b¸o ®éng.
Bé giao ®éng
XTAL ÷12
C/T = 0
C/T =1
T0
®Õn ch©n 3.4
TR0
Gate
Bé giao ®éng
XTAL ÷12
C/T = 0
C/T =1
T1
®Õn ch©n 3.5
TR1
Gate