Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > прерывания PIC16F676


Автор: vol4ek 26.8.2018, 22:38
Доброго дня или ночи. Проблема такая: есть мк pic16f676 кусаю локти уже второй день, никак не ловятся внешние прерывания от RA1 и RA3
упростил код - проще некуда.
Код

#include <xc.h> 

#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator: High speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/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 = OFF      // RA3/MCLR pin function select (RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#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 _XTAL_FREQ 4000000 // 4MHz

void __interrupt(high_priority)isr(void)
{
if (RAIF) 
{
    PORTC = 0x1;
    RAIF=0;
}
    return;
}

void main(void) 
{
    CMCON = 0x07; // компараторы отключены
    ADCON0 = 0x00; // АЦП отключен
    OPTION_REG = 0x00 // подтягивающие резисторы PORTA включены
    ANSEL = 0x00; // все порты цифровые i/o
    INTCON=0x88; // GIE = 1, RAIE = 1 // разрешены глобальные прерываня и прерывания от PORTA
    IOCA = 0xA; // IOCA3 = 1, IOCA1 = 1 // разрешены прерываня при изменении состояния RA3, RA1
    TRISA = 0x1D; // RA5, RA4, RA3, RA1 - входы, остальные выходы
    TRISC = 0x00; // весь PORTC выходы
    PORTA = 0x00;
    PORTC = 0x00;

while(1)
{
    __delay_ms(10);
}
return;
}


RA3, RA1 подтянуты к + питания через резаки 10к. Игрался с регистром WPUA результата ноль. Если в INITCON бит INTE поставить в 1 и проверять флаг INTF, то прерывания от RA2 ловятся. Железо уже готово, переделывать не хочется. Сейчас состояние RA1, RA3 проверяю по прерыванию от таймера TMR0 но это как-то совсем калично выглядит. с 628A и 819 пиками никакких проблем, что с 676 не так я делаю?
PS компилятор xc8 v2.0

Автор: vol4ek 8.9.2018, 23:06
перешел на pic18 но с этим проблема так и не решилась. Было под рукой штук с десяток поэтому и решил использовать "что не жалко"

Автор: vol4ek 7.1.2019, 20:45
опять свела судьба меня с этим чипом. после получасового траханья было выяснено, что несмотря на установленный регистр ADCON0 который вроде бы полностью отключает модуль АЦП в контроллере все равно нужно инициализировать регистр ADCON1 и в нем выставлять где аналоговые\цифровые входы-выходы. вот такие дела.

Автор: Blogodov 19.1.2019, 15:58
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)