Forum: Mikrocontroller und Digitale Elektronik PIC 12F683 TMR0 Overflow erkennen


von Wolf R. (Firma: Monster AG) (ik-student)


Lesenswert?

Hallo,

ich arbeite mich gerade in PIC's mit Assembler ein. Ich möchte einen 
Interrupt durch einen Timer0 Overflow erkennen, sorry für die 
Anfängerfrage:

Aber wie kann ich sehen wann ein Interrupt mit einem Overflow 
stattgefunden hat, gibt es da ein bestimmtes Register wo ein Flag 
gesetzt wird ? Ich sehe nur ein INTCON-Register mit dem TOIF-Flag, ist 
es zufällig dieses Flag oder gibt es ein anderes im Status-Register ?

Ich denke mal zum initialisieren wird dies hier ja ausreichen:
1
  banksel  OPTION_REG      
2
  bsf  OPTION_REG,INTEDG  
3
  bcf  INTCON,INTF
4
  bsf  INTCON,INTE
5
  bsf  INTCON,TOIE  
6
  ;bsf  INTCON,TOIF       ;muss das hier gesetzt werden ? 
7
  bcf     STATUS, RP0

Danke im Voraus
Gruß

von Franko P. (sgssn)


Lesenswert?

Hallo

genau das:

INTCON,TOIF zeigt an, wenn ein Timer-Ereignis stattgefunden hat, also 
nicht setzen, sondern zurücksetzen und warten bis es gesetzt wurde. Im 
Interruptbetrieb wird beim Setzen dieses Flags der Interrupt ausgelöst.

Gerhard

von fragliche begründung (Gast)


Lesenswert?

TMR1IF oder TMR0IF sind die bits, die gesetzt werden.


bsp:

interrupt serverX( void)
{
    int_save_registers
    if (TMR1IF)         // T1 übergelaufen?
    {
        TMR1IF = 0;
        T1OSCEN = 0;
        TMR1CS = 0;
        TMR1H = 238;    //Counterregister befüllen(16 bit timer aus 2 
Byte
        TMR1L = 120;
        TMR1ON = 1;
        GIE = 1;        // Interrupts erlauben
        PEIE = 1;
        TMR1IE = 1;     // Interrupt von T1 erlauben
        TMR1IF = 0;     // Overflowbit rücksetzen!!!!!!!
        if (!sleep_mode)
        {
            send_protocol();
        }

     }
    int_restore_registers
}                     // Interrupt-Routine zu ende

von Latissimo (Gast)


Lesenswert?

@ fragliche begründung:
Was denn nun? C oder ASM? T0 oder T1 ?!?


@ Wolf:
Ja, T0IF ist das Overflow-Bit! Kann ich also auch nur bestätigen!

lass die zeile weg, da das ja ein Overflow-bit ist, welches auch nur bei 
einem Overflow gesetzt werden soll, sonst wäre es ja sinnfrei!

denk an das Rücksetzen im Interrupt!

von Wolf R. (Firma: Monster AG) (ik-student)


Lesenswert?

Super!

Danke für eure schnelle Antwort, es klappt jetzt :-)

Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.