|
From: Arlet Ottens on 7 May 2008 01:01 Mike Warren wrote: > Can someone please offer a suggestion for a way to check if a value > has changed up or down by at least some threshold. It doesn't matter > how long it takes but code size and register use are important. > > I'm not sure how to handle values lower than ChangeThreshold or > higher then 255 - ChangeThreshold. > > .equ ChangeThreshold = 6 > .def OldValue = R16 > .def NewValue = R17 > > Available registers R10, R11, R12, R13, R19, R24 > > CheckForChange: > ; Determine if NewValue > OldValue + ChangeThreshold > ; or NewValue < OldValue - ChangeThreshold > rjmp HasChanged how about this: sub r17, r16 ; diff = new - old brcc new_bigger ; neg r17 ; if (new < old) diff = old - new new_bigger: cpi r17, 6 ; if (diff >= 6 ) brsh HasChanged ; has changed
From: Mike Warren on 7 May 2008 01:29 Arlet Ottens wrote: > how about this: > > sub r17, r16 ; diff = new - old > brcc new_bigger ; > neg r17 ; if (new < old) diff = old - new > new_bigger: > cpi r17, 6 ; if (diff >= 6 ) > brsh HasChanged ; has changed That looks great. Thank you. -- -Mike
|
Pages: 1 Prev: PMOS in parallel with NMOS Next: Auto Mirror Manufacturer |