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;
}