ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Электроника и Фрикинг > Схемы и программы
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Вопрос по МК
  #1  
Старый 09.06.2008, 13:08
CHIP:))
Познающий
Регистрация: 17.01.2007
Сообщений: 94
Провел на форуме:
528220

Репутация: 65
Отправить сообщение для CHIP:)) с помощью ICQ
По умолчанию Вопрос по МК

Наверно странная у меня просьба и немного необычная. Но тем не менее хотелось бы спросить, может ли кто нибудь мне обьяснить в чем моя ошибка или даже не ошибка.
Вобщем мне нужно было написать учебную программу для микроконтроллера PIC18F452 (Отладочная плата PICDEM2PLUS, Mplab v7.20, C#) которая при нажатии на кнопку RB0 на плате, зажигала светодиод RB1, программа рабочая, светодиод исправно зажигается)
Но я не понимаю почему МК уходит на прерывание при условии

Код:
if (PORTBbits.RB0 == 0)
хотя по моему он должен уходить при

Код:
if (PORTBbits.RB0 == 1)
вот собственно и весь вопрос(просто прога учебная и будет использоваться для демонстрации работы МК будушим поколениям, поэтому надо все "разжевать")
Код:
/*
MCU: PIC18F452
Lang: C
Comp: MpLAB IDE v7.20
Программа обработки внешних прерываний (external interrupt) 
08/07/2008
*/

#include 

#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF

void main (void); // Обьявляем прототип функции main
void InterruptHandlerHigh (void); // Обьявляем прототип функции InterruptHandlerHigh

#pragma interrupt InterruptHandlerHigh // Точка перехода по прерыванию
#pragma code InterruptVectorHigh = 0x8 // Вектор прерывания 
void InterruptHandlerHigh(void) // Функция обработки прерывания
{
PORTBbits.RB1 = 1; // Зажечь диод
INTCONbits.INT0IF = 0; // очистка флага прерывания
}
#pragma code

void main()
{ 
TRISBbits.TRISB1 = 0; // 0 - Out направление сигнала
TRISBbits.TRISB0 = 1; // 1 - In направление сигнала
PORTBbits.RB1 = 0; // инициалиация: диод выключен
INTCON2bits.INTEDG0 = 1; // 1 - прерывание по переднему фронту сигнала
INTCONbits.GIEH = 1; // 1 - разрешить прерывания с высоким приоритетом
INTCONbits.INT0IE = 1; // 1 - разрешить внешние прерывания сo входа RB0 

if (PORTBbits.RB0 == 0) // Условие возникновения прерывания
{
_asm
goto InterruptHandlerHigh //Переходим в функцию обработки прерывания
_endasm
}
}
И как вобще на ваш взгляд эта прога, просто это моя первая в жизни программа на МК, так что сильно не пинайте)
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[прошу уделить внимание] вопрос про форточки procedure Болталка 14 26.04.2008 18:44
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15
FAQ. Перед тем как задать вопрос. Fata1ex ICQ 1 04.11.2007 20:35
Простой вопрос про сниффер errou PHP, PERL, MySQL, JavaScript 15 30.01.2006 20:54
ЕсТь ВоПрос Guma Чаты 4 26.10.2005 21:48



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ