Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 09.07.2010, 10:41   #1
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Прерывание по PORTB7-4 pic18f2455

Добрый день.
Будет необходимо устройство на USB, поэтому был выбрано pic18f2455.
Сейчас пытаюсь его освоить, но как-то туго это проходит
Вот появился вопрос по прерыванию от порта В:
хочу запустить выполнение пп по нажатию кнопки, но для начала чтобы по нажатию загорался диод. у меня он естественно загараться не хочет
Пользуюсь компилятором MPLAB с18. b пытаюсь преобразовать пример из него.
Код:
#include <p18F2455.h>
void main (void);
void InterruptHandlerHigh (void);
#pragma config WDT = OFF // выкл. сторожевой таймер 
#pragma config PLLDIV = 5 // (20 MHz crystal on board)
#pragma config CPUDIV = OSC1_PLL2 
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC =INTOSC_XT //HS oscillator, PLL enabled, HS used by USB
union
{
  struct
  {
    unsigned Timeout:1;         //flag to indicate a TMR0 timeout
    unsigned None:7;
  } Bit;
  unsigned char Byte;
} Flags;

//----------------------------------------------------------------------------
// Main 
void main ()
{
    Flags.Byte = 0;
    INTCON = 0x88;               //global and enable RB interrupt
    INTCON2 = 0x81;               //RB high priority and disable pull-up
    RCONbits.IPEN = 1;            //enable priority levels
    INTCONbits.GIEH = 1;          //enable interrupts
    TRISB = 0b11110000;
    LATB  = 0b00000000;   
     PORTB = 0b00000000;  
    TRISC = 0;  
    while (1)
    {
      if (Flags.Bit.Timeout == 1)           //timeout?
        { 
        LATB  = 0b00000001;
        LATC  = 0b00000100;
        Flags.Bit.Timeout = 0;           //clear timeout indicor
        }
    }
    Reset();
}

//----------------------------------------------------------------------------
// High priority interrupt vector

#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh //jump to interrupt routine
  _endasm
}

//----------------------------------------------------------------------------
// High priority interrupt routine

#pragma code
#pragma interrupt InterruptHandlerHigh

void
InterruptHandlerHigh ()
{
int i;
  if (INTCONbits.RBIF==1)
    {                                   //check for TMR0 overflow
      
      Flags.Bit.Timeout = 1;            //indicate timeout
      INTCONbits.RBIF = 0;            //clear interrupt flag*/
    }
}
Схемка в приложении.
Подскажите пожалуйста, где я ошибаюсь. Ибо при подаче питания периодически загорается совершенно не то что нужно. (и вообще почему-то пик реагирует на прикосновение к корпусу пальцем-не сталкивался раньше с таким)
Миниатюры
scheme.JPG  
Solax вне форума   Ответить с цитированием
Старый 09.07.2010, 11:11   #2
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Ну, так неправильно в схеме.

У вас вывод, к которому кнопка подключена, в воздухе болтается пока кнопка не нажата.
Bill вне форума   Ответить с цитированием
Старый 09.07.2010, 11:21   #3
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 49
Сообщений: 1,842
Вес репутации: 2279/87
petrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond repute
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: Ну, так неправильно в схеме.

Цитата:
Сообщение от Bill Посмотреть сообщение
У вас вывод, к которому кнопка подключена, в воздухе болтается пока кнопка не нажата.
1. Не только, еще RB6, RB5 и RB4 болтаются при отключенных pull-up резисторах.
2. Опять же PORTB в прерывании не читается, т.е неоднозначность не убирается.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 09.07.2010, 11:25   #4
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Я про остальное вообще

Цитата:
Сообщение от petrd Посмотреть сообщение
1. Не только, еще RB6, RB5 и RB4 болтаются при отключенных pull-up резисторах.
2. Опять же PORTB в прерывании не читается, т.е неоднозначность не убирается.
молчу.
Bill вне форума   Ответить с цитированием
Старый 09.07.2010, 11:38   #5
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Ну, так неправильно в схеме.

Цитата:
Сообщение от petrd Посмотреть сообщение
1. Не только, еще RB6, RB5 и RB4 болтаются при отключенных pull-up резисторах.
2. Опять же PORTB в прерывании не читается, т.е неоднозначность не убирается.
Так, пул-апы я включу (INTCON2 = 0x1. тогда на RB7 нужно кнопку на землю сажать?
Т.е. в обработке прерывания нужно вписать перед сбросом RBIF
PORTBbits.RB7=0; ? если pull-up подклчать?

Последний раз редактировалось Solax; 09.07.2010 в 11:51.
Solax вне форума   Ответить с цитированием
Старый 09.07.2010, 11:44   #6
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Хм... Продолжу цепочку ваших вопросов.

Цитата:
Сообщение от Solax Посмотреть сообщение
Так, пул-апы я включу (INTCON2 = 0x1. тогда на RB7 нужно кнопку на землю сажать?
Т.е. в обработке прерывания нужно вписать перед сбросом RBIF
PORTBbits.RB7=0; ? если pull-up подклчать?
А если для начала мозги подключить и подумать?
Bill вне форума   Ответить с цитированием
Старый 09.07.2010, 11:52   #7
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Хм... Продолжу цепочку ваших вопросов.

Цитата:
Сообщение от Bill Посмотреть сообщение
А если для начала мозги подключить и подумать?
Это всё конечно верно.....Но не было бы вопросов, не писал бы.
Окончательно запутался в даташите. поэтому и прошу помощи выбраться из "болота".
В схеме используется 1 кнопка на порты B7-4. Как верно было подмечено они все к меня болтались. соответственно включил pull-up.
Неоднозначность убирается чтением, так? а неоднозначность получается только по 7 порту? или нужно читать весь порт для убирания неоднозначности?
Solax вне форума   Ответить с цитированием
Старый 09.07.2010, 12:01   #8
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Продолжаю вопросы.

Цитата:
Сообщение от Solax Посмотреть сообщение
а неоднозначность получается только по 7 порту? или нужно читать весь порт для убирания неоднозначности?
А что по этому поводу в DS сказано?
Bill вне форума   Ответить с цитированием
Старый 09.07.2010, 12:06   #9
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Продолжаю вопросы.

Цитата:
Сообщение от Bill Посмотреть сообщение
А что по этому поводу в DS сказано?
Там сказано что проверяются все и при несовпадении возникает прерывание, но у меня изменяется только 1, остальные получаются всегда в одном состоянии.
Solax вне форума   Ответить с цитированием
Старый 09.07.2010, 12:10   #10
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 49
Сообщений: 1,842
Вес репутации: 2279/87
petrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond repute
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: Хм... Продолжу цепочку ваших вопросов.

Цитата:
Сообщение от Solax Посмотреть сообщение
Это всё конечно верно.....Но не было бы вопросов, не писал бы.
Окончательно запутался в даташите. поэтому и прошу помощи выбраться из "болота".
В схеме используется 1 кнопка на порты B7-4. Как верно было подмечено они все к меня болтались. соответственно включил pull-up.
Неоднозначность убирается чтением, так? а неоднозначность получается только по 7 порту? или нужно читать весь порт для убирания неоднозначности?
А Вы знаете способ как в PIC можно порты побитно читать? Ну-ка, поделитесь! Почитайте про операцию RMW (чтение-модификация-запись).
А кнопку садите на землю, если включите pull-up, то внешние резисторы не нужны, не включите - нужны. А чтобы входы RB6-4 не болтались их можно включить на выход.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 09.07.2010, 14:39   #11
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Хм... Продолжу цепочку ваших вопросов.

Спасибо! Если пользовать внешние резисторы, номинал 10кОм на кнопку достаточно?или лучше 1.5Ком ставить?
Код:
  TRISB = 0b10000000;
    LATB  = 0b00000000;   
     PORTB = 0b00000000;
В main подготовка входов - RB7 как вход, все остальные как выходы.
Код:
PORTB;
INTCONbits.RBIF = 0;            //clear interrupt flag*/
Данная обработка прерывания будет верной?
Solax вне форума   Ответить с цитированием
Старый 09.07.2010, 15:52   #12
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 49
Сообщений: 1,842
Вес репутации: 2279/87
petrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond reputepetrd has a reputation beyond repute
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: Хм... Продолжу цепочку ваших вопросов.

Цитата:
Сообщение от Solax Посмотреть сообщение
Спасибо! Если пользовать внешние резисторы, номинал 10кОм на кнопку достаточно?или лучше 1.5Ком ставить?
Код:
  TRISB = 0b10000000;
    LATB  = 0b00000000;   
     PORTB = 0b00000000;
В main подготовка входов - RB7 как вход, все остальные как выходы.
Код:
PORTB;
INTCONbits.RBIF = 0;            //clear interrupt flag*/
Данная обработка прерывания будет верной?
Пробуйте. А насчет верная или нет обработка - загляните в листинг, во что превратится команда PORTB; и посмотрите верно или нет.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)

Последний раз редактировалось petrd; 09.07.2010 в 15:59.
petrd вне форума   Ответить с цитированием
Старый 12.07.2010, 14:49   #13
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Хм... Продолжу цепочку ваших вопросов.

Цитата:
Сообщение от petrd Посмотреть сообщение
Пробуйте. А насчет верная или нет обработка - загляните в листинг, во что превратится команда PORTB; и посмотрите верно или нет.
Попробовал просто опрос кнопки без прерывания - всё работает,
Пытаюсь добавлять прерывания - даже просто Led не загораются, которые прописаны вне обработки прерывания!
Не могу разобраться, при просмотре Watch'ем например PORTA,
после строки PORTA = 0x18; вместо 0х18 стоит значение 0х10! как так? (Светодиоды висят на RA3 и RA4 и соответственно не зажигаются). Ну и соответственно прерывание тоже не обрабатывается.
я уже и побитово пробовал и в двоичной системе 0b*** и сдвигом 1<<*.
Подскажите пожалуйста!

Код:
#include <p18F2455.h>
void main (void);
void InterruptHandlerHigh (void);
void delay (void);
#pragma config WDT = OFF // выкл. сторожевой таймер 
#pragma config PLLDIV = 5 // (20 MHz crystal on board)
#pragma config CPUDIV = OSC1_PLL2 
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC =INTOSC_XT //HS oscillator, PLL enabled, HS used by USB
union
{
  struct
  {
    unsigned Timeout:1;         //flag to indicate a TMR0 timeout
    unsigned None:7;
  } Bit;
  unsigned char Byte;
} Flags;

//----------------------------------------------------------------------------
// High priority interrupt vector

#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh //jump to interrupt routine
  _endasm
}

//----------------------------------------------------------------------------
// High priority interrupt routine

#pragma code
#pragma interrupt InterruptHandlerHigh

void
InterruptHandlerHigh ()
{
int i;
  if (INTCONbits.RBIF)                //Проверка на нажатие кнопки (выставление флага прерывания)
    {                                   
     Flags.Bit.Timeout = 1;         //indicate timeout
     INTCONbits.RBIF = 0;           //clear interrupt flag*/
     PORTB = 0xff;                            //Устранение несоответсвия
    }
}
void delay (void)
{
  int i;
  //for (i = 0; i < 10000; i++)
    for (i = 0; i < 1000; i++);
}

//----------------------------------------------------------------------------
// Main 
void main ()
{
    Flags.Byte = 0x0;
    INTCONbits.GIE = 1;                    //Разрешены все немаскированные прерывания
    INTCONbits.RBIE = 1;                //Разрешение прерывания по изменению на RB
    INTCON2bits.RBPU = 1;               //RB Pull Up enable
      RCONbits.IPEN = 0;                   //disable priority levels
    TRISA = 0x00;                            //Установка всех выводов RA на выход      
    TRISB = 0x80;                        //Установка RB7 на ввод, остальные на вывод
    TRISC = 0x00;                            //Установка всех выводов RC на выход
    LATB  = 0xff;                    //Защелкивание RB на единицы
     PORTB = 0xff;
    while (1)
    {
        if (!Flags.Bit.Timeout)
        {
               LATC = 0x04 ;
            LATA = 0x18 ;
        }
        else                                 //timeout? -> LED OFF
        { 
            LATC = 0x00;
            LATA = 0x00;
            Flags.Bit.Timeout = 0;          //clear timeout indicor
        }
    }
}
Миниатюры
Watch.JPG  
Solax вне форума   Ответить с цитированием
Старый 12.07.2010, 15:08   #14
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Хм... А вставки ассемблерные

зачем?
Bill вне форума   Ответить с цитированием
Старый 12.07.2010, 15:09   #15
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Хм... А вставки ассемблерные

что зачем?
Разобраться я хочу!
Solax вне форума   Ответить с цитированием
Старый 12.07.2010, 15:11   #16
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Ну, действуя таким образом

Цитата:
Сообщение от Solax Посмотреть сообщение
что зачем?
Разобраться я хочу!
вы вряд ли разберетесь. Скорее наоборот еще больше запутаетесь.
Bill вне форума   Ответить с цитированием
Старый 12.07.2010, 15:14   #17
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Ну, действуя таким образом

С таким подходом, точно не разберусь, ибо посоветоваться не скем.
Возможно хотя бы указать на ошибки, а не показывать своё превосходство?
Без глупых вопросов истины не всегда добьёшься к сожалению.
Solax вне форума   Ответить с цитированием
Старый 12.07.2010, 15:20   #18
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Я не показываю свое превосходство.

Цитата:
Сообщение от Solax Посмотреть сообщение
С таким подходом, точно не разберусь, ибо посоветоваться не скем.
Возможно хотя бы указать на ошибки, а не показывать своё превосходство?
Без глупых вопросов истины не всегда добьёшься к сожалению.
Я просто задаю вопросы, пусть, возможно, глупые. Но если вы что-то делаете, вы четко должны знать зачем вы это делаете. Еще раз подчеркну; использование ассемблерных вставок без особой на то необходимости отнюдь не способствует решению проблем. Поэтому мой вопрос остается - зачем вам эти вставки?
Bill вне форума   Ответить с цитированием
Старый 12.07.2010, 15:29   #19
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Я не показываю свое превосходство.

Извиняюсь, сразу не понял.
Я брал пример обработки прерывания из С18, и пытался подправить под прерывания по кнопке. Поэтому вставки и не трогал. Как верно на С будет обработать вектор прерывания?
Solax вне форума   Ответить с цитированием
Старый 12.07.2010, 16:22   #20
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Советую внимательно прочитать

Цитата:
Сообщение от Solax Посмотреть сообщение
Извиняюсь, сразу не понял.
Я брал пример обработки прерывания из С18, и пытался подправить под прерывания по кнопке. Поэтому вставки и не трогал. Как верно на С будет обработать вектор прерывания?
Руководство по компилятору, раздел 2.9.2.
Bill вне форума   Ответить с цитированием
Старый 12.07.2010, 16:25   #21
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Я не показываю свое превосходство.

Перечитал ещё раз обработку прерываний в книге Б.Брея 2008 года..Всё вроде верно.
или я Вас не правильно понял про ненужный ассемблерный код(вставки).
Я знаю что мне нужно обработать прерывание от кнопки по порту, и зажечь на другом порту диод. без прерывания всё без проблем. а вот код, что выше не даёт результата. Вот только ошибки я не вижу. и понять выкрутасы с
PORTB = 0xff; и LATA = 0x18 ;
Цитата:
Руководство по компилятору, раздел 2.9.2.
Благодарю, буду изучать подробней!
Solax вне форума   Ответить с цитированием
Старый 12.07.2010, 16:37   #22
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Совет на будущее -

Цитата:
Сообщение от Solax Посмотреть сообщение
Перечитал ещё раз обработку прерываний в книге Б.Брея 2008 года..Всё вроде верно.
или я Вас не правильно понял про ненужный ассемблерный код(вставки).
Я знаю что мне нужно обработать прерывание от кнопки по порту, и зажечь на другом порту диод. без прерывания всё без проблем. а вот код, что выше не даёт результата. Вот только ошибки я не вижу. и понять выкрутасы с
PORTB = 0xff; и LATA = 0x18 ;

Благодарю, буду изучать подробней!
не стоит привыкать к ассемблерным вставкам. Если участок программы критичен по времени (чаще всего) или по объему, то лучше выполнит его целиком на ассемблере. Интерфейс между ассемблерными и Си функциями, как правило, описывается в руководстве по компилятору.
Bill вне форума   Ответить с цитированием
Старый 12.07.2010, 17:58   #23
Solax
Member
 
Регистрация: 09.07.2010
Сообщений: 95
Вес репутации: 129/39
Solax will become famous soon enoughSolax will become famous soon enough
По умолчанию Re: Совет на будущее -

Ясно.
по 2.9.2 спасибо. там разобрался вроде но буду ещё вчитываться...
Bill,подскажите пожалуйста ещё весчь с обработкой PORTB:
Как советовали - на вход я оставил только RB7 на котором висит кнопка,замыкающая на землю, остальные - выходы;
-включены подтяг. рез-ры RBPU=0;
-защелкиваем порт В на 1 и читаем 1: LATB = 0xff; PORTB = 0xff;
-соответственно прерывание должно заметить появление 0 на RB7 при замыкании кнопки;
-для того, чтобы не было несоответствия в обработке прерывания должны прочитать опять порт В так? temp =PORTB ;
Вроде логику понимаю, но не работает
Solax вне форума   Ответить с цитированием
Старый 12.07.2010, 18:28   #24
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 45
Сообщений: 2,610
Вес репутации: 2570/101
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Прерывание по PORTB7-4 pic18f2455

Цитата:
Сообщение от Solax Посмотреть сообщение
Вот появился вопрос по прерыванию от порта В:
хочу запустить выполнение пп по нажатию кнопки, но для начала чтобы по нажатию загорался диод. у меня он естественно загАраться не хочет
Зачем решил сделать обработку кнопок таким образом? Сам микрочип рекомендует использовать это прерывание, только для "пробуждения" из SLEEP.
Когда-то я тоже делал такую обработку кнопок. Даже работало. Но потом отказался.
fantom вне форума   Ответить с цитированием
Старый 12.07.2010, 18:35   #25
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/90
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Могу еще раз посоветовать.

Цитата:
Сообщение от Solax Посмотреть сообщение
Ясно.
по 2.9.2 спасибо. там разобрался вроде но буду ещё вчитываться...
Bill,подскажите пожалуйста ещё весчь с обработкой PORTB:
Как советовали - на вход я оставил только RB7 на котором висит кнопка,замыкающая на землю, остальные - выходы;
-включены подтяг. рез-ры RBPU=0;
-защелкиваем порт В на 1 и читаем 1: LATB = 0xff; PORTB = 0xff;
-соответственно прерывание должно заметить появление 0 на RB7 при замыкании кнопки;
-для того, чтобы не было несоответствия в обработке прерывания должны прочитать опять порт В так? temp =PORTB ;
Вроде логику понимаю, но не работает
Есть магическое слово volatile. Обратите на него особое внимание, раздел 2.9.2.2
PS: К сожалению, примеры, приведенные в руководстве, не способствуют пониманию работы компилятора. Хотя, конечно, существует большой соблазн просто скопировать пример (или его часть) в свою программу. Могу посоветовать посмотреть листинг сгенерированного кода. Возможно он поможет увидеть ошибку.
Bill вне форума   Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с энкодером, проблема со считыванием по INT aлeкcтишнoв Продукция MICROCHIP 11 27.06.2010 23:00
Прерывание от USART в MPLAB Коротенко Алексей Вопросы начинающих 19 24.05.2010 14:25
Передача сигнала по линии питания 24В maagalex Общетехнические вопросы 34 25.04.2010 21:11
gprs тарификация (конкретнее- по sim300) MaxB Общетехнические вопросы 4 21.08.2008 20:16
RC цепочка по питанию PIC, как считать ? Синклер Продукция MICROCHIP 1 20.03.2007 17:26


Часовой пояс GMT +3, время: 07:56.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot