
Lite bakgrund:
Jag har en PIC16F688 med en pot ansluten till en analog ingång.
ADC'n är ju 10 bitar, fördelade på två bytes. Jag sparar dessa i pot_lo och pot_hi.
Nu är det så att jag bara behöver ett resultat mellan 0 - 255 när man vrider på poten.
Att bara använda pot_lo eller pot_hi skulle ju resultera i ett lite annorlunda resultat:
(pot_lo : Tja.. den börjar ju om på 0 när man har vridit poten halvvägs.
pot_hi : man får bara nytta av halva poten.)
Min tanke var då att slå ihop pot_lo och pot_hi till ett word
och t.ex dela (shifta åt höger) för att nå till mitt önskade intervall.
Såg förresten att samma sak diskuteras här.
Men mitt problem är helt enkelt att jag inte lyckas få några bitar i den höga delen av mitt word.
Kodexempel:
Kod: Markera allt
test_vars UDATA_SHR
test_word RES 2
sub_rutiner CODE
convert_test
movlw b'00010000' ;En bit som test...
movwf test_word
;Shifta 8 steg åt vänster. (Resultatet ser ni i kolumnen längst till höger.
; Det är kopierat från Watch-fönstret i MPLAB.)
rlf test_word, f ;00000000 00010000
rlf test_word, f ;00000000 00100000
rlf test_word, f ;00000000 01000000
rlf test_word, f ;00000000 10000000
rlf test_word, f ;00000000 00000000
rlf test_word, f ;00000000 00000001
rlf test_word, f ;00000000 00000010
rlf test_word, f ;00000000 00000100
Jag har även testat andra sätt för att överhuvudtaget få in något på de översta (vänstra) bitarna i test_word.
Bl.a genom att helt enkelt lägga till 255 till test_word istället för att shifta. Dvs såhär:
Kod: Markera allt
movlw b'00010000'
movwf test_word
movlw d'255'
addwf test_word, f
Ligger felet i test_word RES 2 ?
Jag har försökt hitta ledtrådar bl.a här men har inte sett något som visar att man ska göra på ett annat sätt.
Nu undrar jag förstås hur jag ska göra istället och det är där ni kommer in i bilden. Upplys mig med kunskap.
