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

Вернуться   Форум Микро-Чип > Вопросы начинающих

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

Ответ
 
Опции темы Опции просмотра
Старый 19.09.2008, 15:55   #1
Johns
Junior Member
 
Регистрация: 19.09.2008
Возраст: 32
Сообщений: 2
Вес репутации: 100/0
Johns will become famous soon enoughJohns will become famous soon enough
По умолчанию Проблема с прерыванием от таймера

Доброго времени суток, прошу помочь разобраться с прерываниями по переполнению таймера, подскажите пожалуйста - что я делаю не так? проц 18f1320. Вот код в MPLAB:

Код:
#include <p18cxxx.h>
#include "bits.h"

void TMR0Interrupt (void);
void main (void);

void main (void) {

    OSCCON = b1 + b5 + b6; // настройка генератора на 
    // внутренний 4 Mhz
    
    TRISA = b1+b2+b3; // 3 бита PORTA работают  вход
    
    PORTA = 0;
    LATA = 0;

    INTCON = 0x20;                // выключаем глобальные и включаем TMR0 прерывание 
    INTCON2 = 0x84;               // даем TMR0 высокий приоритет
    RCONbits.IPEN = 1;            // разрешаем приоритетность
    T0CON = 0x80;                  // разрешаем 16-ти разрядный таймер с 1:2
    TMR0L = 0;                       // обнуляем показания таймера.
    TMR0H = 0;                       // также и старшую часть
    INTCONbits.GIEH = 1;          // разрешаем прерывания

while (1)
    {
    ClrWdt();
    }    
    
}        

#pragma interrupt TMR0Interrupt // сегмент кода - обработчик прерываний
void TMR0Interrupt (void) {     // функция обработки прерывания

    if (INTCONbits.TMR0IF)            // проверяем переполнение TMR0
    {                                   
        INTCONbits.TMR0IF = 0;            // сбрасывает флаг переполнения
           LATAbits.LATA0=!LATAbits.LATA0;
    }

}
хочу что б просто ножка моргала (для понимания работы прерывания вообще), а этого не происходит...(

Последний раз редактировалось majorPAE; 22.09.2008 в 13:07. Причина: Код оформлять не забывай... ;)
Johns вне форума   Ответить с цитированием
Старый 22.09.2008, 12:55   #2
Medved
Member
 
Регистрация: 06.06.2007
Возраст: 38
Сообщений: 53
Вес репутации: 100/43
Medved will become famous soon enoughMedved will become famous soon enough
По умолчанию Ответ: Проблема с прерыванием от таймера

Надо разрешить глобальные прерывания. Почитайте подробней про прерывания
Medved вне форума   Ответить с цитированием
Старый 22.09.2008, 12:57   #3
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/76
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Проблема с прерыванием от таймера

глобальные он включил. Но надо еще включить периферийные: PIE бит в INTCON
__________________
даташит читать до того , а не после
Alex B. вне форума   Ответить с цитированием
Старый 22.09.2008, 12:59   #4
Medved
Member
 
Регистрация: 06.06.2007
Возраст: 38
Сообщений: 53
Вес репутации: 100/43
Medved will become famous soon enoughMedved will become famous soon enough
По умолчанию Ответ: Проблема с прерыванием от таймера

А да, точно
Medved вне форума   Ответить с цитированием
Старый 22.09.2008, 13:42   #5
air
Senior Member
 
Регистрация: 26.02.2007
Адрес: Moscow
Возраст: 51
Сообщений: 130
Вес репутации: 253/46
air is a jewel in the roughair is a jewel in the roughair is a jewel in the rough
Отправить сообщение для air с помощью Skype™
По умолчанию Ответ: Проблема с прерыванием от таймера

Во первых не видно обработчика intHigh, что-то типа такого:
Код:
 
//----------------------------------------------------------------------------
// 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 (void) {
    if (INTCONbits.TMR0IF)            // проверяем переполнение TMR0
    {                                   
        INTCONbits.TMR0IF = 0;            // сбрасывает флаг переполнения
        LATAbits.LATA0=!LATAbits.LATA0;
    }
}
Во вторых поменять местами:
Код:
 
TMR0H = 0; //clear timer
TMR0L = 0; //clear timer
air вне форума   Ответить с цитированием
Старый 22.09.2008, 15:37   #6
Daniil
Senior Member
 
Регистрация: 22.09.2008
Адрес: Санкт-Петербург
Сообщений: 131
Вес репутации: 501/43
Daniil is a glorious beacon of lightDaniil is a glorious beacon of lightDaniil is a glorious beacon of lightDaniil is a glorious beacon of lightDaniil is a glorious beacon of lightDaniil is a glorious beacon of light
По умолчанию Ответ: Проблема с прерыванием от таймера

Цитата:
Сообщение от Alex B. Посмотреть сообщение
глобальные он включил. Но надо еще включить периферийные: PIE бит в INTCON
PEIE не надо, так как приоритеты включены(IPEN = 1).
Daniil вне форума   Ответить с цитированием
Старый 23.09.2008, 10:51   #7
Johns
Junior Member
 
Регистрация: 19.09.2008
Возраст: 32
Сообщений: 2
Вес репутации: 100/0
Johns will become famous soon enoughJohns will become famous soon enough
По умолчанию Ответ: Проблема с прерыванием от таймера

всем большое спасибо
Johns вне форума   Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как отловить момент изменения сигнала PIC16F84 vas38 Продукция MICROCHIP 14 25.03.2008 16:18
Проблема с запуском компаратора Koren Продукция MICROCHIP 4 12.02.2008 21:06
PIC18F4520 проблемы с UART-ом AlHakim Продукция MICROCHIP 4 30.10.2007 07:31
Программная симуляция pic16F876 в MPLAB Timik Продукция MICROCHIP 2 12.10.2007 15:12
Проблема картридера с чипсетом от VIA. DL36 Общетехнические вопросы 3 24.08.2007 13:06


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


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