Моя проблема в том, что у меня есть цифровой вход, инициализированный на 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