Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Pic18f4550+прерывания

Непрочитано 18.10.2010, 23:05  
dsfj
Прописка
 
Регистрация: 19.01.2009
Сообщений: 134
Сказал спасибо: 22
Сказали Спасибо 26 раз(а) в 23 сообщении(ях)
dsfj на пути к лучшему
По умолчанию Pic18f4550+прерывания

Доброе время суток.

Подскажите пожалуйста как правильно работать с прерываниями.
К 18F4550 подключены:
- rb0 rb1 часы реального времени ds1307 по интерфейсу I2C;
- rc4,rc5 USB в режиме cdc(то есть com-порт);
- к rb4-rb7 кнопки, подтянуты через резисторы к 5в.

При нажатие на кнопки (rb4-rb7) необходимо чтобы
происходила обработка.
Но происходит за зацикливание в обоработчике #int_rb
Подскажите пожалуйста что делают неправильно.

Код приведен ниже

------------------------------------------------------------
#include ‹18F4550.h›

//configure a 12MHz crystal to operate at 48MHz
#fuses PLL3,CPUDIV1,USBDIV,HSPLL,NOFCMEN,NOIESO,BROWNOUT, BORV20,VREGEN,NOWDT,WDT32768,NOMCLR,NOLPT1OSC,NOPB ADEN,CCP2C1,STVREN,NOPROTECT,NOCPB,NOCPD,NOWRT,NOW RTC,WRTB,NOWRTD
#use delay(clock=12000000)

#include ‹usb_cdc.h›
#include "main.h"

//------------------------------------------------
#INT_RB
rb_handler()
{
disable_interrupts(int_rb);
//---
output_low(PIN_D0);
delay_ms(500);
output_high(PIN_D0);
delay_ms(3000);
output_low(PIN_D0);
delay_ms(500);
output_high(PIN_D0);
delay_ms(3000);
output_low(PIN_D0);
delay_ms(500);
//---
clear_interrupt(int_rb);
enable_interrupts(int_rb);
}
//------------------------------------------------

void main()
{
disable_interrupts(int_rb);

usb_cdc_init();
usb_init();

while(!usb_cdc_connected())
{
}
clear_interrupt(int_rb);



//если строчку ниже закоментировать
//USB и I2C работает,
//иначе программа зацикливается в обработчике #INT_RB
enable_interrupts(int_rb);



enable_interrupts(global);

do
{
usb_task();

output_low(PIN_D0);
delay_ms(500);
output_high(PIN_D0);
delay_ms(500);

if (usb_enumerated())
{
if(usb_cdc_kbhit())
{
data = usb_cdc_getc();
switch(data)
{
case '1' : {
//код получения времени и даты
//под I2C интерфейсу
//
}; break;
default : {
output_low(PIN_D0);
delay_ms(500);
output_high(PIN_D0);
delay_ms(50000);
output_low(PIN_D0);
delay_ms(500);
}; break;
}
delay_ms(50);
}
}
} while (TRUE);
}
Реклама:
dsfj вне форума  
Непрочитано 18.10.2010, 23:34  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Pic18f4550+прерывания

Если не хотите бороться с дребезгом, лучше опрашивать кнопки по переполнению таймера, поднимая флаг. В теле просто этот флаг опрашивать, когда будет свободное время.
Easyrider83 вне форума  
Непрочитано 19.10.2010, 00:15  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Pic18f4550+прерывания

никаких задержек в прерываниях !!!
Это просто нельзя делать.
И основной цикл Вашей программы должен укладываться в миллисекунду.
__________________
warez
urry вне форума  
Непрочитано 18.02.2011, 22:48  
ElectrOnyx
Прохожий
 
Регистрация: 25.03.2008
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ElectrOnyx на пути к лучшему
По умолчанию Re: Pic18f4550+прерывания

Здравствуйте! У меня тоже происходит зацикливание в прерывании int_rb. Я никак не пойму в чём дело. Помогите пожалуйста.
ElectrOnyx вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания PIC milssky Микроконтроллеры, АЦП, память и т.д 12 10.10.2010 13:31
Как изменить адрес подпрограммы обработки прерывания? Godzilla82 Микроконтроллеры, АЦП, память и т.д 21 23.08.2010 09:52
Прерывания в прерываниях ATmega8 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 35 07.07.2010 10:12
Вложенные прерывания HITECH PIC16 picavr Микроконтроллеры, АЦП, память и т.д 17 07.03.2010 17:39
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17


Часовой пояс GMT +4, время: 06:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.