leon_ (28.02.2011 22:44 - 23:20, просмотров: 225) ответил mazur на Есть битовое поле. Скажем, 24 бита, то есть, 3 байта. И нужно проверить определенный бит. Когда писал проверочный код, это получилось 24 функции, которые отличались только номерами битов. Попытался возложить эту функцию микроконтроллеру.
Может быть, что-то такое? Если подходит, можно оформить подпрограммой.
.set IN_VALUE = 0x810002
.set TEST_VALUE = 0x010400 ; Хотя бы один бит из указаных == 1
ldi R16, low(IN_VALUE)
ldi R17, byte2(IN_VALUE)
ldi R18, byte3(IN_VALUE)
ldi R31, low(TEST_VALUE)
andi R31, R16
ldi R30, byte2(IN_VALUE)
andi R30, R17
or R31, R30
ldi R30, byte3(IN_VALUE)
andi R30, R18
or R31, R30
breq LABEL1
; Среди указаных позиций есть хотябы одна в состоянии 1
;.......................
rjmp LABEL2
LABEL1:
; Среди указаных позиций нет в состоянии 1
;.......................
LABEL2:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Или так
ldi R16, low(IN_VALUE)
ldi R17, byte2(IN_VALUE)
ldi R18, byte3(IN_VALUE)
ldi R31, low(TEST_VALUE)
andi R31, R16
brne LABEL1
ldi R31, byte2(IN_VALUE)
andi R31, R17
brne LABEL1
ldi R31, byte3(IN_VALUE)
andi R31, R18
brne LABEL1
; Среди указаных позиций нет в состоянии 1
;.......................
rjmp LABEL2
LABEL1:
; Среди указаных позиций есть хотябы одна в состоянии 1
;.......................
LABEL2: