Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

 
Опции темы
Непрочитано 03.03.2010, 21:15  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 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,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

Бросьте эту затею, это неправильно. Исходите из суперлупа. Пересмотрите решение задачи или вы обречены на долгий гемор.
st_1 вне форума  
Непрочитано 03.03.2010, 22:12  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

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

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

ИМХО. Прерывания более усточивы к сбоям нежели фоновая программа.
picavr вне форума  
Непрочитано 03.03.2010, 22:35  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
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,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Вложенные прерывания HITECH PIC16

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

W, STATUS и PCLATH сохряняются. А FSR то вам зачем?
realid вне форума  
Непрочитано 03.03.2010, 22:56  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 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.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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, время: 07:22.


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