Искусственный вызов прерывания последовательного порта в МК52
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено N_BOGOYAVLENSKY 02 июля 2004 г. 10:57

Здравствуйте!
Необходимо отложить выполнение подпрограммы обработки прерывания от последовательного порта микроконтроллера AT89S8252 на некоторое время (принимаем байт). Как это лучше сделать?

1. Пробовал чисто программно, но не сработало:

Прерывание от ПП запрещено в самом начале программы (работаем с RI).
Анализирую RI и, если он установлен, то:
SETB ES
CLR RI
SETB RI
NOP ; ожидал где-то здесь вызова
; подпрограммы обработки прерывания
CLR ES
Т. е. где-то что-то (кроме RI) не устанавливается и подпрограмма обработки прерывания не вызывается (можно, конечно попробовать что-нибудь передать, тогда, думаю, получится, но - не нравится это мне).
Может, надо задержки какие-нибудь поставить, разрешить или запретить что-нибудь?

2. Прерывание от ПП запрещено в самом начале программы.
Анализирую RI и если он установлен, то:

CALL НАША_ПОДПРОГРАММА_ОБРАБОТКИ_ПРЕР

Так работает. В конце подпрограммы обработки прерывания как и требуется - стоит RETI. Но мне это не нравится тоже - нестандартно как-то. Я вообще смутно представляю чем отличается RET от RETI.

Всвязи с этим вопрос: является ли второй способ корректным? Т. е. мы запретили прерывание и вызываем CALL`ом подпрограмму обработки, в конце которой стоит RETI.
Может ещё как-нибудь можно?

Спасибо за ответы!
С уважением, Николай Б.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru