V-G: Först en direkt fråga. Räcker det med en SkipRom?
Så här ser min kod ut idag. Om man bara läser kommentarerna så är det en typ av Pseudo kod.
Kod: Markera allt
GET_TEMP
CALL OW_RESET ; Send Reset Pulse and read for Presence Detect Pulse
BTFSS PDBYTE,0 ; 1 = Presence Detect Detected
GOTO START
MOVLW SKPROM
CALL DSTXBYTE ; Send Skip ROM Command (0xCC)
MOVLW 0x44
CALL DSTXBYTE ; Send convert T
CALL delay_1s
CALL OW_RESET ; Send Reset Pulse and read for Presence Detect Pulse
BTFSS PDBYTE,0 ; 1 = Presence Detect Detected
GOTO START
MOVLW SKPROM
CALL DSTXBYTE ; Send Skip ROM Command (0xCC)
MOVLW 0xBE
CALL DSTXBYTE ; Send Read Scrachpad
CALL DSRXBYTE ; Readscrachpad
movfw IOBYTE
movwf temp_least
Räcker det med att fortsätta att bara köra "Call DSRXBYTE", alltså read scrachpad, eller måste jag skicka både "DSTXBYTE & DSRXBYTE"? Eller är det rent så att jag måste använda de tre sista kommandona, alltså "Skiprom, DSTXBYTE & DSRXBYTE"?
Jag vet att jag även måste spara undan IOBYTEN i olika register under tiden. Ska testa att ge mig på "Scrachpad RES 9" som diskuterats tidigare i tråden.
Med koden här ovanför fungerar termometern perfekt förutom att den inte skulle fungera i minusgrader eftersom jag inte tar rätt på den andra byten.
Då jag fick till koden så att den visade tempen i klartext så gjorde jag så att jag har en loop som lägger till 5 i ett register och tar bort ett från temp_least för varje Cykel. Detta gör att jag har ett värde (två register) som är temperaturen ggr tio. Sedan sätter jag bara en punkt på rätt ställe. När jag skrev den koden i torsdags så kände jag inte till instruktionen Rotateright, har dock läst massor i helgen och lärt mig och den, även testat lite kod.
Hursom helst, så var det nog lika bra att jag inte kunde den för då fick jag lära mig att använda två register till ett värde. Första gången jag gjorde det. Så här ser min loop ut ifall någon är intresserad.
Kod: Markera allt
temperatur_loop ;Denna loop ger Temperaturen gånger 10
bcf STATUS, C
banksel L_byte
movlw .5 ;5an pga att varje steg från sensorn motsvarar 0.5 grader
addwf L_byte ;Lägger till den låga Byten
btfsc STATUS, C
incf H_byte ;När Låga Byten är 255 lägger vi till en i den höga byten
decfsz temp_least ;Räkna ner från Temperatur värdet, Temp_least motsvarar Byte0 i ScrachPad
goto temperatur_loop
nop
Har skrivit koden från Scrach så jag kan tänka mig att den inte är "Vacker".
MVH Peter F
EDIT: La till "Har skrivit koden från Scrach så jag kan tänka mig att den inte är "Vacker"."