Свежие обсуждения
Микроконтроллеры

Никак не могу запустить прерывание MSC-51, TASM

1 2

AHTOXA,
спасибо.

в таком виде работает так как и задумывалось, т.е правильно.

а можно поподробнее обьяснение?

к стати, работает правильно и без сброса флага в обработчике
CLR IE0

 

Подробнее (смотри по порядку шагов):

INCYCLE: MOV     R3,#0

---ШАГ 2здесь r3=0, прерывание запрещено, на следующей строке виснем наглухо

  CYCLE:          CJNE    R3,#0AAH,CYCLE
  CLR     HEARTBEAT
  LCALL   DELAY
  SETB    HEARTBEAT
  SETB    EX0 

---ШАГ 1 вот здесь возникло прерывание. После возврата r3=AA, прерывание выключено.

  AJMP    INCYCLE

 

Cheeeper: к стати, работает правильно и без сброса флага в обработчике
CLR IE0

Значит я не соврал в начале

 

спасибо

 

Но по-хорошему, надо всё же чистить IE0 перед разрешением прерывания.

 

внутри обработчика прерывания никогда не нужно запрещать его! пока обработчик не отработает, новое прерывание того же типа не возникнет и так.

 

ARV: внутри обработчика прерывания никогда не нужно запрещать его! пока обработчик не отработает,

Почему это? Если так надо по логике программы? Например, декодирование RC5 - ловим первый спад, а дальше - по таймеру. Где кроме как в обработчике отключать?

ARV: новое прерывание того же типа не возникнет и так

Очень даже возникнет. Например, если прерывание не по фронту, а по уровню. Пока будет уровень - будет постоянно вызываться прерывание. То есть, после выхода из прерывания будет выполняться одна команда, а потом - снова в прерывание. Это кстати использовалось для пошаговой трассировки.

 
1 2