Jämföra tal med PIC12F675. ASM.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Jämföra tal med PIC12F675. ASM.

Inlägg av JimmyAndersson »

Inte helt träffande rubrik, men såhär är det:


En PIC12F675 får matningspänningen 3,2V.
Jag vill kolla ifall spänningen på en analog ingång är "nära 1V" (över 0,8V) eller "nära 0V" (under 0,4V).

Ungefär såhär alltså:

Om ADRESL = 255 och ADRESH >= 0 så ska jag skicka ut en 1a på GPIO.2
Om ADRESL <= 127 och ADRESH = 0 så ska jag skicka ut en 0a på GPIO.2

Jag är medveten om "fladdret" som kan bli på AD-omvandlaren. De två raderna ovan är bara för att illustrera.


Tyvärr (i detta fallet) så är det en PIC12F675 som sagt, annars kunde jag ha använt cpfsgt och liknande. Men nu står det stilla. Hur löser man detta? Har redan provat med både datablad och en promenad. :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Med någon av SUB instruktioner och kolla C flaggan (d.v.s om resultatet
av SUB blev < 0).

> Om ADRESL = 255 och ADRESH >= 0 så ska jag skicka ut en 1a på GPIO.2

(ADRESH är *alltid* >= 0, så det behöver inte testas...)

INCFSZ ADRESL, W
GOTO not_255

BSF GPIO, 2

not_255
...
...


> Om ADRESL <= 127 och ADRESH = 0 så ska jag skicka ut en 0a på GPIO.2

MOVLW d'128'
SUBWF ADRESL, W
BTFSS status, C
goto gt_127

MOVF ADRESH, F
BTFSS STATUS, Z
GOTO not_0

BCF GPIO, 2

gt_127
not_0

...
...

Otestat! Du får verifiera själv...
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag brukar göra det så att jag först jämför MSB, detta gör man oftast vid att subtrahera dom från varandra:

W = A - B
Carry-flaggan betyder A < B
Zero flaggan betyder A = B
Ingendera betyder A > B

Om man då kör MSB först och är de olika är det ju inget att fundera på men är de lika får man kolla MSB på samma sätt och då får man svaret.

Alltså först MSB, där använder man antingen '>' eller '<' och sedan är det klart. Om man få 'lika med' får man kolla LSB också och då kan man få '>', '<' och '='.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Tack för tipsen! Mycket lärorikt! :)


(ADRESH är *alltid* >= 0, så det behöver inte testas...)

Sant. Det skulle inte ha varit ett likamed-tecken där. :) :vissla:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, då blir det samma test som i det andra fallet...

Notera att en del av min kod inte är generell, utan bygger
på att du hade t.ex =255 och =0 i dina villkor, det gör
testerna i just *dom* fallen (lite) enklare.
Skriv svar