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