C Control PRO STARTER SET MEGA 128 198484 Benutzerhandbuch

Produktcode
198484
Seite von 200
168
C-Control Pro Mega Series
© 2005 Conrad Electronic
    int irqcnt;
    
    PM_Wert=
0
);   
// Pulsweite messen
    irqcnt=Irq_GetCount(INT_TIM1CAPT);
}
void main(void)
{
    byte n;
    
    Irq_SetVect(INT_TIM1CAPT,Timer1_ISR);  
// Interrupt Service Routine definieren
100
,PS0_64);               
// Pulsgenerator Timer 0 starten
 
// die Messung beginnt hier
 
// Output Timer0 OC0(PortB.3) verbinden mit ICP (input capture pin) (PortD.6)
    
    PM_Wert=
0
;
// Vorteiler für Messung festlegen
    while(PM_Wert==
0
);     
// Pulsbreite oder Periode messen
    Msg_WriteHex(PM_Wert);  
// Messwert ausgeben
}
 Aus Übersichtsgründen ist hier eine vereinfachte Version angegeben. Beim Mega128 wird
wegen einer Kollision auf Pin B.4 der Timer_0 zur Pulserzeugung benutzt. Das vollständige
Programm ist im Ordner PW_Messung zu finden.
5.4.18.6
Timerfunktionen
Es stehen zwei (Mega32) bzw. drei (Mega128) unabhängige Timer  zur Verfügung. Timer_0 mit 8 Bit,
Timer_1 und Timer_3 mit 16 Bit.  Die Timer verfügen über einen programmierbaren Vorteiler, siehe Tabelle.
Mit dem Timer läßt sich eine Zeit festlegen, nach der ein Interrupt ausgelöst wird. In der Interruptroutine
lassen sich dann bestimmte Verarbeitungsschritte ausführen.
Timer_T0Time (8 Bit)
Beispiel: Timer0: Ausgang mit einer Verzögerung von 6,94 ms (100x 69,44 µs, siehe 
)
einschalten
void Timer0_ISR(void)
{
    int  irqcnt;
    
    Port_WriteBit(
0
,
1
);
() ;                       
// Timer0 anhalten
    irqcnt=Irq_GetCount(INT_TIM0COMP);
}
void main(void)
{
    Port_DataDirBit(
0
,
0
);                  
// PortA.0 Ausgang
    Port_WriteBit(
0
,
0
);                    
// PortA.0 Ausgang=0
    Irq_SetVect(INT_TIM0COMP,Timer0_ISR);  
// Interrupt Service Routine definieren
(
100
,PS0_1024);            
// Zeit festlegen und Timer0 starten
    
//  weiterer Programmablauf...
}