Если обрабатывается флаг CMIF, то чтобы его сбросить, нужно вначале прочитать CMCON для устранения несоответствий, а затем уже сбросить флаг CMIF. Это описано в документах на модуль компаратора.
Инвертирование COUT битом CINV нужно для того, чтобы флаг CMIF устанавливался тогда, когда нужна реакция компаратора. Этот флаг установится только тогда, когда COUT=1, и переход в прерывание будет только по этому условию.
Более того, во время изменения параметров компаратора и Vref, нужно запрещать прерывание от модуля компараторов (бит CMIE) и сбрасывать бит CMIF, чтобы не было случайного перехода. Да, действий много, но куда денешься. Без них будут такие вот непонятки. Но эти действия выполняются не в прерывании, а в основной программе.
Сообщение от rusyvochka
|
каждый такт на счету
|
Вот я о том же: сколько шагов получилось?
Адреса 0х85 и 0х9F находятся в одном банке
Макросы не изменяют число команд, они просто сокращают запись текста.
Сообщение от rusyvochka
|
Lo_Vref set .2 | b'00100000' - это как IOR отрабатывает? ... Что полистать
|
Документ под названием "MPASM Руководство пользователя". Есть на русском языке, в pdf файле. BZ, SKPC - это очень даже документированные псевдокоманды. Описание их есть в англоязычной версии руководства "MPASM User Manual".
Запись
Код:
|
Lo_Vref set .2 | b'00100000' |
означает побитовое логическое "ИЛИ" с числами .2 (b'00100010' в двоичном) и b'00100000', присвоенное Lo_Vref. Результат b'00100010'.
А еще более интересная и понятная запись будет вот такой:
Код:
|
Lo_Vref set .2 | 1‹‹VRR |
1‹‹VRR означает установку "1" в позиции бита VRR (0x05).
Именно такая запись облегчает чтение и отладку кода, потому что не надо заглядывать в даташит и выискивать позицию конкретного бита, нужно только знать, как называется бит и за что он отвечает.
set и
equ практически одинаковы и почти без разницы, какую использовать. Но зато используя
set, можно этому же Lo_Vref потом в любом месте текста присвоить другое значение, если нужно, а не придумывать Lo_Vref_1, Lo_Vref_2.
$-1 - это нормально. хуже, когда $-4, а в той строчке макрос прописан. А в листинге указывается конкретный адрес перехода.