arm-17 » 22 мар 2014, 15:09
Подскажите, как Сравнить на макс. и мин. значение в двоичном счетчике в самом инкременте декременте счетчика?
Forward:
cbr flags, (1__EventForward);сбросить флаг,обработали событие
;перед adiw надо сделать проверку числа на максимальное значение (0xffff), и если равно макс. значению то пропустить инкремент (adiw)
adiw CountHigh:CountLow,1 ;инкремент 16-ти битного счетчика
Покажите пример на ASM. пожалуйста. Очень надо.
Radist » 23 мар 2014, 21:23
А в чем проблема? Как сравнивать 16 битные пары регистров? Сперва командой CP сравнить младшие, затем командой CPC сравнить старшие, затем переход по условию BRCC, BRCS, BRNE, BREQ.
arm-17 » 25 мар 2014, 09:41
Это все понятно.Вот моя ограничевалка.
;*******************ограничевалка*****************************************
ldi temp1,0x36 ;6
cp temp1,tASCII4
breq equal
rjmp end_int
equal:
ldi temp1,0x35 ;5
cp temp1,tASCII3
breq equal_1
rjmp end_int
equal_1:
ldi temp1,0x35 ;5
cp temp1,tASCII2
breq equal_2
rjmp end_int
equal_2:
ldi temp1,0x33 ;3
cp temp1,cnt16a
breq equal_3
rjmp end_int
equal_3:
ldi temp1,0x35 ;5
cp temp1,tASCII2
breq equal_4
end_int:
ret
;**********************************************************************
Она работает,но мне сказали что,Сравнения на макс. и мин. значение надо делать с двоичным счетчиком получается быстрее.Нужна скорость счета. Напишите пример пожалуйста,а то я что-то ни как не пойму.