User manual
168
void main(void)
{
byte n;
Irq_SetVect(INT_TIM1CAPT,Timwer1_ISR); / / Interrupt Service routine definiëren
Timer_T0PWM(100,ps_64); / / pulsgenerator starten
/ / De meting begint hier
/ / Output timer0 OC0(Port B.3) verbinden met ICP (Input Capture Pin) (Port D.6)
PM_waarde=0;
Timer_T1PM(ps_64); / / Voordeler voor meting vastleggen
while(PM_waarde==0); / / Pulsbreedte of periode meten
Mag_WriteHex(PM_waarde); / / Meetwaarde afgeven
}
Vanwege de overzichtelijkheid is hier een eenvoudige versie aangegeven. Bij de Mega128
wordt vanwege een conflict op pin B4 de Timer_0 voor de pulsproductie gebruikt. Het
volledige programma vindt u in de map PW_Messung.
5.4.18.6 Timerfuncties
Er staan twee onafhankelijke timers tot uw beschikking: Timer_0 met 8 bit en Timer_1 met
16 Bit. De timers beschikken over een programmeerbare voordeler, zie tabel. Met de timer
kunt u een tijd vastleggen, nadat een interrupt getriggerd is. In de interrupt -routine kunnen
dan verschillende bewerkingsstappen uitgevoerd worden.
Timer T0Time (8 Bit)
Voorbeeld: Timer0: uitgang met een vertraging van 6,94 ms (100x69,44 µ
µµ
µs, zie tabel)
inschakelen
Void Timer0_ISR(void)
{
int irqcnt;
Port _WriteBit(0,1);
Timer T0Stop(); // Timer0 stoppen
irqcnt=Irq_GetCount(INT_TIM0COMP);
}
void main(void)
{
Port _DataDirBit(0,0); // PortA.0 uitgang
Port _WriteBit(0,0); //
PortA.0 uitgang = 0
Irq_SetVect(INT_TIM0MP,Timer0_ISR); // Interrupt service routine
definiëren
TimerT0Time(100,ps_1024);
// Tijd vastleggen en timer0
starten
// verdere verloop programma …
}