12f675 tmr1 kesmesi

Başlatan selvi1, 04 Temmuz 2016, 11:29:00

selvi1

   tmr1 kesmesi kullandım.program çalişmadiı12f675 işlemcisinin ayar sorunlari mı yoksa farklı bir sorun var mı?
#include <xc.h>
#include<math.h>
#include<string.h>

// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON       // GP3/MCLR pin function select (GP3/MCLR pin function is MCLR)
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)


#define  MCLR       GP3
#define  RELAY      GP0

#define MCLR_set        GP3
#define RELAY_set       GP0

#define INPUT         1
#define OUTPUT        0

unsigned char  sayac=0,sn=0,dk=0;

void delay_1ms(unsigned char time);

void port_init(void);

void timer_init(void);

void main()
{
   unsigned char  i, j,chksum;

   //OSCCON = 0X70;   // internal osc, 8M osc
   //OSCCAL=0XFF;
   //WDTCON = 0X00;  // watchdog

   port_init();     // initial io port

   delay_1ms(200);   // delay 200ms then enter normal mode

   RELAY=1;
   timer_init();
   
   INTCON = 0xc0;  // enable interrupt

   while(1)
   {
      if(dk==1)
      {
         RELAY=1;//delay_1ms(500);RELAY=0;
      }

   }
}


void delay_1ms(unsigned char time)
{
   unsigned char i,k;
   for(k = 0; k< time; k++)
   {
      for(i = 0; i<130; i++)
      {
         NOP();
      }
   }
}

void timer_init(void)
{
   T1CON = 0x31;

   TMR1IE = 1;
   TMR1L = 0x78;    //intial timer
   TMR1H = 0xec;
}

void interrupt ISR_timer(void)
{
    unsigned char i;

   if(TMR1IF)
      {
         TMR1L = 0x78;      // timer = 20ms
         TMR1H = 0xec;
     
         sayac++;
        
      if(sayac == 50)
      {
          sayac=0;sn++;
      }

      if(sn==60) 
      {   
         sn=0; dk++;
      }

       TMR1IF=0;
   }
}

void port_init(void)
{
    ANSEL = 0;
    //ANSELH = 0;   // AD is not used
    WPU = 0;   // no pull up resister
    IOC = 0;  
    //CMCON=7;
   MCLR_set=INPUT;
   RELAY_set=OUTPUT;
}

selvi1

   bazı değişiklikler yaptım program çalıştı .fakat normalinden 2 kat daha yavaş çalışıyor.osilatör ayarında olabilir.ama nasıl bir değer atacağımı bilmiyorum.
#include <xc.h>
#include<math.h>
#include<string.h>

// CONFIG
#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON       // GP3/MCLR pin function select (GP3/MCLR pin function is MCLR)
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)


#define  MCLR       GPIO3
#define  RELAY      GPIO0

#define MCLR_set        GPIO3
#define RELAY_set       GPIO0

#define INPUT         1
#define OUTPUT        0

unsigned char  sayac=0,sn=0,dk=0;

void delay_1ms(unsigned char time);

void port_init(void);

void timer_init(void);

void main()
{
   unsigned char  i, j,chksum;
   //OSCCAL=0X70;
   //OSCCAL = _READ_OSCCAL_DATA();
   //OSCCAL=0XFF;
   //WDTCON = 0X00;  // watchdog

   port_init();     // initial io port

   delay_1ms(200);   // delay 200ms then enter normal mode

   //RELAY=1;
   timer_init();

  // count_50hz = 0;
   Flag.reach_20ms = 0;
   
   INTCON = 0xc0;  // enable interrupt

   while(1)
   {
      if(dk==1)
      {
         RELAY=1;//delay_1ms(500);RELAY=0;
      }

   }
}


void delay_1ms(unsigned char time)
{
   unsigned char i,k;
   for(k = 0; k< time; k++)
   {
      for(i = 0; i<130; i++)
      {
         NOP();
      }
   }
}

void timer_init(void)
{
   T1CON = 0x31;

   TMR1IE = 1;
   TMR1L = 0x78;    //intial timer
   TMR1H = 0xec;
}

void interrupt ISR_timer(void)
{
    unsigned char i;

   if(TMR1IF)
      {
         TMR1L = 0x78;      // timer = 20ms
         TMR1H = 0xec;
         sayac++;
        
      if(sayac == 50)
      {
         sayac=0;sn++;
      }

      if(sn==10)
      {   
         sn=0; dk++;
      }
       TMR1IF=0;
   }
}

void port_init(void)
{
    TRISIO=0;
    ANSEL = 0;
    //ANSELH = 0;   // AD is not used
    WPU = 0;   // no pull up resister
    IOC = 0;  // no io interupt
    CMCON=7;
   MCLR_set=INPUT;
   RELAY_set=OUTPUT;
}