I HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI IU KHIN 8051
Biên son: Nguyn Bá Thun Page 1 of 12
CHNG 3:
KHI TO CHNG TRÌNH TIMER VÀ CHNG TRÌNH NGT
I. KHI TO CHNG TRÌNH TIMER.
1. C THANH GHI IU KHIN TIMER.

Các Timer thng c khi to 1 ln u chơng trình  thit lp mode
hot ng phc v các ng dng iu khin liên quan n nh thi hay m xung
ngoi.
Tùy thuc vào yêu cu c th ta iu khin cho Timer bt u m, ngng
hay khi ng m li t u.
Thanh ghi TMOD thanh ghi u tiên cn phi khi to  thit lp trng thái
hot ng cho các Timer.
8 7 6 5 4 3 2 1
Gate
C/
M1
M0
Gate
C/
M1
M0
0 0 0 0 0 0 0 1
Cho Timer 1 Cho Timer 0
Chú thích
Bit Chú thích
Gate
- Khi t Bit Gate = 1 thì Timer0 ch làm vic khi các cng vào
c a lnh ngt –INT( Bit P3.3 hay P3.2) s! không có tác dng
- Khi t Bit Gate = 1 thì Timer1 ch làm vic khi INT=1
C/
- Khi t mc áp cao thì các Timer dùng nh b m xung (Counter)
vào t bên ngoài:
V"i Timer1 xung m cho vào Bit P3.5
V"i Timer0 xung m cho vào Bit P3.4
- Khi t mc áp th#p thì các Timer dùng nh m xung c a
mch dao ng, lúc ó nó có th xem nh mt $ng h$ t% chy (Timer)
I HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI IU KHIN 8051
Biên son: Nguyn Bá Thun Page 2 of 12
M1 Bit ch&n mode
M0 Bit ch&n mode
Hai bit M0 và M1 to ra 4 trng thái tng ng v 4 kiu làm vic khác nhau ca
Timer 0 hay Timer1
M1
M0
Mode( Kiu)
Chc nng
0 0 0 Ch  nh thi 13 bit (tơng thích v"i h& 8048)
0 1 1 Ch  Timer hay Counter 16 bit
1 0 2 Ch  Timer hay Counter 8 bit, t np li
1 1 3
Timer 0 c tách thành 2 Timer 8 bit
-Timer 8 bit TL0 c iu khin bi các bit c a
mode Timer0
-Timer 8 bit TH0 c iu khin bi các bit c a
mode Timer1
Timer 1 không hot ng mode 3
Thanh ghi THx và TLx
Các giá tr ùm c c a Timer/Counter thì c luu trong thanh ghi THx
và TLx.
Nu ta không thit lp giá tr bt u m cho các thanh ghi TLx THx
0000h thì Timer s! bt u m t giá tr 0000H n giá tr FFFFH.
C báo tràn TFx
Nu ta thit lp giá tr bt u m cho các thanh ghi TLx THx khác
0000h thì Timer s! bt u m t giá tr ta gán n giá tr FFFFH. Nhng khi chuyn
t giá tr FFFFh n 0000h ts! sinh ra tràn làm cho bit TFx = 1 r$i tip tc m t
giá tr 0000h.
 cho Tiner luôn bt u m t giá tr ta gán tta th lp trình ch sau
m'i ln tràn ta s! cho xóa c TFx gán li giá tr cho TLx/THx  Timer luôn bt
u m t giá tr khi gán lên.
Thanh ghi iu khin TRx
Thanh ghi này có tác dng cho Timer c hay không c phép m xung
Nu TRx = 1 thì Timer c phép m xung
I HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI IU KHIN 8051
Biên son: Nguyn Bá Thun Page 3 of 12
Nu TRx = 0 thì timer không c phép m xung
2. CH KHI TO TIMER.
void delay_1()
{
TMOD=0x01; //khi to timer 0 ch  16 bit
TH0=0xC350; //Np giá tr cn m cho timer 0
TL0=0xC350;
TR0=1; // cho phép timer 0 hot ng
while(!TF0); // kim tra c tràn TF0 mc 0
TF0=0; //xóa c tràn
TR0=0; //không cho phép timer 0 hot ng.
}
Qua chơng trình con Delay_1 trên ta nhn th#y timer 0 hot ng m t 0 n giá tr
C350H (50000 s( thp phân) mt lnh din ra 1 miro giây (thnh anh giao ng
ch&n 12Mhz) vy ta c timer 50ms. Nh vy  m timer s% trì hoãn nhiu hơn
n)a ta dùng cách nh sau:
void delay_1()
{
unsigned int t; //to bin t theo kiu unsigned int
for(t=0;t<20;t++) //to vòng lp for làm 20 ln
{
TMOD=0x01;
TH0=0xC350;
TL0=0xC350;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
}
Chơng trình trên cho th#y iu kin vòng lp for s! t*ng t 0 n 20 c m'i ln
nh vy thì làm delay 50ms mt ln. vy ta mt delay làm i làm li 50ms 20
ln, vy ta có delay 1s. Nu cn làm delay 1 phút hay nhiu hơn n)a ta làm nh sau:
I HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI IU KHIN 8051
Biên son: Nguyn Bá Thun Page 4 of 12
void delay_1(s) //khi to thêm bin s có th thay i c ti delay_1
{
unsigned int f,t; //khi to hai bin f và t theo kiu unsigned int
for(f=0;f<s;f++) //vòng lp for ph thuc giá tr c a bin s
for(t=0;t<20;t++)
{
TMOD=0x01;
TH0=0xC350;
TL0=0xC350;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
}
Nh vy ta th#y chơng trình delay 1s ã bi vòng lp for theo bin t và giá tr so
sánh 20, mu(n t*ng thi gian lên lúc này s! ph thuc vào vòng lp theo bin f giá
tr so sánh ây có th thay i c bin s. gi s+ mu(n có delay 5 giây lúc này ta
ch cn g&i delay_1(5) tc là thay bin s bi s( 5. ví d ng dng s! cho th#y rõ.
#include <at89c51xd2.h> //bao g$m th vin c a at89c51xd2.h
sbit led=P0^0; //gán nh ngh,a led chính là bit P0^0
void delay_1(s) //khi to thêm bin s có th thay i c ti delay_1
{
unsigned int f,t; //khi to hai bin f và t theo kiu unsigned int
for(f=0;f<s;f++) //vòng lp for ph thuc giá tr c a bin s
for(t=0;t<20;t++)
{
TMOD=0x01;
TH0=0xC350;
TL0=0xC350;
TR0=1;
while(!TF0);
TF0=0;
I HC LC HNG GIÁO TRÌNH LP TRÌNH C CHO H VI IU KHIN 8051
Biên son: Nguyn Bá Thun Page 5 of 12
TR0=0;
}
}
main() //chơng trình chính
{
while(1) //vòng lp vô tn
{
led=0; //cho led mc 0
delay_1(5); //delay 5 giây
led=1; //cho led mc 1
delay_1(2); //delay 2 giây
}
}
3. I TP NG DNG.
- Hãy vit chơng trình con delay 50 miro giây.
- Hãy vit chơng trình con delay 20ms.
- Hãy vit chơng trình con delay 2h.
- Hãy vit chơng trình con delay 1day.
II. KHI TO CHNG TRÌNH NGT.
1. C THANH GHI IU KHIN NGT
T chc ngt ca 8051:
- 80515 ngu$n ngt: 2 ngt bên ngoài (INT0 INT1), 2 ngt Timer, 1 ngt
Port n(i tip. 2 ngt bên ngoài th c lp trình  kích ngt b-ng cnh xu(ng
hoc b-ng mc th#p.
- Vic tranh ch#p gi)a các ngu$n ngt c gii quyt b-ng mch u tiên ngt
bên trong 8051. 2 thanh ghi iu khin ngt: Thanh ghi cho phép ngt IE thanh
ghi u tiên ngt IP.
Thanh ghi cho phép ngt IE (Interrupt Enable) : a ch Byte là 0A8H
Bit Symbol
Bit Address
Description ( 1 : cho phép; 0 : không cho phép)
IE.7
EA AFH
C#m t#t c các ngt, nu EA = 0.
Nu EA = 1, m'i ngu$n ngt c cho phép
hoc c#m b-ng set hoc clear các bit tơng ng
IE.6
- AEH Không dùng