You are on page 1of 24

N. T. C−êng, P. Q. Th¾ng, T. V.

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.

9.1 LËp tr×nh c¸c bé ®Þnh thêi cña 8051


8051 cã hai bé ®Þnh thêi lµ Timer 0 vµ Timer 1. ë phÇn nµy chóng ta t×m
hiÓu c¸c thanh ghi vµ ph−¬ng ph¸p lËp tr×nh ®Ó t¹o ra c¸c ®é trÔ thêi gian.
9.1.1 C¸c thanh ghi c¬ së cña bé ®Þnh thêi
C¶ hai bé ®Þnh thêi Timer 0 vµ Timer 1 ®Òu cã ®é dµi 16 bit. Do 8051 cã cÊu
tróc 8 bit, nªn mçi bé ®Þnh thêi ®−îc truy cËp d−íi d¹ng hai thanh ghi ®éc lËp lµ
byte thÊp vµ byte cao. Chóng ta sÏ nghiªn cøu tõng thanh ghi.
Thanh ghi cña bé Timer 0
Thanh ghi 16 bit cña bé Timer 0 ®−îc truy cËp theo 2 byte lµ byte thÊp vµ
byte cao. Thanh ghi byte thÊp ®−îc gäi lµ TL0 (Timer 0 Low byte) vµ thanh ghi
byte cao lµ TH0 (Timer 0 high byte). C¸c thanh ghi nµy cã thÓ ®−îc truy cËp nh−
mäi thanh ghi kh¸c, ch¼ng h¹n nh− A, B, R0, R1, R2 v.v... VÝ dô, lÖnh “MOV
TL0, #4FH” lµ chuyÓn gi¸ trÞ 4FH vµo TL0 - byte thÊp cña bé ®Þnh thêi 0. C¸c
thanh ghi nµy còng cã thÓ ®−îc ®äc nh− c¸c thanh ghi kh¸c. VÝ dô “MOV R5,
TH0” lµ l−u byte cao TH0 cña Timer 0 vµo R5.

TH0 TL0

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

H×nh 9.1: Thanh ghi cña bé ®Þnh thêi Timer 0


Thanh ghi cña bé Timer 1
Bé ®Þnh thêi gian Timer 1 còng dµi 16 bit vµ thanh ghi 16 bit còng ®−îc chia
ra thµnh hai byte lµ TL1 vµ TH1. C¸c thanh ghi nµy ®−îc truy cËp vµ ®−îc ®äc
gièng nh− c¸c thanh ghi cña bé Timer 0 ë trªn.

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 117


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

TH1 TL1

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

H×nh 9.2: Thanh ghi cña bé ®Þnh thêi Timer 1

9.1.2 Thanh ghi chÕ ®é cña bé ®Þnh thêi TMOD


C¶ hai bé ®Þnh thêi Timer 0 vµ Timer 1 ®Òu dïng chung mét thanh ghi ®−îc
gäi lµ TMOD ®Ó thiÕt lËp c¸c chÕ ®é lµm viÖc kh¸c nhau cña bé ®Þnh thêi. Thanh
ghi TMOD lµ thanh ghi 8 bit gåm cã 4 bit thÊp dµnh cho bé Timer 0 vµ 4 bit cao
dµnh cho Timer 1. Trong ®ã hai bit thÊp cña chóng dïng ®Ó thiÕt lËp chÕ ®é cña
bé ®Þnh thêi, cßn 2 bit cao dïng ®Ó x¸c ®Þnh phÐp to¸n. D−íi ®©y chóng ta sÏ t×m
hiÓu vÒ c¸c phÐp to¸n.

(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

118 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

H×nh 9.3: Thanh ghi TMOD


Bit M1, M0
M0, M1 lµ c¸c bit chÕ ®é dïng ®Ó chän chÕ ®é 0, 1, vµ 2 cña c¸c bé Timer 0,
Timer 1. ChÕ ®é 0 lµ bé ®Þnh thêi 13 bit, chÕ ®é 1 lµ bé ®Þnh thêi 16 bit vµ chÕ ®é
2 lµ bé ®Þnh thêi 8 bit. Chóng ta chØ tËp trung vµo c¸c chÕ ®é ®−îc sö dông réng
r·i lµ chÕ ®é 1 vµ 2. C¸c chÕ ®é ®−îc thiÕt lËp theo tr¹ng th¸i cña M1 vµ M0 nh−
sau:
Bit C/T (®ång hå/bé ®Þnh thêi)
Lµ bit cña thanh ghi TMOD dïng ®Ó x¸c ®Þnh bé ®Þnh thêi ®−îc sö dông lµm
bé t¹o trÔ hay bé ®Õm sù kiÖn. NÕu bit C/T = 0 th× ®ã lµ bé t¹o trÔ. Nguån ®ång
hå cho chÕ ®é trÔ thêi gian lµ tÇn sè th¹ch anh cña 8051. VÒ sö dông bé ®Þnh thêi
lµm bé ®Õm sù kiÖn sÏ ®−îc th¶o luËn ë phÇn sau.
VÝ dô 9.1:
H·y x¸c ®Þnh chÕ ®é vµ bé ®Þnh thêi cña c¸c tr−êng hîp sau:
a)MOV TMOD,#01H b)MOV TMOD,#20H c)MOV TMDO,#12H
Gi¶i:
ChuyÓn sè Hex sang sè nhÞ ph©n vµ ®èi chiÕu víi H×nh 9.3 chóng ta cã:
a)TMOD=00000001,chÕ ®é 1 bé ®Þnh thêi Timer 0 ®−îc chän.
b)TMOD=00100000,chÕ ®é 2 bé ®Þnh thêi Timer 1 ®−îc chän.
c)TMOD=00010010,chÕ ®é 2 bé ®Þnh thêi Timer 0 vµ chÕ ®é 1
cña Timer 1 ®−îc chän.

Nguån xung ®ång hå cña bé ®Þnh thêi


Nh− ®· biÕt, bé ®Þnh thêi lu«n cÇn cã xung ®ång hå ®Ó gi÷ nhÞp. VËy nguån
xung ®ång hå cho c¸c bé ®Þnh thêi cña 8051 lµ g×? NÕu C/T = 0 th× tÇn sè th¹ch
anh trªn chip 8051 ®−îc lµm nguån cho ®ång hå cña bé ®Þnh thêi. §iÒu ®ã cã
nghÜa lµ gi¸ trÞ cña tÇn sè th¹ch anh cña 8051 quyÕt ®Þnh tèc ®é ®ång hå cña c¸c
bé ®Þnh thêi 8051. TÇn sè cña bé ®Þnh thêi lu«n b»ng 1/12 tÇn sè cña th¹ch anh
trªn chip 8051. Xem VÝ dô sau.
VÝ dô 9.2:
H·y t×m tÇn sè ®ång hå vµ chu kú cña bé ®Þnh thêi cña c¸c hÖ thèng x©y
dùng trªn 8051 víi tÇn sè th¹ch anh nh− sau:

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 119


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

a) 12MHz
b) 16MHz
c) 11,0592MHz
Gi¶i:

XTAL TÇn sè ®ång hå


÷12
Bé giao ®éng cña bé ®Þnh thê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

120 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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.

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 121


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

XTAL ÷12 TH TL TF
Bé giao ®éng
TF lªn cao Cê trµn
khi FFFF → 0
C/T = 0 TR

C¸c b−íc lËp tr×nh ë chÕ ®é Mode 1.


§Ó t¹o ra ®é trÔ thêi gian khi dïng chÕ ®é 1 cña bé ®Þnh thêi th× cÇn ph¶i
thùc hiÖn c¸c b−íc d−íi ®©y.
1. N¹p gi¸ trÞ cho thanh ghi TMOD x¸c ®Þnh bé ®Þnh thêi nµo (Timer 0 hay
Timer 1) vµ chÕ ®é nµo ®−îc chän.
2. N¹p gi¸ trÞ ®Õm ban ®Çu cho c¸c thanh ghi TL vµ TH.
3. Khëi ®éng bé ®Þnh thêi.
4. KiÓm tra tr¹ng th¸i bËt cña cê bé ®Þnh thêi TF b»ng lÖnh “JNB TFx, ®Ých”.
Tho¸t vßng lÆp khi TF ®−îc bËt lªn cao.
5. Dõng bé ®Þnh thêi.
6. Xo¸ cê TF cho vßng kÕ tiÕp.
7. Quay trë l¹i b−íc 2 ®Ó n¹p l¹i TL vµ TH.
§Ó tÝnh toµn thêi gian trÔ chÝnh x¸c vµ tÇn sè sãng vu«ng ®−îc t¹o ra trªn
ch©n P1.5 th× ta cÇn biÕt tÇn sè XTAL (xem VÝ dô 9.5).
Tõ VÝ dô 9.6 cã thÓ lËp c«ng thøc tÝnh ®é trÔ sö dông chÕ ®é 1 (16 bit) cña bé
®Þnh thêi ë tÇn sè th¹ch anh XTAL = 11, 0592MHz (xem H×nh 9.4). Cã thÓ dïng
m¸y tÝnh ë th− môc Accessory cña Microsoft Windows ®Ó t×m c¸c gi¸ trÞ TH vµ
TL. M¸y tÝnh nµy hç trî phÐp tÝnh theo sè thËp ph©n, nhÞ ph©n vµ thËp lôc.
a) TÝnh theo sè Hex b) TÝnh theo sè thËp ph©n
(FFFF-YYXX+1)x1,085µs trong §æi gi¸ trÞ YYXX cña TH,TL
®ã YYXX lµ gi¸ trÞ khëi t¹o vÒ sè thËp ph©n NNNNN, sau
cña TH,TL t−¬ng øng. L−u ý ®ã tÝnh (65536-NNNNN)x1,085
r»ng c¸c gi¸ trÞ YYXX lµ sè µs
Hex.

H×nh 9.4: TÝnh thêi gian trÔ ë tÇn sè XTAL = 11, 0592MHz

122 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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.

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 123


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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.

FFF2 FFF3 FFF4 FFFF 0000

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

124 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 125


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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)

126 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

HERE: MOV TL1,#34H ;§Æt byte thÊp TL1=34H


MOV TH1,#76H ;§Æt byte cao TH1=76H
;(gi¸ trÞ bé ®Þnh thêi lµ 7634H)
SETB TR1 ;Khëi ®éng Timer1
AGAIN: JNB TF1,BACK ;LÆp cho ®Õn khi quay vßng
CLR TR1 ;Dõng bé ®Þnh thêi
CPL P1.5 ;LÊy bï ch©n P1.5 ®Ó t¹o xung
CLR TF ;Xo¸ cê bé ®Þnh thêi
SJMP AGAIN ;N¹p l¹i bé ®Þnh thêi do chÕ ®é
;1 kh«ng tù ®éng n¹p l¹i.
Gi¶i:
Trong ch−¬ng tr×nh trªn, cÇn l−u ý ®Õn ®Ých cña lÖnh SJMP. ë chÕ ®é 1,
sau mçi vßng lÆp cÇn n¹p l¹i thanh ghi TH vµ TL ®Ó cã ®−îc sãng liªn tôc.
D−íi ®©y lµ kÕt qu¶ tÝnh to¸n:
Ta cã FFFFH - 7634H = 89CBH + 1 = 89CCH vµ 89CCH = 35276 lµ sè
lÇn ®Õm xung ®ång hå, nªn ®é trÔ lµ 35276 × 1.085µs = 38274ms vµ tÇn sè lµ
1
( Hz ) = 26127 Hz.
38274

X¸c ®Þnh gi¸ trÞ cÇn n¹p vµo bé ®Þnh thêi


Gi¶ sö chóng ta ®· biÕt thêi gian trÔ cÇn cã, vËy gi¸ trÞ n¹p cho c¸c thanh thi
TH vµ TL sÏ lµ bao nhiªu?. Chóng ta xÐt vÝ dô sau víi gi¶ thiÕt tÇn sè dao ®éng
th¹ch anh cña hÖ 8051 lµ 11. 0592MHz.
Tõ VÝ dô 9.10 cã thÓ thÊy c¸c b−íc t×m gi¸ trÞ cña thanh ghi TH vµ TL nh−
sau:
1. Chia thêi gian trÔ cho 1.085µs
2. TÝnh 65536 - n, trong ®ã n lµ gi¸ trÞ thËp ph©n nhËn ®−îc ë b−íc 1.
3. ChuyÓn kÕt qu¶ cña b−íc 2 sang sè Hex, trong ®ã sè yyxx lµ gi¸ trÞ Hex ban
®Çu cÇn n¹p vµo c¸c thanh ghi bé ®Þnh thêi.
4. §Æt TL = xx vµ TH = yy.
VÝ dô 9.10:
gi¶ sö tÇn sè XTAL = 11.0592MHz. H·y x¸c ®Þnh gi¸ trÞ n¹p vµo c¸c
thanh ghi TH vµ TL nÕu cÇn trÔ thêi gian lµ 5µs. H·y viÕt ch−¬ng tr×nh cho bé
Timer 0 ®Ó t¹o ra xung trªn ch©n P2.3 cã ®é réng 5µs.

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 127


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

128 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

MOV TH1,#0FFH ;G¸n gi¸ trÞ byte cao TH1=FFH


SETB TR1 ;Khëi ®éng Timer1
BACK: JNB TF1,BACK ;Gi÷ cho ®Õn khi Timer vÒ 0
CLR TR1 ;Dõng bé ®Þnh thêi
CPL P1.5 ;Bï bit P1.5
CLR TF1 ;Xo¸ cê TF1
SJMP AGAIN ;N¹p l¹i bé ®Þnh thêi

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

T¹o ®é trÔ thêi gian lín


Tõ c¸c VÝ dô trªn cã thÓ thÊy, thêi gian trÔ t¹o ra phô thuéc vµo hai yÕu tè:
- TÇn sè th¹ch anh XTAL
- Thanh ghi 16 bit cña bé ®Þnh thêi ë chÕ ®é 1

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 129


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

130 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

N¹p l¹i TF lªn cao


− TR TH khi FFFF → 0
C/T = 0

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.

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 131


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

C¸c b−íc lËp tr×nh cho chÕ ®é 2


C¸c b−íc t¹o thêi gian trÔ sö dông chÕ ®é 2 cña bé ®Þnh thêi nh− sau:
1. N¹p thanh ghi gi¸ trÞ TMOD ®Ó b¸o bé ®Þnh thêi nµo (Timer 0 hay Timer 1)
vµ chÕ ®é lµm viÖc nµo ®−îc chän.
2. N¹p vµo thanh ghi TH gi¸ trÞ ®Õm ban ®Çu.
3. Khëi ®éng bé ®Þnh thêi.
4. Duy tr× kiÓm tra cê bé ®Þnh thêi TF b»ng lÖnh “JNB TFx, ®Ých” ®Ó xem cê ®·
®−îc bËt ch−a. Tho¸t khái vßng lÆp khi TF lªn cao.
5. Xo¸ cê TF.
6. Quay trë l¹i b−íc 4 v× chÕ ®é 2 lµ chÕ ®é tù n¹p l¹i.
VÝ dô 9.14 sau ®©y minh ho¹ c¸c b−íc thùc hiÖn ë chÕ ®é 2. §Ó cã ®−îc ®é
trÔ lín chóng ta cã thÓ dïng nhiÒu thanh ghi nh− ®−îc tr×nh bµy ë VÝ dô 9.15.
VÝ dô 9.14:
gi¶ sö tÇn sè XTAL = 11.0592MHz. H·y t×m
a) tÇn sè cña sãng vu«ng ®−îc t¹o ra trªn ch©n P1.0 trong ch−¬ng tr×nh sau,
b) tÇn sè nhá nhÊt cã thÓ cã ®−îc b»ng ch−¬ng tr×nh nµy vµ gi¸ trÞ TH cÇn cã lµ
bao nhiªu?.
MOV TMOD,#20H ;Chän Timer1/chÕ ®é2
MOV TH1,#5 ;TH1=5
SETB TR1 ;Khëi ®éng Timer1
BACK: JNB TF1,BACK ;gi÷ cho ®Õn khi vÒ 0
CPL P1.0 ;Dõng bé ®Þnh thêi
CLR TF1 ;Xo¸ cê bé ®Þnh thêi TF1
SJMP BACK ;ChÕ ®é 2 tù ®éng n¹p l¹i.
Gi¶i:
a) Tr−íc hÕt cÇn l−u ý ®Õn ®Ých cña lÖnh SJMP. ë chÕ ®é 2 ta kh«ng cÇn ph¶i
n¹p l¹i TH v× ®ã lµ chÕ ®é tù n¹p. LÊy (256 - 05) ×1.085µs = 251×1.085µs
= 272.33µs lµ phÇn cao cña xung. C¶ chu kú xung lµ T = 544.66µs vµ tÇn
1
sè lµ = 1,83597 KHz.
T
b) §Ó cã ®−îc tÇn sè nhá nhÊt, tøc chu kú T lín nhÊt, th× TH = 00. Khi ®ã T
= 2 × 256 × 1.085 µs = 555.52µs vµ tÇn sè nhá nhÊt sÏ lµ 1/T=1,8 KHz

132 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 133


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

Tr×nh hîp dÞch vµ c¸c sè ©m


ë chÕ ®é 2 bé ®Þnh thêi lµ 8 bit, nªn cã thÓ ®Ó cho tr×nh hîp dÞch tÝnh gi¸ trÞ
TH. VÝ dô, ë lÖnh “MOV TH0, # - 100” th× tr×nh hîp dÞch sÏ tÝnh 100D = 9CH
vµ g¸n TH = 9CH. C¸ch nµy lµm cho c«ng viÖc cña lËp tr×nh viªn nhÑ nhµng h¬n.
VÝ dô 9.17:
H·y x¸c ®Þnh
a) TÇn sè sãng vu«ng ®−îc t¹o ra trong ®o¹n ch−¬ng tr×nh d−íi ®©y.
b) §é ®Çy xung cña sãng nµy.
MOV TMOD,#2H ;Chän bé Timer0/chÕ ®é 2
MOV TH0,#-150 ;N¹p TH0=6AH lµ bï 2 cña -150
SETB TR1 ;Khëi ®éng Timer1
AGAIN: SETB P1.3 ;P1.3=1
ACALL DELAY
ACALL P1.3 ;P1.3=0
ACALL DELAY
SJMP AGAIN
SETB TR0 ;Khëi ®éng Timer0
BACK: JNB TF0,BACK ;Gi÷ cho ®Õn khi quay vÒ 0
CLR TR0 ;Dõng Timer0
CLR TF0 ;Xo¸ cê TF cho vßng sau.
RET
Gi¶i:
§Ó x¸c ®Þnh gi¸ trÞ n¹p cho TH ë chÕ ®é 2 th× nªn ®Ó tr×nh hîp dÞch thùc
hiÖn viÖc chuyÓn ®æi sè ©m ®−îc nhËp vµo, vµ nhê vËy c«ng viÖc tÝnh to¸n cña
lËp tr×nh viªn cã nhÑ ®i. V× sè xung ®ång hå ®−îc sö dông lµ 150, nªn thêi
gian trÔ cña ch−¬ng tr×nh con DELAY lµ 150 × 1.085µs vµ tÇn sè lµ
f=1/T=2,048 KHz

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.

134 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

9.2 LËp tr×nh cho bé ®Õm


Bé ®Þnh thêi cña 8051 ngoµi viÖc dïng lµm bé t¹o trÔ thêi gian cßn cã thÓ
®−îc dïng lµm bé ®Õm c¸c sù kiÖn bªn ngoµi 8051. Ph−¬ng ph¸p lËp tr×nh bé
®Þnh thêi ®−îc giíi thiÖu ë môc tr−íc còng ®−îc ¸p dông cho bé ®Õm sù kiÖn,
ngo¹i trõ nguån tÇn sè. Khi bé ®Þnh thêi/bé ®Õm lµ bé ®Þnh thêi th× nguån tÇn sè
lµ tÇn sè th¹ch anh cña 8051, cßn nÕu lµm bé ®Õm, th× nguån xung ®Ó t¨ng néi
dung c¸c thanh ghi TH vµ TL ®−îc lÊy tõ bªn ngoµi 8051. Nãi chung, c¸c thanh
ghi TMOD, TH, TL, còng nh− c¸c chÕ ®é lµm viÖc cña bé ®Þnh thêi vµ bé ®Õm
®Òu nh− nhau.
9.2.1 Bit C/T trong thanh ghi TMOD
Nh− giíi thiÖu ë trªn, bit C/T cña thanh ghi TMOD cã nhiÖm x¸c ®Þnh nguån
xung ®ång hå cÊp cho bé ®Þnh thêi. NÕu bit C/T = 0 th× bé ®Þnh thêi nhËn xung
®ång hå tõ bé giao ®éng th¹ch anh cña 8051. Ng−îc l¹i, nÕu C/T = 1 th× bé ®Þnh
thêi ®−îc sö dông lµm bé ®Õm vµ nhËn c¸c xung ®ång hå tõ nguån bªn ngoµi cña
8051. Do vËy, víi bit C/T = 1 th× bé ®Õm thùc hiÖn ®Õm t¨ng, khi c¸c xung ®−îc
®−a ®Õn ch©n 14 vµ 15. C¸c ch©n nµy cã tªn lµ T0 (®Çu vµo cña bé ®Þnh thêi
Timer 0), T1 (®Çu vµo cña bé Timer 1) vµ c¶ hai ch©n nµy thuéc vÒ cæng P3. §èi
víi Timer 0, khi C/T = 1 th× ch©n P3.4 cÊp xung ®ång hå vµ bé ®Õm sÏ t¨ng tr¹ng
th¸i mçi khi cã xung ®ång hå ®Õn ch©n nµy. T−¬ng tù, ®èi víi Timer 1 th× khi C/T
= 1, xung ®ång hå ®Õn P3.5 sÏ lµm t¨ng bé ®Õm lªn 1.
B¶ng 9.1: Ch©n cæng P3 ®−îc dïng cho Timer 0 vµ Timer 1
Ch©n Ch©n cæng Chøc n¨ng M« t¶
14 P3.4 T0 §Çu vµo ngoµi cña bé ®Õm 0
15 P3.5 T1 §Çu vµo ngoµi cña bé ®Õm 1

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

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 135


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

MOV TH1,#0 ;Xo¸ TH1


SETB P3.5 ;LÊy ®Çu vµo T1
AGAIN: SETB TR1 ;Khëi ®éng bé ®Õm
BACK: MOV A,TL1 ;LÊy b¶n sao sè ®Õm TL1
MOV P2,A ;§−a TL1 hiÓn thÞ ra cæng P2
JNB TF1,Back ;Duy tr× nã nÕu TF=0
CLR TR1 ;Dõng bé ®Õm
CLR TF1 ;Xo¸ cê TF
SJMP AGAIN ;TiÕp tôc thùc hiÖn

8051

®Õn
P1 LEDs

1Hz clock To P3.4

§Ó ý 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.

ë VÝ dô 9.18 chóng ta sö dông bé Timer 1 lµm bé ®Õm sù kiÖn ®Ó ®Õm t¨ng


mçi khi cã xung ®ång hå cÊp ®Õn ch©n P3.5. C¸c xung ®ång hå nµy cã thÓ biÓu
diÔn sè ng−êi ®i qua cæng hoÆc sè vßng quay hoÆc bÊt kú sù kiÖn nµo cã thÓ
chuyÓn ®æi thµnh xung.
ë VÝ dô 9.19, thanh ghi TL ®−îc chuyÓn ®æi vÒ m· ASCII ®Ó hiÓn thÞ trªn
mµn h×nh LCD.

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)

136 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 137


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

Timer0 cê trµn Timer0 cê trµn


®Çu vµo ®Çu vµo
ngoµi TL0 TF0 ngoµi TL1 TF1
Pin 3.4 Pin 3.5
TR0 TR1
− n¹p l¹i n¹p l¹i

C/T =1 TH0 C/T =1 TH1
TF0 lªn cao TF1 lªn cao khi
khi FF→ 0 FF → 0
H×nh 9.6: Timer0, ®Çu vµo ngoµi (Mode2) H×nh 9.7: Timer1, ®Çu vµo ngoµi (Mode 2)
Mét vÝ dô øng dông kh¸c cña bé ®Þnh thêi gian víi bit C/T = 1 lµ n¹p mét
sãng vu«ng ngoµi víi tÇn sè 60Hz vµo bé ®Þnh thêi. Ch−¬ng tr×nh sÏ t¹o ra c¸c
®¬n vÞ thêi gian chuÈn theo gi©y, phót, giê vµ hiÓn thÞ lªn mµn LCD. KÕt qu¶ sÏ
cho mét ®ång hå thêi gian sè rÊt hÊp dÉn, tuy nhiªn ®é chÝnh x¸c chØ ë møc ®é.
B¹n cã thÓ xem vÝ dô nµy ë phô lôc E.
§Ó kÕt thóc phÇn nµy, cÇn nh¾c l¹i hai vÊn ®Ò quan träng:
1. LiÖu B¹n cã nghÜ r»ng, dïng lÖnh “JNB TFx, ®Ých” ®Ó th−êng xuyªn kiÓm tra
møc cao cña cê TF lµ l·ng phÝ thêi gian cña bé vi ®iÒu khiÓn kh«ng?. §óng nh−
vËy. Tuy nhiªn, chóng ta còng cã gi¶i ph¸p cho vÊn ®Ò nµy ®ã lµ sö dông ng¾t.
NÕu sö dông ng¾t, bé vi ®iÒu khiÓn cã thÓ thùc hiÖn mäi c«ng viÖc kh¸c vµ khi cê
TF ®−îc bËt, ng¾t cã nhiÖm vô b¸o cho bé xö lý biÕt cê ®· chuyÓn tr¹ng th¸i. §©y
lµ mét ®Æc ®iÓm quan träng vµ lµ mét ®iÓm m¹nh cña 8051 (mµ chóng ta sÏ bµn ë
ch−¬ng 11).
2. C©u hái tiÕp theo lµ c¸c thanh ghi TR0 vµ TR1 thuéc vÒ ®©u?. Chóng thuéc
vÒ mét thanh ghi gäi lµ TCON sÏ ®−îc ®Ò cËp ®Õn ngay sau ®©y (TCON - lµ thanh
ghi ®iÒu khiÓn bé ®Õm (bé ®Þnh thêi)).

138 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

SETB TF = SETB TCON.5


CLR TF0 = CLR TCON.5
§èi víi Timer 1
SETB TR1 = SETB TCON.6
CLR TR1 = CLR TCON.6

SETB TF1 = SETB TCON.7


CLR TF1 = CLR TCON.7

TCON: Timer/Counter Control Register

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

9.2.2 Thanh ghi TCON


ë c¸c vÝ dô trªn ®©y, chóng ta ®· biÕt c«ng dông cña c¸c cê TR0 vµ TR1 ®Ó
bËt/t¾t c¸c bé ®Þnh thêi. C¸c bit nµy thuéc thanh ghi ®iÒu khiÓn bé ®Þnh thêi
TCON (Timer Control). §©y lµ thanh ghi 8 bit. Nh− B¶ng 9.2 giíi thiÖu, bèn bit
trªn ®−îc dïng ®Ó l−u c¸c bit TF vµ TR cho c¶ Timer 0 vµ Timer 1. Cßn bèn bit
thÊp ®−îc thiÕt lËp dµnh cho ®iÒu khiÓn c¸c bit ng¾t mµ ta sÏ bµn ë ch−¬ng 11.
Còng cÇn l−u ý r»ng, thanh ghi TCON lµ thanh ghi cã thÓ ®Þnh ®Þa chØ bit ®−îc.
Nªn hoµn toµn cã thÓ thay c¸c lÖnh nh− “SETB TR1” vµ “CLR TR1” b»ng c¸c
lÖnh t−¬ng øng nh− “SET TCON.6” vµ “CLR TCON.6” (xem B¶ng 9.2).
Tr−êng hîp bit GATE = 1 (cña TMOD)
Tr−íc khi kÕt thóc ch−¬ng, chóng ta cÇn lµm râ thªm vÒ tr−êng hîp bit
GATE = 1 trong thanh ghi TMOD. TÊt c¶ nh÷ng g× ®−îc t×m hiÓu trong ch−¬ng
nµy ®Òu víi gi¶ thiÕt GATE = 0. Khi GATE = 0 th× c¸c bé ®Þnh thêi Timer 0 vµ
Timer 1®−îc khëi ®éng b»ng c¸c lÖnh t−¬ng øng “SETB TR0” vµ “SETB TR1”.
VËy nÕu GATE = 1 th× sao? Nh− cã thÓ thÊy trªn H×nh 9.8 vµ 9.9, nÕu GATE = 1

Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh 139


N. T. C−êng, P. Q. Th¾ng, T. V. Hîp

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

INT0 Ch©n 3.2

H×nh 9.8: Bé ®Þnh thêi/bé ®Õm 0

Bé giao ®éng
XTAL ÷12
C/T = 0

C/T =1
T1
®Õn ch©n 3.5
TR1
Gate

INT1 ch©n 3.3

H×nh 9.9: Bé ®Þnh thêi/bé ®Õm 1

140 Ch−¬ng 9: Bé ®Õm/bé ®Þnh thêi vµ lËp tr×nh

You might also like