Day la chuong trinh ham ngat su dung cho dieu che xung PWM
unsigned char dem=0;// Khai bao bien dem de dem tu 1 den 10
unsigned char phantramxung;// Bien chua phan tram xung(0...10)
void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0;// Dung chay timer 0
TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day
dem++;
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P2_0=0;// Neu dem = phan tram xung
if(dem==10) dem=0;// Neu dem du 10 thi gan lai bang 0 de bat dau chu ki moi
TR0=1;// Cho chay timer
}
De có the thay doi do rong xung thì ta l
u do rong xung vào 1 biên, vì hàm
ngat không cho truyên biên vào ta khai báo biên dó là biên toàn cc de có
the gán giá tr mi hàm.
100 uS ngat 1 lân de xác dnh d chu kì 1000 uS ta cân dêm t" 1 dên 10 ta
khai báo biên dêm.
void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0;// Dung chay timer 0
TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day
TH0=0xAB;
TL0=0xAB;
….
TR0=1;// Cho chay timer
}
Câu trúc hàm ngat timer nào cung phi theo, do chê do 2 t% dong np li nên
kô cân gán giá tr cho TH0 và TL0.
Vê biên dem se dêm t" 1 dên 10 nêu bang 10 kêt thúc 1 chu kì 10*100
=1000 uS, ta gán li nó bang 0 de sang chu kì mi.
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1 ra
chan, xung 5V
else P2_0=0;// Neu dem = phan tram xung