Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

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

 
Опции темы

HI-TECH PIC выход из прерывания

Непрочитано 10.12.2011, 09:44  
Slava-martyn
Вид на жительство
 
Аватар для Slava-martyn
 
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
Slava-martyn на пути к лучшему
По умолчанию HI-TECH PIC выход из прерывания

В программе настроено прерывание от АЦП и TMR0. В TMR0 обрабатывается результат АЦП, а в бесконечном цикле основной программы осуществляется индикация. При выходе из прерывания очень часто возникает ситуация установки случайного числа. МК PIC16F877A.

Прерывание:
PHP код:
interrupt void tajm(void) 
{
    //------------------------------------------
    if (T0IF & T0IE)
    {
        if (ADGO==0 && ADIF==0)
        {
            ADGO=1;
        }
        T0IF=0;
        GIE=1;
    } 
    //------------------------------------------
    if (ADIF && ADIE)
    {
        ADIF=0;
        GIE=1;
    } 
Цикл:
PHP код:
    while(1==1)            // Запуск бесконечного цикла
    {
    INDIC[0]=123;
        switch (NOCIFR)
        {
            case 0: CIFRA=lsd; break;
            case 2: CIFRA=msd; break;
            case 4: CIFRA=bsd; break;
        }
        switch (CIFRA) // Заходит в прерывание здесь
        {                //    ABCDEFGP
            case 0: PORTC=0b11000000; break; // Выходит тут, и устанавливает 0
            case 1: PORTC=0b11111001; break;
            case 2: PORTC=0b10100100; break;
            case 3: PORTC=0b10110000; break;
            case 4: PORTC=0b10011001; break;
            case 5: PORTC=0b10010010; break;
            case 6: PORTC=0b10000010; break;
            case 7: PORTC=0b11111000; break;
            case 8: PORTC=0b10000000; break;
            case 9: PORTC=0b10010000; break;
        }
        switch (NOCIFR)
        {
            case 0: RB7=0; RB6=1; RB5=1; break;
            case 1: RB7=1; RB6=1; RB5=1; break;
            case 2: RB7=1; RB6=0; RB5=1; break;
            case 3: RB7=1; RB6=1; RB5=1; break;
            case 4: RB7=1; RB6=1; RB5=0; break;
            case 5: RB7=1; RB6=1; RB5=1; break;
        }
        NOCIFR++;
        if (NOCIFR›6)
        {
            NOCIFR=1;
            displ_d=INDIC[0];
            msd=bsd=dst=0;
            lsd=displ_d;
            while (lsd›=10)
            {
                if((lsd-10)›=0)
                {
                    msd++; lsd-=10;
                }
                if((msd-10)›=0)
                {
                    bsd++;
                    msd-=10;
                }
                if((bsd-10)›=0)
                {
                    dst++;
                    bsd-=10;
                }
            }
        }
    } 
PS: На данный момент код индикации упростил и добавил его в прерывание, но хотелось бы индикацию оставить за пределами прерывания, да и выяснить надо откуда ошибка появилась.
Реклама:

Последний раз редактировалось Slava-martyn; 10.12.2011 в 09:59.
Slava-martyn вне форума  
Сказали "Спасибо" Slava-martyn
warel (28.06.2019)
Непрочитано 11.12.2011, 01:00  
Bill
Гражданин KAZUS.RUN
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию А это зачем???

Сообщение от Slava-martyn Посмотреть сообщение
Код:
GIE=1;
Bill вне форума  
Сказали "Спасибо" Bill
warel (28.06.2019)
Непрочитано 11.12.2011, 02:49  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: HI-TECH PIC выход из прерывания

Как раз по вашей теме...
http://vrtp.ru/index.php?showtopic=10583
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
Непрочитано 11.12.2011, 15:30  
Slava-martyn
Вид на жительство
 
Аватар для Slava-martyn
 
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
Slava-martyn на пути к лучшему
По умолчанию Re: HI-TECH PIC выход из прерывания

Почти
PHP код:
    while(1==1)            // Запуск бесконечного цикла 
    {
       switch (CIFRA) // Заходит в прерывание здесь 
        {                //    ABCDEFGP 
            case 0: PORTC=0b11000000; break; // Выходит тут, и устанавливает PORTC=0b11000000; вне зависимости от значения CIFRA !!!
            case 1: PORTC=0b11111001; break;
    } 
В архиве программа и модель. На 6 секунде высвечивает 003, при этом (перед этим) входит в прерывание примерно в:
PHP код:
            msd=bsd=dst=0;
            lsd=displ_d;
            while (lsd›=10)
            { 
выходит в строчке INDIC[0]=123;

Вопрос как и почему это происходит?
Вложения:
Тип файла: rar UROV2.rar (89.7 Кб, 51 просмотров)

Последний раз редактировалось Slava-martyn; 11.12.2011 в 16:08.
Slava-martyn вне форума  
Сказали "Спасибо" Slava-martyn
warel (28.06.2019)
Непрочитано 12.12.2011, 01:13  
Bill
Гражданин KAZUS.RUN
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Re: HI-TECH PIC выход из прерывания

См. пост#2
Bill вне форума  
Эти 2 пользователя(ей) сказали Спасибо Bill за это сообщение:
Slava-martyn (12.12.2011), warel (28.06.2019)
Непрочитано 12.12.2011, 16:08  
Slava-martyn
Вид на жительство
 
Аватар для Slava-martyn
 
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
Slava-martyn на пути к лучшему
По умолчанию Re: HI-TECH PIC выход из прерывания

И точно! Если убрать GIE=1 в прерывании таймера, то всё работает как надо.
Цитата:
Возврат из обработки прерываний выполняется по команде RETFIE, при этом происходит установка бита GIE в 1, что позволяет обработать любое отложенное прерывание.
Делал по образцу http://www.pcports.ru/articles/pic7.php
Slava-martyn вне форума  
Сказали "Спасибо" Slava-martyn
warel (28.06.2019)
Непрочитано 12.12.2011, 18:54  
Bill
Гражданин KAZUS.RUN
 
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
Bill на пути к лучшему
По умолчанию Прежде чем что-то написать,

Сообщение от Slava-martyn Посмотреть сообщение
И точно! Если убрать GIE=1 в прерывании таймера, то всё работает как надо.

Делал по образцу http://www.pcports.ru/articles/pic7.php
нужно подумать для чего это необходимо, да необходимо ли это вообще. Или нет?
Bill вне форума  
Сказали "Спасибо" Bill
warel (28.06.2019)
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование HI - TECH для PIC контроллеров ST_Senya Микроконтроллеры, АЦП, память и т.д 27 22.10.2010 18:45
Прерывания PIC milssky Микроконтроллеры, АЦП, память и т.д 12 10.10.2010 13:31
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17
Изучение HI-TECH C для PIC ST_Senya Микроконтроллеры, АЦП, память и т.д 7 26.09.2009 20:36
выход из прерывания vrt90 АЛЕКСАНДР Микроконтроллеры, АЦП, память и т.д 5 05.10.2004 12:18


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


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