06.01.2018, 00:40
|
|
Прохожий
Регистрация: 06.01.2018
Сообщений: 6
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
самопроизвольные прерывания PIC16F877A
Доброго времени.
Помогите, плиз, разобраться. с прерываниями контроллера PIC16F877A.
void interrupt ISR (void)
// Обработка прерываний TMR1
{
if(PIR1bits.TMR1IF)
{
PIR1bits.TMR1IF = 0;
................
}
// Обработка прерываний TMR0
if (INTCONbits.TMR0IF) {
INTCONbits.TMR0IF = 0;
..............
}
// Обработка прерываний на RB4-RB7
if(INTCONbits.RBIF && INTCONbits.RBIE) {
INTCONbits.RBIF = 0;
...............
}
}
.
.
.
TRISB = 0B11110000;
PORTB = 0XF0; // ‹- ??!??! 0_o
OPTION_REG = 0b10000111;
PIR1bits.TMR1IF = 0;
PIE1bits.TMR1IE = 1;
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 1;
INTCONbits.GIE = 1;
INTCONbits.RBIE =1;
INTCONbits.RBIF =0;
PEIE =0;
проблема заключается в том, что на железе происходит самопроизвольное срабатывание условия if(INTCONbits.RBIF && INTCONbits.RBIE). даже при пустых (без нагрузки) ногах RB0-RB7.
TMR1 и TMR0 без ошибок
Отладка в MPLAB показывает RBIF = 0
Последний раз редактировалось Владимир П.; 06.01.2018 в 00:43.
|
|
|
|
06.01.2018, 01:43
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 590
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Сообщение от Владимир П.
|
проблема заключается в том, что на железе происходит самопроизвольное срабатывание условия
|
а вы условие сброса флага не выполняете.... читайте ДШ там усе написано
|
|
|
|
06.01.2018, 05:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Подтяжка есть по питанию?
__________________
Глаза боятся,а руки делают.
|
|
|
|
06.01.2018, 10:23
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Читаем даташит
Цитата:
|
Reading PORTB will end the mismatch condition and allow the bit to be cleared
Чтение PORTB завершит условие несоответствия и позволит очистить бит
|
Порт читать надо.
|
|
|
|
06.01.2018, 12:19
|
|
Прохожий
Регистрация: 06.01.2018
Сообщений: 6
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Сообщение от DmitriyVDN
|
а вы условие сброса флага не выполняете.... читайте ДШ там усе написано
|
Можете помочь показать, пожалуйста, мне конкретно где это , я не нашел.
|
|
|
|
06.01.2018, 12:20
|
|
Прохожий
Регистрация: 06.01.2018
Сообщений: 6
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Сообщение от sat_art
|
Читаем даташит
Порт читать надо.
|
Я не нашел. Можете пример привести, пожалуйста
|
|
|
|
06.01.2018, 12:24
|
|
Прохожий
Регистрация: 06.01.2018
Сообщений: 6
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Сообщение от CERGEI1982
|
Подтяжка есть по питанию?
|
Так должно быть?
|
|
|
|
06.01.2018, 12:35
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 590
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Сообщение от Владимир П.
|
Я не нашел. Можете пример привести, пожалуйста
|
что не нашел? тебе цитату из ДШ привели еще и перевод добавили. что не понятно в фразе "чтение порта позволит очистить флаг прерывания" ?
|
|
|
|
06.01.2018, 13:23
|
|
Прохожий
Регистрация: 06.01.2018
Сообщений: 6
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
Сообщение от DmitriyVDN
|
что не нашел? тебе цитату из ДШ привели еще и перевод добавили. что не понятно в фразе "чтение порта позволит очистить флаг прерывания" ?
|
Что значит чтение порта? If RB4 == 1 ... ?
При этом начнет работать условие RBIF ?
|
|
|
|
06.01.2018, 13:36
|
|
Прописка
Регистрация: 04.01.2012
Сообщений: 110
Сказал спасибо: 37
Сказали Спасибо 53 раз(а) в 34 сообщении(ях)
|
Re: самопроизвольные прерывания PIC16F877A
В железе, используя внутрисхемную отладку, можно столкнуться с такой проблемой, т.к. RB7 RB6 используются для ICD... Флаг устанавливается по изменению уровня (т.е. с 0 в 1 и наоборот). Сброс флага выполнять программно. Отладку программы с таким прерыванием нужно вести без внутрисхемного отладчика, релизом...
|
|
|
Сказали "Спасибо" iso9001
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:28.
|
|