Timer1 ve Timer0 birlikte kullanımı

Başlatan OxfordBlue, 04 Ağustos 2015, 10:51:58

OxfordBlue

Merhabalar
İşlemci : 18f4620

#include <pic18f4620.h>
#include <pic18.h>
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include "18F_Config_40_v10.h"
void main(void)
{
    DelayMs(100);
    TRISA = 0b00011111;
    TRISB = 0b00000000;
    TRISC = 0b10110000;
    TRISD = 0b00000000;
    TRISE = 0b00000000;

    LATA=0b00000000;
    LATB=0b00010001;
    LATC=0b00000000;
    LATD=0b00000000;
    LATE=0b00000000;

    ADCON1= 0x0C;   //AN0,AN1 ANALOG
    CMCON = 0x07;   //deactivate comparator module

    SPBRG=64;
    TXSTA=0b00100010;
    RCSTA=0b10010000;
    RCIF=0;
    RCIE=0;

    PIE1=0b00000001;    //Only Enables timer1 overflow interrupt
    PIR1bits.TMR1IF=0;  // TMR1 register did not overflow
    INTCON=0b11000000;  // Enables all unmasked interrupts
    T1CON=0b00000000;
    TMR1ON=1;  //TIMER1 ACTIVATE
    TMR1 = 63536;
    WDTCON;

    while(1)
    {
        CLRWDT();
        __delay_us(1);
        __delay_us(1);
        __delay_us(1);
        __delay_us(1);
    }

}
void interrupt isr(void)
{
  if (PIR1bits.TMR1IF && PIE1bits.TMR1IE)
  {
    PIR1bits.TMR1IF = 0;
    TMR1 = 63538;
    FrequenceRead();
   //Bolca fonksiyon işlemler v.s..
  }
}


Kodların temel kısımlarını yayınladım. timer1 sürekli program loop süresi olarak kullanıyorum.
timer1 öncelikli kesme olma üzere, timer0'ı da timer1 süresinden bağımsız sayıcı olarak kullanmak istiyorum.
taslak olarak gösterebilirmisiniz

kosantospa

bende xc8'de yeniyim. interrupt fonksiyonuna şu kısmı da eklersin sorun kalmaz gibi geliyor.
if(INTCONbits.TMR0IF)
    {
        INTCONbits.TMR0IF=0;
        TMR0=5;  // bu deger 2ms saniye içindi yanlıs hatırlamıyorsam onu değiştirirsin isteğine göre
        Counter++;

       

     }

OxfordBlue

Peki benim yazılımıma dahil edebilirmisiniz yüksek öncelik ve düşük öncelik li die ayrılmalı diye düşünüyorum