[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Пример определения битов
========================
#define Flag2 r19
defreg Flag2_,19 ; битовые флажки
defbit NewCycle,Flag2_,3 ; 1=очередной цикл
defbit Slave2flag,Flag2_,2 ; 1=в байте Slave2buf есть данные
defbit Slave1flag,Flag2_,1 ; 1=в байте Slave1buf есть данные
defbit Slave0flag,Flag2_,0 ; 1=в байте Slave0buf есть данные
#define StatusSlave r20 ; страницы статуса Slave
defreg StaS_,20 ; флажки в рабочем режиме:
defbit SlaveWork,StaS_,7 ; 1=Slave в рабочем режиме
defbit IncFlag,StaS_,6 ; 1=сделать скорость =номинал+1
defbit DecFlag,StaS_,5 ; 1=сделать скорость =номинал-1
defbit LedLink,StaS_,2 ; 1=горит св/д линии
defbit LedOut,StaS_,1 ; 1=горит св/д передачи данных
defbit LedIn,StaS_,0 ; 1=горит св/д приема данных
#define StatusMaster r21 ; страницы статуса Master
defreg StaM_,21 ; флажки в рабочем режиме
defbit MasterWork,StaM_,7 ; 1=работа; 0=LocalSetup
defbit BufRoll,StaM_,6 ; 1=указат. переходит край
defbit BufControl,StaM_,5 ; 1=управление скоростью от буфера
========================
Пример использования (надергано из разных мест одной программы):
===========================
skip0 SlaveWork ; если Setup
skip1 SpeedControl ; или нет управления скоростью
rjmp ss709 ; <-- ничего не делать
mov tmp,SpeedParam ; проверка изменения флажков
eor tmp,StatusSlave ; IncFlag и DecFlag
andi tmp,bitmask(IncFlag|DecFlag)
breq ss709 ; <-- флажки не изменились
eor SpeedParam,tmp ; новое состояние флажков
ldi tmp,bitmask(SetSpeedFlag)
or SpeedParam,tmp ; признак смены скорости
ss709:
===========================
bst Flag2,bitpos(Slave1flag)
bld Flag2,bitpos(Slave0flag)
mov Slave0buf,Slave1buf
===========================
set1 NewCycle ; признак очередн.цикла
skip0 Combo2off
set1 _enc2
skip1 Combo2off
set0 _enc2
===========================
E-mail: info@telesys.ru