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

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

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

 
Опции темы

Вложенные прерывания HITECH PIC16

Непрочитано 03.03.2010, 21:15  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Вложенные прерывания HITECH PIC16

Доброго времени суток. Возник вопрос по СИ.
Требуется обработать два прерывания. Таймер0 и Таймер1. Одно будет вкладываться в другое.
на АСМе делается так, кусок (SAV_TMR1 до RUTIN_TMR1) располагается во всех страничках програмной памяти с одного адреса, дабы переход по GOTO SAV_TMR1 работал не зависимо от состояния PCLATCH в момент прерывания.
Код:
                  BTFSS INTCON,T0IF
                  GOTO  SAV_TMR1
;сохраняем контекст для таймера 0
SAV_TMR0    MOVWF T0W
                  MOVF STATUS,W
                  BANKSEL SAVREGISTR
                  MOVWF T0STAT
                  MOVF PCLATCH,W
                  MOVWF T0PCH
                  MOVF FSR,W
                  MOVWF T0FSR
                  CLRF PCLATCH
RUTIN_TMR0 BCF INTCON,T0IF;гасим флаг

;сохраняем контекст для таймера 1
SAV_TMR1    MOVWF T1W
                  MOVF STATUS,W
                  BANKSEL SAVREGISTR
                  MOVWF T1STAT
                  MOVF PCLATCH,W
                  MOVWF T1PCH
                  MOVF FSR,W
                  MOVWF T1FSR
                  CLRF PCLATCH
                  GOTO RUTIN_TMR1

RUTIN_TMR1
                  BANKSEL PIE    ;    
                  BCF PIE,TMR1IE;выкл прерывания TMR1
                  BANKSEL PIR    ;    
                  BCF PIR,TMR1IF;гасим флаг
                  BSF INTCON,GIF;РАЗРЕШАЕМ ПРЕРЫВАНИЯ для ТАЙМЕРА0
Как ЭТО ЖЕ моно изобразить на СИ? просматривал что генерит компилятор, сохраняет W и STATUS, а вот об FSR и PCLATH по моему забыл.

Меня интересует возможно ли заставить его генерить то что я изобразил на АСМ.

ИЛИ как это коректно делается на СИ.

может типа этого?
Код:
 if((INTCON & 0x04)›0) // ещё вариант if((INTCON & 0x04)==4)
 {
//вектор TMR0
INTCON =INTCON & 0xFB;//гасим флаг
 }
 else
 {
//вектор TMR1
PIR1=PIR1 & 0xFE; //гасим флаг
PIE=PIE & 0xFE; //выкл прерывание TMR1
__enable_interrupt();
 }
Реклама:

Последний раз редактировалось picavr; 03.03.2010 в 21:52.
picavr вне форума  
Непрочитано 03.03.2010, 22:06  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Бросьте эту затею, это неправильно. Исходите из суперлупа. Пересмотрите решение задачи или вы обречены на долгий гемор.
st_1 вне форума  
Непрочитано 03.03.2010, 22:12  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Код:
void interrupt ISR(void)
{
    if(TMR0IF  && TMR0IE)
    {
        TMR0IF = 0;
    }
    
    if(TMR1IF  && TMR1IE)
    {
        TMR1IF = 0;
    }
}
Или нет?
realid вне форума  
Непрочитано 03.03.2010, 22:31  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Сообщение от realid Посмотреть сообщение
Или нет?
Может и так, я ещё не пробовал, посему и спрашиваю ходивших по этим граблям... Спасибо, примерно то же самое я и изобразил в первом посте...
Я думал здесь нужно будет заботится о сохранении контента для разных прерываний...

Сообщение от st_1 Посмотреть сообщение
Бросьте эту затею, это неправильно. Исходите из суперлупа. Пересмотрите решение задачи или вы обречены на долгий гемор.
Ответ неправильный... Вопрос звучал как изобразить на СИ...
или СИ этого не позволяет ???
Покажите где написано что вложеные прерывания это не правильно?
Как правило гемора, при правильном распределени ресурсов МК, нет.

ИМХО. Прерывания более усточивы к сбоям нежели фоновая программа.
picavr вне форума  
Непрочитано 03.03.2010, 22:35  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Сообщение от picavr Посмотреть сообщение
на АСМе делается так, кусок (SAV_TMR1 до RUTIN_TMR1) располагается во всех страничках програмной памяти с одного адреса, дабы переход по GOTO SAV_TMR1 работал не зависимо от состояния PCLATCH в момент прерывания.
Это неправильно, тем более на Си.
st_1 вне форума  
Непрочитано 03.03.2010, 22:40  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Сообщение от picavr Посмотреть сообщение
Прерывания более усточивы к сбоям нежели фоновая программа.
Нонсенс. Почитайте про устойчивость программ к различным типам воздействий и правила написания отказоустойчивых программ.
st_1 вне форума  
Непрочитано 03.03.2010, 22:47  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

W, STATUS и PCLATH сохряняются. А FSR то вам зачем?
realid вне форума  
Непрочитано 03.03.2010, 22:56  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Сообщение от realid Посмотреть сообщение
W, STATUS и PCLATH сохряняются. А FSR то вам зачем?
Возможно мне и незачем ))) привык к асемблере контролировать всё...
НО в вашем примере во время обработки прерывания TMR1 не может сработать и обработатся прерывание TMR0...

Если невозможно написать на СИ придётся прерывание писать на асме...

Последний раз редактировалось picavr; 03.03.2010 в 23:15.
picavr вне форума  
Непрочитано 03.03.2010, 23:04  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Сообщение от st_1 Посмотреть сообщение
Нонсенс.
Покажите где написано что вложеные прерывания это не правильно?

Попробуйте расположить ТОЛЬКО в странице 0-7FF FLASH тот обработчик из моего поста... при срабатывани прерывания TMR1 с PCLATH = 800...1F00 по команде GOTO переход происходит на адрес в
соответствующей странице...))) в котором неизвестно что.

более чем за 10 лет ассемблера я уже разобрался что правильно )))
picavr вне форума  
Непрочитано 03.03.2010, 23:12  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Сообщение от picavr Посмотреть сообщение
Возможно мне и незачем ))) привык к асемблере контролировать всё...
НО в вашем примере во время обработки прерывания TMR1 не может сработать и обработатся прерывание TMR0...
С чего вы взяли это? Ваш код на си и мой делают одно и тоже.

PS. Не обижайтесь, но эта запись if((INTCON & 0x04)›0) меня улыбнула. Это тоже самое, что if(TMR0IF).

Последний раз редактировалось realid; 03.03.2010 в 23:16.
realid вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17
прерывания usart в avr studio 4.13 zubr_ Микроконтроллеры, АЦП, память и т.д 6 14.10.2009 18:33


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


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