Прерывание прерывать PIC16F877

O

octron

Guest
Привет,
Возможно ли прервать подпрограмму в 16F877 быть прерван другим прервать??

Спасибо

 
При прерывании началось все другие прерывания автоматически отключены, очистив GIE флаг, но контроллера создает соответствующий флаг, если любое прерывание случае идет.По состоянию на конец прерывания, RETFIE инструкция возвращается из прерывания с установкой GIE (разрешить прерывание).Если какие-либо другие события прерывания приходит во время прерывания, то он будет выполнен после прерывания.

 
На самом деле, это возможно.

Обычно, когда вы пишете обслуживания прерывания (ISR) Самое первое, что вы делаете, когда ввод ISR петля находилась dissable всех прерываний.Затем обслуживания прерываний (устранить причину, почему ее называли в первую очередь).Затем перед выходом ISR Вы разрешите все прерывания снова.

Однако, если вы не отключите все прерывания то, наверное, можно было бы вызвать прерывание а внутри прерывания.Имейте в виду, что программа борьбы только 8 уровней стека.

Вот тест.набор ПИК чипа прервать на некоторое значение счетчика ...затем, когда прерывание происходит, есть код сказать:

ISR: * не отключать interrups
endless_loop:
Перейти endless_loop
КОНЕЦ ISR

Код застревает в бесконечном цикле.Хотя это цикл вокруг причины "прервать на изменение" на чипе ПОС.ISR, что внутри есть светодиодный включается.

Это могло бы, вероятно, будут смоделированы в Proteus ...

Mr.CoolMr.Cool

 
По словам г-Cool словам, это может быть сделано.Обычно, после обслуживания прерывания запуска retfie команда, которая отодвигает GIE бит.Никто не может остановить вас от повторного включения прервать до полного обслуживания предыдущего прерывания, поэтому может быть вновь прервана.

Но, это очень рискованно и несколько вещей должны быть рассмотрены.Это очень важно, чтобы сначала признать прерывание, а затем установить GIE бит.Потому что если вы не очистите xxxIF бит, устанавливающийся GIE будет продолжать стрельбу снова и снова те же прервать бесконечно и пуф, вы застряли ...

Следующий иметь в виду, что тот же самый код в начале прерывания будет повторно выполнена.Например, обычно вы сохраните Вт и статуса, когда ввод Int и восстановить ее на выходе.Если вы используете статический метод, например сохранить единую позицию памяти для каждого регистра, если вы повторно прервать вы потеряете Вт и первоначальные значения состояния.

И, конечно, всегда есть 8-уровня Deep Stack

Я думаю, что было бы лучше использовать избирательные внутри прервать, но только вы можете решить это.

Привет
toxadi

 
Если вам действительно нужна эта вы должны использовать процессор PIC18 например PIC18F452 которые совместимы по контактам с 16F877.

Этот процессор имеет 2 прервать приоритеты и высокий приоритет прерывания могут прервать низким приоритетом прерывания.

с уважением

 
Я думаю, что нет способа сохранить W & SFR правильно вложенных прерываний для pic16 серия
Для PIC18 серия Это можно сделать с помощью одного из FSRs

 
Помните U лишь 7 позиции в стопки, чтобы сохранить программу борьбы .... иногда их несколько ... Вы должны сохранить компьютером по себе, пренебрегая retfie и исполнительское Перейти далеко.

 

Welcome to EDABoard.com

Sponsor

Back
Top