[an error occurred while processing this directive] [an error occurred while processing this directive]
Если используешь ИАРовсий ассемблер (он, кстати, официально бесплатный), можно использовать макросы (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Boris Barbaris 24 октября 2001 г. 15:09
В ответ на: Уважаемые специалисты по ассемблеру если такие еще остались не перейдя на С отправлено Castle 24 октября 2001 г. 13:01

Пример определения битов
========================
#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