реклама на сайте
подробности

 
 
> прерывания PIC
HarieR
сообщение May 5 2010, 07:25
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 5-05-10
Пользователь №: 57 075



Помогите нубу с прерываниями, плиз. По нажатию кнопки RB0 (pic16f887) должно измениться состояние светодиодов на порту PORTD. Все вроде должно работать, ан-нет. Прошу помощи у PIC-гуру smile.gif . Ниже код:
Код
unsigned short counter;
void interrupt()
{
  if(INTCON.INTF)
  {
      counter++;
        if (counter > 8)
        {
          PORTD=~PORTD; //PORTD - меняем состояние на противопол  
          counter=0;
        }
    INTCON.INTF=0;
   }
}// interrupt

void Init()
{
   TRISB=0b00000001; //RB0 - вход
   TRISD=0b00000000; //PORTD - все выходы
   PORTD=0b00000000; //PORTD - не горят          
   OPTION_REG = 0x87;  
   INTCON.INTE=1; //включаем прерыв на порту RB0    
   INTCON.GIE=1;   //разрешаем все прерывания  
}// Init

void main()
{
   Init();
   while(1)
  {          
   }
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vlad27
сообщение May 5 2010, 09:06
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Не делайте таких обработчиков прерываний, прерывания должны обрабатывться по-возможности быстро.
Лучше устанавливайте флаг, а задержку реализуйте в main.
Код
static volatile unsigned char temp=0;
static unsigned char flag;
void interrupt()
{
     if(INTCON.INTF)
     {
         temp ^= 0xFF;
         PORTD = temp; // инверсия уровней на выводах PORTD
         flag = 1;
         INTCON.INTF=0;
     }
}// interrupt

void main() {
   Init();
   while(1) {
     if (flag == 1) {
       flag = 0;
       delay_ms(20);
     }
   }
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- HarieR   прерывания PIC   May 5 2010, 07:25
- - Vlad27   Перепишите строку PORTD=~PORTD; на PORTD=^0xFF; Не...   May 5 2010, 07:57
- - xemul   Устранение дребезга Или Вы предполагали, что count...   May 5 2010, 07:58
- - HarieR   переписал с учетом советов: Кодstatic volatile uns...   May 5 2010, 08:42
|- - xemul   Цитата(HarieR @ May 5 2010, 12:42) перепи...   May 5 2010, 08:57
- - xemul   Буфер для вывода имеет смысл вводить, если требует...   May 5 2010, 09:39
- - HarieR   сделал без флагов, обработки дребезга и т.д. Кодvo...   May 5 2010, 09:51
|- - xemul   Цитата(HarieR @ May 5 2010, 13:51) сделал...   May 5 2010, 10:00
- - HarieR   да, с прерыванием по TOIF все работает   May 5 2010, 10:03
|- - Vlad27   Цитата(HarieR @ May 5 2010, 13:03) да, с ...   May 5 2010, 10:26
|- - xemul   Цитата(HarieR @ May 5 2010, 14:03) да, с ...   May 5 2010, 10:28
- - HarieR   подключена нормально, на минус через резистор. Тес...   May 5 2010, 10:37
|- - xemul   Цитата(HarieR @ May 5 2010, 14:37) подклю...   May 5 2010, 10:44
- - HarieR   добавил две волшебные строчки, программа ожила: A...   May 7 2010, 10:11
- - @Ark   ЦитатаВопрос: каким образом могли повлиять на рабо...   May 7 2010, 10:45
- - HarieR   Спасибо большое всем за помощь! вешаю кнопку...   May 7 2010, 11:03
- - evc   Посмотрите регистр IOCB. Стр. 49/ds   May 7 2010, 13:35


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 11:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016