Хотя мой INT0 инициализирован как цифровой вход, он все равно выдает 2,8 В, что делает кнопку действительно не вносящей изменения - PullRequest
0 голосов
/ 01 апреля 2019

Моя проблема в том, что у меня есть цифровой вход, инициализированный на PORTB.0.На этом контакте у меня есть кнопка и резистор 100k Pull-down.Когда я запускаю свой Pic буквально ничем (void main () {while (1) {}}), уровень напряжения на этом выводе работает так, как я хочу (от 0 до 3,3 В).Но после того, как я протестирую свою программу и инициализируюсь, как показано в приведенном ниже коде, ее диапазон изменяется от 2,8 до 3,3 В.

Я использую PIC18LF2520 для своей выпускной работы.Я программирую в MPlab V5.10 с компилятором XC8 1.45.Я просто хочу, чтобы для моей кнопки было прерывание, которое находится на выводе RB0 uP.Сделанные мной инициализации будут показаны в коде ниже.Я уже много работал с этим конкретным PIC, но у меня никогда не было такой ошибки раньше.

void main() {

    init();

    while(1) {    
        /*
        if(isEXT0Set()) {   //If the Button gets pushed
            EXT0Int();      //Interrupt Function call
        }
        */
    }    
}

void init() {

   //PORT Definitions

    TRISA = 0x00;
    TRISB = 0xC3;
    TRISC = 0x00;

    //Oscillator Settings

    OSCCON = 0x7F;  //8Mhz; Internal Oscillator; INTOSC stable

    //Interrupt Settings

    INTCON = 0xF0;  //Global Enable; Peripherals Enable; TMR0 Enable; INT0 Enable
    INTCON2 = 0x64; //INT0 rising Edge; INT1 rising Edge; TMR0 High Priority
    INTCON3 = 0x08; //INT1 Enable
    ADCON1 = 0x0F; //set all Inputs to Digital ones.

    //Timer Settings

    T0CON = 0x86;   //16-Bit; LtoH; 1/128
    T1CON = 0x31;   //2 8-Bit; FOSC/4; 1/8
    T2CON = 0x07;   //Postscaler 1/1; Prescaler 1/16;

    TMR0H = 0xE1;   //Setting TMR0 to 1 Second
    TMR0L = 0x7B;  

    TMR1IE = 1;
    TMR2IE = 0;
}

Я ожидаю, что когда я нажимаю кнопку, будет установлен INt0IF, но этого не происходит.Я тестирую его на оборудовании, результат описан выше.Я надеюсь, что кто-то видит, что я пропустил.Заранее спасибо.: D

1 Ответ

1 голос
/ 01 апреля 2019

Контроллер PIC имеет внутренние подтягивающие резисторы на PORTB, и обычно они намного меньше, чем 100 кОм.Вы можете включить их все, просто изменив инициализацию INTCON2 на:

INTCON2 = 0xE4;
...