Угу. Если это моя константа. Я же утверждаю, что так должны были сделать нормальные разработчики тех самых наборов описаний оборудования, которые мы включаем по .include для конкретного камня. А эти курили траву.Alexeyslav писал(а):Это не трава, а тот же самый способ задания констант что и ваш. Только более безопасный. Ваша константа в инклуднике даже в таком виде является магической - это просто плохая практика написания кода, которая предрасполагает к ошибкам по невнимательности
И вообще, на фига было обозначать биты их номерами? Сделали бы, как все нормальные люди, hex-маску, и не морочили головы народу. То есть, конечно, командам SBI/CBI, которые позволяют манипулировать отдельными битами регистров ввода-вывода, нужен именно номер бита, но кто мешал добавить псевдофункцию, допустим, BITNO, подобно LOW и HIGH для половинок слова. То есть, нормальные разработчики сделали бы примерно так
Код: Выделить всё
;--------------------------------------------
; Кусочек из содержимого 1200def.inc
.EQU ACD =0x80
.EQU ACO =0x20
.EQU ACI =0x10
.EQU ACIE =0x08
.EQU ADIany =0x00
.EQU ADI10 =0x02
.EQU ADI01 =0x03
;--------------------------------------------И мы бы писали так:
Код: Выделить всё
.include <1200inc.def>
; мой код
; ...............
LDI R16,AD01 | ACD ; запретим аналоговый компаратор и сделаем прерывания от него по переключению выхода компаратора из 0 в 1
OUT ACSR,R16
; .................
CBI ACSR,bitno(ACD) ; включим аналоговый компаратор
; ..................
SBI ACSR,bitno(ACI) ; Разрешим прерывания от аналогового компаратора. Здесь, для использования команд SBI/CBI, требующих номер бита, подлежащего установке/сбросу, использована гипотетическая псевдофункция ассемблера, возвращающая номер единственного единичного бита в своем аргументе, или выдающая ошибку, если у аргумента не один единичный бит.
Мне бы пришлось писать эти псевдофункции для каждой команды SBI/CBI, но, учитывая, что эти команды применяются достаточно редко, это мелочи. Зато мне не пришлось бы набирать непосредственные операнды для команд LDI из дурацких сдвигов единиц или нулей на какое-то число разрядов, заданное символически, что встречается во много раз чаще, и каждый раз вызывает злобное раздражение.


