Das Ein- / Ausschalten des peripheren und globalen Interrupts kann per DEFINEoder durch die BefehleCode:#DEFINE D_GlobIntEin bsf INTCON,GIE ; Globaler Interrupt Ein #DEFINE D_GlobIntAus bcf INTCON,GIE ; Globaler Interrupt Aus #DEFINE D_PeriIntEin bsf INTCON,PEIE ; Peripherer Interrupt Ein #DEFINE D_PeriIntAus bcf INTCON,PEIE ; Peripherer Interrupt Auserfolgen.Code:bsf INTCON,GIE ; Globaler Interrupt Ein bcf INTCON,GIE ; Globaler Interrupt Aus bsf INTCON,PEIE ; Peripherer Interrupt Ein bcf INTCON,PEIE ; Peripherer Interrupt Aus
Timer werden incrementiert / um 1 erhöht und setzen bei jedem Überlauf von 255 / 0xFF nach 0 das Interrupt-Flag T?IF. Diese Flags müssen per Software zurück gesetzt werden.
Wieviel Zeit zwischen jedem Timer-Increment vergeht, wird durch die Quarz-Frequenz und die Initialisierung der Prescaler bestimmt,
wie lange es bis zum Auslösen eines Interrupts dauert = 256 - Timer-Wert mal Increment-Zeit.
Zum Auslösen eines Interrupts / Aufruf der ISR (Interrupt-Service-Routine) muß das entsprechende IE-Flag und die globale Int-Freigabe GIE gesetzt sein. Für einige Timer muß zusätzlich die periphere Int-Freigabe PEIE gesetzt sein (im Datenblatt nachlesen).
In der ISR muß abgefragt werden, wer den Int ausgelöst hat.






Zitieren
. Ich habe das Programm schon mal soweit aufgebaut, aber es scheint irgendwie nen Fehler zu haben, da es nicht aus der Schleife rausspringt
MFG Nils (EGSLER)

Lesezeichen