GATE
M1
GATE
M1
C/T
M0
C/T
M0
M1
M0
Ch
0 0 1 1
0 1 0 1
0 1 2 3
D7
D6
D5
D4
D3
D2
D1
D0
TF1
TF0
IE1
IE0
TR1
C ngt ca Timer1 C ngt ca Timer0
TR0
C ngt ngoi 1
IT1
C ngt ngoi 0
IT0
Ch hot ng ca Timer
- Ch 0: Ch nh thi 13 bit - Ch 1: Ch nh thi 16 bit
- THx, TLx cha gi tr m hin ti ca b nh thi
- Ch 2: Ch t np li 8-bit
- Byte thp gi gi tr m hin ti - Byte cao gi gi tr np li
- Ch 3: Ch nh thi chia x
- Bc 3: Khi ng b nh thi T0
TF0 = 0; // (CLR TF0) Xa c trn TR0 = 1; // (SETB TR0) Khi ng b nh thi
- Bc 4: Ch b nh thi trn
while(!TF0) continue; // JNB TF0, $
- Bc 5: Nu tip tc mun s dng b nh thi: Dng b nh thi (TR0 = 0), np li gi tr cho TH0, TL0, khi ng li (TR0 = 1). TMOD GATE C/T M1 M0 GATE C/T M1 M0
ASM
MOV TMOD, #00000001B MOV TH0, #0FEh MOV TL0, #0Ch CLR TF0; Xa c trn ;Khi ng b nh thi SETB TR1 ; Ch c trn bt 1 JNB TF0, $ ; Dng b nh thi CLR TR0 ; Np li gi tr MOV TH0, #0FEh; MOV TL0, #0Ch; ... // Khi ng b nh thi SETB TR0
- Bc 3: Khi ng b nh thi T0
+ TF0 = 0; // (CLR TF0) Xa c trn + TR0 = 1; // (SETB TR0) Khi ng b nh thi
- Bc 4: Ch b nh thi trn
- while(!TF0) continue; // JNB TF0, $
ASM
MOV TMOD, #00000010B MOV TH0, #55 MOV TL0, #55 CLR TF0; Xa c trn ;Khi ng b nh thi SETB TR1 ; Ch c trn bt 1 JNB TF0, $ ; Dng b nh thi CLR TR0 ... // Khi ng b nh thi SETB TR0
To tr s dng Timer
MAIN: MOV MOV MOV AGAIN: CPL CALL JMP TMOD, #00000010B TH0, #55 TL0, #55 P1.0 DELAY AGAIN void main() { TMOD = 0x02; while(1) { P1_0 = !P1_0; delay(55); } void delay(unsigned char us){ TH0 = us; TL0 = us; TF0 = 0 ; Xa c trn ;Khi ng b nh thi TR1 = 1; ; Ch c trn bt 1 while(!TF0) continue; ; Dng b nh thi TR0 = 0; }
DELAY: CLR TF0; Xa c trn ;Khi ng b nh thi SETB TR1 ; Ch c trn bt 1 JNB TF0, $ ; Dng b nh thi CLR TR0 RET
NGT
Gii thiu ngt Cc loi ngt v bng vector ngt:
Reset h thng Ngt ngoi 0 Timer 0 Ngt ngoi 1 Timer 1 Cng ni tip Timer 2 RST a ch vector ngt IE0 TF0 IE1 TF1 RI hoc TI TF2 hoc EXF2 0000H 0003H 000BH 0013H 001BH 0023H 002BH
X l ca CPU i vi 1 ngt
Khi mt ngt xut hin v c CPU chp nhn, chng trnh chnh b ngt. Cc thao tc sau y xy ra: - Hon tt vic thc thi lnh hin hnh - Ct b m chng trnh (PC) vo stack - Trng thi ca ngt hin hnh c lu gi li - B m chng trnh PC s np a ch ca chng trnh con phc v ngt v i thc hin. - Thc hin xong s quay v chng trnh chnh ti v tr n b ngt v thc hin tip chng trnh chnh.
EA
ET2
ET1
ET0
Cho php ngt ton cc Cho php ngt do Timer 2 Khng s dng
ES
Cho php ngt do Timer 1
EX1
Cho php ngt do Timer 0 Cho php ngt ngoi 1
EX0
PT2
PT1
PT0
PS
u tin ngt cho Timer 2 u tin ngt cho Timer 1
PX1
u tin ngt cho Timer 0 u tin ngt ngoi 1
PX0
LP TRNH NGT
1. Lp trnh vi ngt timer
Timer 0 Timer 1
3. u tin ngt
Th t u tin thc hin cc ngt Lp trnh theo i u tin cc ngt
EA
ET2
ES
ET1
EX1
ET0
EX0
Bc 1: Chn ch hot ng ca timer nh phn lp trnh cho timer Bc 2: Cho php ngt:
Cho php ngt do timer
ET0 = 1; // Nu s dng ngt timer 0 ET1 = 1; // Nu s dng ngt timer 1
V d 1: Vit chng trnh nhy LED ni chn P1.0 vi chu k 500us s dng ngt timer 0. S dng thch anh 12Mhz.
ASM
ORG 0000H LJMP MAIN ORG 001BH LJMP T0_ISR ORG 0030H MAIN: MOV TMOD, #00000010B; Ch 2 MOV TH0, #55 MOV TL0, #55 CLR TF0; Xa c trn SETB ET0 SETB EA SETB TR0; Khi ng Timer 0 JMP $ T0_ISR: CPL P1.0 RETI
C
void main() { TMOD = 0x02; // Timer 0 ch 2 TH0 = 5; TL0 = 5; // Np gi tr cho TH0, TF0 = 0; // Xa c trn ET0 = 1; EA =1; TR0 = 1; // Khi ng Timer 0 while(1) continue; } void T0_ISR() interrupt 1 { P1_0 = !P1_0; }
V d 2: Vit chng trnh to xung vung chn P1.0 vi tn s 500Hz s dng ngt timer 1. Thch anh 12Mhz. ASM
ORG 0000H LJMP MAIN ORG 000BH LJMP T1_ISR ORG 0030H MAIN: MOV TMOD, #00010000B;Timer 1 ch 1 MOV TH1, #HIGH(-1000) MOV TL1, #LOW(-1000) CLR TF1; Xa c trn SETB ET1 SETB EA SETB TR1; Khi ng Timer 0 JMP $ T1_ISR: CLR TR1; Dng b nh thi MOV TH1, #HIGH(-1000); Np li MOV TL1, #LOW(-1000) CPL P1.0 SETB TR1; Khi ng timer 0 RETI
C
void main() { TMOD = 0x10; // Timer 1 ch 1 TH1 = 0xFC; TL1 = 0x17; // Np gi tr cho TF1 = 0; // Xa c trn ET1 = 1; EA = 1; TR1 = 1; // Khi ng Timer 1 while(1) continue; } void T1_ISR() interrupt 3 { TR1 = 0; // Dng b nh thi TH1 = 0xFC; TL1 = 0x17; // Np li P1_0 = !P1_0; TR1 = 1; // Khi ng b nh thi }
+ Lp trnh cho ngt ngoi 0 Cho php ngt ngoi 0 Cho php ngt ton cc EX0 = 1; EA = 1;
Vit chng trnh phc v ngt ngoi 0 + Lp trnh cho ngt ngoi 1 Cho php ngt ngoi 0 EX1 = 1; Cho php ngt ton cc EA = 1; Vit chng trnh phc v ngt ngoi 1 + Ngt ngoi c 2 kiu: Ngt bng mc 0 Ngt bng sn xung
Kch hot ngt ngoi bng sn xung hoc bng mc 0 chn ngt ngoi
TCON Timer/Counter Control Register
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Ngt ngoi 0: IT0 = 0: Ngt ngoi 0 c kch hot khi pht hin mc 0 chn ngt ngoi 0 (P3.2) IT0 = 1: Ngt ngoi 0 c kch hot khi pht hin sn xung chn ngt ngoi 0 (P3.2) Ngt ngoi 1: IT1 = 0: Ngt ngoi 1 c kch hot khi pht hin mc 0 chn ngt ngoi 0 (P3.3) IT1 = 1: Ngt ngoi 1 c kch hot khi pht hin sn xung chn ngt ngoi 0 (P3.3)
V d 1: Bt LED chn 1.0 khi xy ra mc 0 chn ngt ngoi 0 (P3.2). S dng ngt ngoi 0.
ASM
ORG 0000H LJMP MAIN ORG 0003H LJMP EX0_ISR ORG 0030H MAIN: SETB EX0; Cho php ngt ngoi 0 SETB EA; Cho php ngt ton cc JMP $ EX0_ISR: CLR P1.0 RETI
C
void main() { EX0 = 1; // Cho php ngt ngoi 0 EA = 1; // Cho php ngt ton cc while(1) continue; } void EX0_ISR() interrupt 0 { P1_0 = 0; }
V d 2: Bt LED chn 1.0 khi xy ra sn xung chn ngt ngoi 1 (P3.3). S dng ngt ngoi 1.
ASM
ORG 0000H LJMP MAIN ORG 0013H LJMP EX1_ISR ORG 0030H MAIN: SETB EX1; Cho php ngt ngoi 0 SETB EA; Cho php ngt ton cc JMP $ EX1_ISR: CLR P1.0 RETI
C
void main() { EX1 = 1; // Cho php ngt ngoi 0 EA = 1; // Cho php ngt ton cc while(1) continue; } void EX1_ISR() interrupt 2 { P1_0 = 0; }
PT2
PT1
PT0
PS
u tin ngt cho Timer 2 u tin ngt cho Timer 1
PX1
u tin ngt cho Timer 0 u tin ngt ngoi 1
PX0
PT2
PS
Mun cho ngt no u tin th set bit u tin ca ngt ln. Khi 2 ngt xy ra cng lc th chui ngt bnh thng s b thay i Chui ngt l th t thc hin cc ngt bnh thng khi khng c ngt no c u tin, th t nh sau: ngt ngoi 0, ngt do timer 0, ngt ngoi 1, ngt do timer 1, ngt do cng ni tip, ngt do b timer 2 (i vi AT89S52 tr ln)
Much more than documents.
Discover everything Scribd has to offer, including books and audiobooks from major publishers.
Cancel anytime.