void
main(void)
{
byte n;
Irq_SetVect(INT_TIM1CAPT,Timwer1_ISR);
Timer_T0PWM(100,ps_64);
/ / 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);
while(PM_waarde==0);
Mag_WriteHex(PM_waarde);
}
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();
irqcnt=Irq_GetCount(INT_TIM0COMP);
}
void
main(void)
{
Port
_DataDirBit(0,0);
Port
_WriteBit(0,0);
Irq_SetVect(INT_TIM0MP,Timer0_ISR);
TimerT0Time(100,ps_1024);
//
verdere verloop programma ...
}
168
/ / Interrupt Service routine definiëren
/ / pulsgenerator starten
/ / Voordeler voor meting vastleggen
/ / Pulsbreedte of periode meten
/ / Meetwaarde afgeven
//
Timer0 stoppen
// PortA.0
uitgang
// PortA.0
uitgang = 0
// Interrupt service routine
definiëren
// Tijd vastleggen en timer0
starten