PIC, hur tänka för att kontrollera om ett AD-värde över x

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
MrIzoard
Inlägg: 339
Blev medlem: 25 september 2011, 15:33:08
Ort: Göteborg

PIC, hur tänka för att kontrollera om ett AD-värde över x

Inlägg av MrIzoard »

Hejsan!

Det är assembler som gäller för nedanstående.

Jag har läst in ett 10-bitars AD-värde och har det i två variabler (hög och låg).
Hur gör man smidigast för att kontrollera om det är över x?
I den applikation som jag skall göra så är det inte extremt noga på värdet så vi säger att x = 31 i detta fall.

Min tanke är att jag roterar höger 5 gånger och sedan kör jag någon instruktion som uppdaterar statusregistret och så kontrollerar jag zero-biten.

Är det en bra lösning eller har ni några bättre/snyggare lösningar?

M.v.h.
Ulf L.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: PIC, hur tänka för att kontrollera om ett AD-värde över

Inlägg av Icecap »

Subtraherar talen och kolla Carry.
Användarvisningsbild
YD1150
Inlägg: 1974
Blev medlem: 29 oktober 2010, 22:41:10

Re: PIC, hur tänka för att kontrollera om ett AD-värde över

Inlägg av YD1150 »

Fungerar nog med XOR också.
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Re: PIC, hur tänka för att kontrollera om ett AD-värde över

Inlägg av Kaggen »

Som dom säger ovan. Om vi antar att du högerjusterar AD resultatet och bara använder nedre 8-bitar funkar nedanstående kod:

Kod: Markera allt

movf  ADRESH,W    ; Hämta hög byte av AD resultat. Z-flaggan sätts om W laddas med 0 från ADRESH
btfss STATUS,Z    ; Om Z=1 är ADRESH = 0, så skippa nästa instruktion
goto  AD_TOO_BIG  ; AD > 255 så ingen idé att kolla låg byte.
movf  ADRESL,W    ; Hämta resultat från AD (nedre byte)
sublw .31          ; Subtrahera AD från X (31)
btfss STATUS,C    ; Kolla C flaggan, skippa nästa instruktion om C=1, Om C=1 så är AD <= X (31)
goto AD_TOO_BIG   ; Om denna rad exekveras är AD > X

; Om du kommer hit är AD <= X
...

AD_TOO_BIG
; Om du kommer hit är AD > X. Gör vad du nu skall göra i så fall.
...
Observera att denna kod enbart kollar nedre 8 bitarna. Skulle du välja att sätta X > 255 kommer ovanstående inte att funka.

DISCLAMER: Har ej testat koden!!!
void
Inlägg: 119
Blev medlem: 8 juli 2007, 11:06:50
Ort: Enköping

Re: PIC, hur tänka för att kontrollera om ett AD-värde över

Inlägg av void »

Hej,

http://www.gooligum.com.au/tutorials/ finns flera trevliga tutorials.

Exempel 3 på sidan 10 i http://www.gooligum.com.au/tutorials/ba ... e_A_10.pdf finns ett exempel med kontroll av gränsvärde från ADC.
MrIzoard
Inlägg: 339
Blev medlem: 25 september 2011, 15:33:08
Ort: Göteborg

Re: PIC, hur tänka för att kontrollera om ett AD-värde över

Inlägg av MrIzoard »

tack och bock för alla svar!

//Ulf L.
Skriv svar