Здравствуйте! Нужна помощь, уже второй вечер бьюсь.
компиляция проходит успешно, но когда в протеусе проверяю, то ошибка переполнение стека ([PIC12 CORE] PC=0x03F1. Stack overflow pushing return address of interrupt. )
#include <xc.h>
#define _XTAL_FREQ 4000000
/// CONFIG
#pragma config FOSC = EXTRCCLK // Oscillator Selection bits (RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#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)
unsigned int TIM0_count=0;
unsigned int TIM1_count=0;
//функция-обработчик прерывания
void Interrupt()
{
TMR1=0;
T0IF=0;
GPIO5=1;
TMR1IF=0;
}
void main(void)
{
//конфигурация поротов PIC12F675
//выводы GP2, GP4 , GP5 настроены на выход
TRISIO = 0b00000011;
//все I/O выводы МК конфигурируютя как цифровые
ANSEL = 0;
//выключение компараторов
CMCON = 7;
WPU = 0x00;
//Запретить использование подтягивающих резисторов,предделитель на wdt(1:1)
OPTION_REG = 0b10001000 ;
//инициализация портов МК
GPIO = 0;
//установка прерывания от таймера TMR0
//INTCON=0b10000000;
//настройка TMR1
TMR1CS = 0; //тактирование от системной частоты
//PEIE=1;//разрешаем прерывания от периферии
TMR1IE = 1; //разрешаем прерывание от TMR1
TMR1IF = 0; //сбрасываем флаг прерывания от TMR1
TMR1ON = 1;//включаем таймер
INTCON=0b11000000; //включаем обработку прерываний
//инициализация таймера TMR0
//TMR0=0;
//инициализация таймера TMR1
TMR1=0;
//ИНИЦИАЛИЗАЦИЯ ФЛАГОВ ПРЕРЫВАНИЙ
T0IF=0;
while(1)
{
if(GPIO1==1)
{
//GPIO5=1;
GPIO2 = 0;
}
else
{
//GPIO5 = 0;
GPIO2 = 1;
}
//asm("CLRWDT");
}
return;
}
схему прикладываю.