Перейти к содержанию

Soy

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Коряжма

Электроника

  • Стаж в электронике
    Более 20 лет

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения Soy

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме

Последние значки

0

Репутация

  1. разобрался благодаря дизасме. глюк оказался в Xc8 компиляторе MPLAB X IDE 5.45. процедура прерывания должна выглядеть void __interrupt() isr(void) { // тело процедуры } иначе компилятор не видит прерывания. Тема закрыта, всем спасибо!
  2. Soy

    pic12f675 переполнение стека

    Здравствуйте! Нужна помощь, уже второй вечер бьюсь. компиляция проходит успешно, но когда в протеусе проверяю, то ошибка переполнение стека ([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; } схему прикладываю.
×
×
  • Создать...