Sida 3 av 6

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 17:53:46
av PopUnoNkoK
Hmmm... jag måste nog dit med en drös med "Global" och "Extern" kommandon.
Det låter väl ganska troligt?

MVH Peter F

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 18:10:08
av sodjan
Jag tror att jag ser vad det är...

Alltså, en ASM fil har en del olika delar. Först kommer en del där
man har lite definitioner (EQU o.s.v), __CONFIG, macron och liknande.
Sedan kommer koden. Det är därför du får meddelande 151 och 152.
Du försöker definiera saker på fel plats.

"152: Executable code and data must be defined in an appropriate section"

Alltså kod måste ligga efter ett CODE direktiv, o.s.v...
Notera att onewire.inc innehåller både definitioner av macron och
kod (subrutiner), alltså kan den inte ligga där du lägger den.

*Jag* skulle dela onewire.inc i två delar, en med allt
under "Dallas Semiconductor 1-Wire MACROS", och en med allt
under "Dallas Semiconductor 1-Wire ROUTINES".

Sen kan man göra det hela snyggare genom att låta Dallas *koden*
separat-asembleras (alltså inte gör include på den alls), men det
kan du ta en anna gång... :-)
Macrona behöver nog includeras som nu.

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 18:13:08
av sodjan
Dessa två filer bygger "rent". De gör inget vettigt just nu, men det
går antagligen att bygga vidare med dom...

Kod: Markera allt

; Huvud-program
;**********************************************************************

    list      p=16F628A           ; list directive to define processor
    #include <p16F628A.inc>       ; processor specific variable definitions
;   #include <onewire.inc>

    errorlevel  -302              ; suppress message 302 from list file

    __CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.

	extern	OW_RESET ;definieras i Dallas filen...
	extern	DSRXBYTE ;definieras i Dallas filen...
	extern	DSTXBYTE ;definieras i Dallas filen...
	global	IOBYTE

;***** VARIABLE DEFINITIONS (examples)

My_VAR        UDATA_SHR 
IOBYTE            RES 1

; example of using Shared Uninitialized Data Section
INT_VAR        UDATA_SHR     
w_temp         RES     1        ; variable used for context saving
status_temp    RES     1        ; variable used for context saving


;**********************************************************************
RESET_VECTOR    CODE   0x0000     ; processor reset vector
        goto    START             ; go to beginning of program
   
INT_VECTOR    CODE    0x0004      ; interrupt vector location

INTERRUPT

        movwf   w_temp            ; save off current W register contents
        movf    STATUS,w          ; move status register into W register
        movwf   status_temp       ; save off contents of STATUS register


; isr code can go here or be located as a call subroutine elsewhere


        movf    status_temp,w     ; retrieve copy of STATUS register
        movwf   STATUS            ; restore pre-isr STATUS register contents
        swapf   w_temp,f
        swapf   w_temp,w          ; restore pre-isr W register contents
        retfie                    ; return from interrupt

MAIN_PROG     CODE

START

		call ow_reset

; remaining code goes here

        goto     $                ; loop forever

; initialize eeprom locations

EE        CODE    0x2100
        DE    0x00, 0x01, 0x02, 0x03

        END                       ; directive 'end of program'

Kod: Markera allt

; *******************************************************
;
; Dallas 1-Wire Support for PIC16F628
;
; Processor has 4MHz clock and 1µs per instruction cycle.
;
; *******************************************************
    #include <p16F628A.inc>   

	global	OW_RESET
	global	DSRXBYTE
	global	DSTXBYTE
	extern	IOBYTE


DQ		EQU 1

My_VAR        UDATA_SHR 
TMP0            RES 1
PDBYTE			RES 1
COUNT			RES 1

; Använder PORT A
; *******************************************************
; Dallas Semiconductor 1-Wire MACROS
; *******************************************************
OW_HIZ:MACRO
      BSF           STATUS,RP0                  ; Select Bank 1 of data memory
      BSF           TRISA, DQ                   ; Make DQ pin High Z
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory

      ENDM
; --------------------------------------------------------
OW_LO:MACRO
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory
      BCF           PORTA, DQ                   ; Clear the DQ bit
      BSF           STATUS,RP0                  ; Select Bank 1 of data memory
      BCF           TRISA, DQ                   ; Make DQ pin an output
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory
      ENDM
; --------------------------------------------------------
WAIT:MACRO TIME
;Delay for TIME µs.
;Variable time must be in multiples of 5µs.
      MOVLW         (TIME/5)-1                  ;1µs
      MOVWF         TMP0                        ;1µs
      CALL          WAIT5U                      ;2µs
      ENDM

; *******************************************************
;       Dallas Semiconductor 1-Wire ROUTINES
; *******************************************************

onewire_code code 

WAIT5U:
;This takes 5µS to complete
      NOP                                       ;1µs
      NOP                                       ;1µs
      DECFSZ        TMP0,F                      ;1µs or 2µs
      GOTO          WAIT5U                      ;2µs
      RETLW 0                                   ;2µs
; --------------------------------------------------------
OW_RESET:
      OW_HIZ                                    ; Start with the line high
      CLRF PDBYTE                               ; Clear the PD byte
      OW_LO
      WAIT          .500                        ; Drive Low for 500µs
      OW_HIZ
      WAIT          .70                         ; Release line and wait 70µs for PD Pulse
      BTFSS         PORTA,DQ                    ; Read for a PD Pulse
      INCF          PDBYTE,F                    ; Set PDBYTE to 1 if get a PD Pulse
      WAIT          .400                        ; Wait 400µs after PD Pulse
      RETLW 0
; --------------------------------------------------------
DSRXBYTE: ; Byte read is stored in IOBYTE
      MOVLW         .8
      MOVWF         COUNT                       ; Set COUNT equal to 8 to count the bits
DSRXLP:
      OW_LO
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP                                       ; Bring DQ low for 6µs
      OW_HIZ
      NOP
      NOP
      NOP
      NOP                                       ; Change to HiZ and Wait 4µs
      MOVF          PORTA,W                     ; Read DQ
      ANDLW         1<<DQ                       ; Mask off the DQ bit
      ADDLW         .255                        ; C=1 if DQ=1: C=0 if DQ=0
      RRF           IOBYTE,F                    ; Shift C into IOBYTE
      WAIT          .50                         ; Wait 50µs to end of time slot
      DECFSZ        COUNT,F                     ; Decrement the bit counter
      GOTO          DSRXLP
      RETLW         0
; --------------------------------------------------------
DSTXBYTE:                                       ; Byte to send starts in W
      MOVWF         IOBYTE                      ; We send it from IOBYTE
      MOVLW         .8
      MOVWF         COUNT                       ; Set COUNT equal to 8 to count the bits
DSTXLP:
      OW_LO
      NOP
      NOP
      NOP                                       ; Drive the line low for 3µs
      RRF           IOBYTE,F
      BSF           STATUS,RP0                  ; Select Bank 1 of data memory
      BTFSC         STATUS,C                    ; Check the LSB of IOBYTE for 1 or 0
      BSF           TRISA,DQ                    ; HiZ the line  if LSB is 1
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory
      WAIT          .60                         ; Continue driving line for 60µs
      OW_HIZ                                    ; Release the line for pullup
      NOP
      NOP                                       ; Recovery time of 2µs
      DECFSZ        COUNT,F                     ; Decrement the bit counter
      GOTO          DSTXLP
      RETLW         0
; --------------------------------------------------------

	end

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 18:31:58
av PopUnoNkoK
Nu kom svärmor på besök så jag kan inte testa just nu...
Men tuuuusen tack, hoppas att du har löst det, ska titta på det senare. Är riktigt sugen på att komma igång att använda 1-wire sensorer.

Håller en tumme att det fungerar.

Återkommer med rapport om hur det gått.

MVH Peter F

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 20:45:58
av PopUnoNkoK
Tusen tack Sodjan...

Ngick det mycket bättre. Jag kopierade stycket där du gör definitionerna i ditt exempel och la in i mitt kodexempel och detta resulterade i att majoriteten av alla error meddelandena försvann.
Jag hade alltså glömt Extern och Global kommandona OCH jag tror att jag även glömt "INT_VAR UDATA_SHR " raden.

Tack för hjälpen med det problemet.

Tyvärr får jag dock ett nytt errormeddelande och ett nytt meddelande.

Kod: Markera allt

Message[310] C:\MICROCHIP\MPASM SUITE\P16F628A.INC 490 : Superseding current maximum RAM and RAM map.
Och 
Error - could not find definition of symbol 'IOBYTE' in file './onewiretesto.o'.
Det är alltså i Object filen som den får error angående IOBYTE, varför får den inte det redan i ASM filen då? Innan den genererat Objectfilen?

As usual, all input are welcome. :)

MVH Peter F


Från "onewiretesto.asm"

Kod: Markera allt

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.
   extern   OW_RESET ;definieras i Dallas filen...
   extern   DSRXBYTE ;definieras i Dallas filen...
   extern   DSTXBYTE ;definieras i Dallas filen...
   global   IOBYTE

;***** VARIABLE DEFINITIONS (examples)


; example of using Shared Uninitialized Data Section
INT_VAR        UDATA_SHR     
w_temp         RES     1        ; variable used for context saving 
status_temp    RES     1        ; variable used for context saving
IOBYTE         RES 	   1

Från "onewire.inc" filen.

Kod: Markera allt

   global   OW_RESET
   global   DSRXBYTE
   global   DSTXBYTE
   ;global   IOBYTE
   extern   IOBYTE


DQ      EQU 1

My_VAR        UDATA_SHR
TMP0            RES 1
PDBYTE         RES 1
COUNT         RES 1

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 21:38:39
av bearing
"Superseding current maximum RAM and RAM map" borde ju betyda att RAM är fyllt, för många variabler definierade.

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 21:44:43
av PopUnoNkoK
Jo så kan det förståss vara. Men det känns inte som om det är så många.
Det är precis en sådan sak som jag inte satt mig in i än för jag har helatiden tänkt att jag gör så små saker än.
Jag tycker också att det är underligt att det bara är ett "Message" alltså inte ett "Error". Jag tycker att den borde sparka bakut mer om det jag verkligen överskridit PICens utrymme.

Får kolla på det dock.

MVH Peter F

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 21:51:15
av bearing
Nu gissar jag mest.

Prova att skapa ett projekt av sodjans filer. Kolla sedan hur mycket RAM som används, det finns nämligen en funktion (som jag tror hör till simulatorn) för det. Det är som en rund analog mätare, eller ett cirkeldiagram, har jag för mig. Om det projektet är nära max är det kanske troligt att ditt är över max.

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 22:34:38
av sodjan
> Jag hade alltså glömt Extern och Global kommandona...

Nja, glömt och glömt... :-)

Så som *du* hade gjort (d.v.s med #include av 1wire-filen) så är det ju bara *en*
ASM fil som assembleras och det blir bara *en* objekt (O) fil, och då behövs
inte extern/global. Det var andra fel som skulle ha kunnat fixas, men inte med
just extern/global... :-)

I *mitt* exempel så gör jag inte #include utan jag (lite över-pedagogiskt kanske)
ville visa hur man kan köra med separat-assemblerade filer som sedan "länkas"
ihop av MPLINK. Det blir alltså *två* O filer och då måste man ha extern/global
ifall den ena O filen använder en symbol (extern) som definieras i den andra (global).

Sen, angående Max RAM, så gissar jag att du överskrider vad som finns tillgängligt
som "shared RAM", alltså 16 byte på en 628A. Om det är så att du har fler variabler
än 16 byte så behöver du läsa på lite om RES och allokering av variabler. Skillnaden
mellan UDATA och UDATA_SHR o.s.v.

Att du får "could not find definition of symbol 'IOBYTE' in file" gissar jag beror på att
det är just IOBYTE som inte kan definieras. Hur det är med det kan du se i MAP
filen, vilket är en jäkla bra fil att bekanta sig med ändå. MAP filen gar mycket information
om hur mycket program och data minne man använder, storleken på olika code-segment,
hur de olika variablerna har allokerats o.s.v.

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 22:51:28
av PopUnoNkoK
Oj nu blev det mycket att tänka på. Jag försöker att strukturera med siffror, hänvisa gärna till dem när/om ni svarar.


Frågeställning 1
Använder dock bara 6 Bytes:

Från koden här över:

Kod: Markera allt

------------- asm filen-----------------
INT_VAR        UDATA_SHR     
w_temp         RES     1        ; variable used for context saving 
status_temp    RES     1        ; variable used for context saving
IOBYTE         RES 	   1

------------- inc filen ------------------
My_VAR        UDATA_SHR
TMP0            RES 1
PDBYTE         RES 1
COUNT         RES 1
Frågeställning 2
Ahaaa, så ditt exempel Sodjan var alltså inte en ASM fil och en INC fil utan två ASM filer. Jag ser nu att du satt ett ";" före include kommandot, det var svårt att upptäcka när det inte blir grönt här inanför code taggarna som det blir i MPLAB.
Är det rätt att du hade två ASM filer?

Frågeställning 3
Menar du filen som heter som mitt projekt och med ändelsen .map?

Detta är hela den filen:

Kod: Markera allt

MPLINK 4.30.01, Linker
Linker Error Map File - Created Tue May 12 22:40:06 2009

*Warning* - This is only a partial map file due to a link time error.
   Only sections which were allocated prior to the error are shown below.

CODEPAGES:
    Memory      Start        End              Section    Address Size(Bytes)
 ---------  ---------  ---------            ---------  ---------  ---------
      page     0x0000     0x07ff                                           
   .idlocs     0x2000     0x2003                                           
.device_id     0x2006     0x2006                                           
   .config     0x2007     0x2007                                           
    eedata     0x2100     0x217f                                           

SHAREBANKS:
    Memory      Start        End              Section    Address Size(Bytes)
 ---------  ---------  ---------            ---------  ---------  ---------
 gprnobnk0     0x0070     0x007e                                           
 gprnobnk0     0x00f0     0x00fe                                           
 gprnobnk0     0x0170     0x017e                                           
 gprnobnk0     0x01f0     0x01fe                                           
 gprnobnk1     0x007f     0x007f                                           
 gprnobnk1     0x00ff     0x00ff                                           
 gprnobnk1     0x017f     0x017f                                           

DATABANKS:
    Memory      Start        End              Section    Address Size(Bytes)
 ---------  ---------  ---------            ---------  ---------  ---------
      sfr0     0x0000     0x001f                                           
      sfr1     0x0080     0x009f                                           
      sfr2     0x0100     0x010b                                           
      sfr3     0x0180     0x018f                                           
      gpr0     0x0020     0x006f                                           
      gpr1     0x00a0     0x00ef                                           
      gpr2     0x0120     0x014f                                           
   testreg     0x01ff     0x01ff                                           

ACCESSBANKS:

Som det serut i första och andra stycket så har den (MPLAB linkern?) slutat efter att den stött på ett error. Har jag fattat det rätt. Jag ska läsa lite i ELMER 160, har för mig att jag såg något om MAP filen där i kapittlet om Relocatable mode. Stod i alla fall definitivt en del om UDATA och UDATA_SHR som Sodjan tyckte att jag skulle läsa.

MVH Peter F

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 23:04:24
av sodjan
> Använder dock bara 6 Bytes:

OK, då är det inte det. Jag skulle först prova med att flytta definitionerna av
macrona i 1wire filen *före* RES direktiven. Det kan vara så att UDATA-prylarna
krockar på något sätt med macro definitionerna som kommer efteråt nu...

> Är det rätt att du hade två ASM filer?

Ja, men det hade du också (men kallade en för .INC).

Alltså, #include gör att all text/kod från den "andra" filen kopieras in där
#include står *innan* MPASM assemblerar koden. Alltså, MPASM upplever
det hela som att det bara finns en ASM fil.

I mitt fall körs varje ASM fil separat till en egen O fil som sedan MPLINK
"länkar" ihop till en HEX fil. Som jag tror att jag sa tidigare, MPASM/MPLINK
manualen har bra beskrivninar och bilder som visar det hela.

> Menar du filen som heter som mitt projekt och med ändelsen .map?

Ja. Men som du säger så har det gått så fel så den ser lite konstig ut.
Vi/du måste fixa filen först. Börja med att flytta UDATA sektionen så att
den ligger mellan macro-definitionerna och CODE sektionen...

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 23:27:59
av PopUnoNkoK
>> Jag skulle först prova med att flytta definitionerna av macrona i 1wire filen *före* RES direktiven.

Testat det nu och det blev tyvärr ingen skillnad. :?

Blev heller ingen skillnad när jag tog bort hela MACRO sektionen och satte ";" före alla rader som anropar de borttagna macrona. Fick precis samma felmeddelande, meddelandet om "Superseding current maximum RAM and RAM" och "Error - could not find definition of symbol 'IOBYTE' in file './onewiretesto.o'."

-------------------
|| Eureka!! ||
-------------------

Medan jag skrev detta meddelande så satt jag och testade lite. Bland annat så döpte jag om min onewire.inc till onewire.asm, tog bort onewire.inc i "project" och la till "onewire.asm".

BUILD ALL -> BUILD CLEAN!

Jag kan inte säga att jag förstår exakt vad det är för skillnad osv men är glad att det fungerar.
Kommer att sova gott inatt med vetskapen att det fixade sig. :)

Tack för al hjälp.

Jag kan dock tänka mig att jag imorgon kommer att ha nya frågor angående 1-Wire kommunikation med en tempsensor. Framförallt det unika idnummret, kommer att ha tre sensorer, känner jag att jag inte har fått koll på.
Men men, får börja med en och se om man kan komma igång.

Än en gång tusen tack för all hjälp.

MVH Peter F

Re: Ytterligare en HD44780 tråd.....

Postat: 12 maj 2009, 23:59:30
av sodjan
Aha, OK. Jag hade båda filerna som .ASM, glömde att påminna om det...

MPLAB kollar på filtyperna och bestämmer utifrån det vad som ska göras.

En ASM fil assembleras med MPASM, en C fil kommer att kompileras med
den C-kompilator som är installerad/vald o.s.v. Sedan länkar MPLINK
ihop alla O filer oavsett om de var ASM eller C från början. INC är nog
ingen filtyp som byggs separat, det förväntas att man gör #include
på den (och då behövs den inte anges separat i projektet heller).

Re: Ytterligare en HD44780 tråd.....

Postat: 13 maj 2009, 22:47:55
av PopUnoNkoK
Ja då har jag suttit större delen av dagen och försökt att förstå 1-wire komunikationen med temp sensorn men det går inte riktigt som jag vill.

Alltså. Som tråden tidigare visar har jag till sist lyckats att få en kod som "bygger rent" med två asm filer där den ena är 1-wire General Macros och General Rutines. Jag har sedan det förra inlägget utökat huvudkoden så att jag nu kan skriva till en HD44780 display. Nu är mitt problem alltså att använda dessa Macron och rutiner på rätt sätt för att visa tempen på displayen.
Jag ska försöka specificera vad som är oklart.

På denna sida http://www.maxim-ic.com/appnotes.cfm/an_pk/2420 där de generella Macrona och rutinerna kommer finns det även ett kodexempel som ska vara komplett för att prata med någon typ av Lipo-monitor. Denna kod använder de macron som jag har i min fil.

I huvudkoden på det exemplet så står det så här.

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          NOPDPULSE
      MOVLW         SKPROM
      CALL          DSTXBYTE                    ; Send Skip ROM Command (0xCC)
      MOVLW         0x69
      CALL          DSTXBYTE                    ; Send Read Data Command (0x69)
      MOVLW         0x0E
      CALL          DSTXBYTE                    ; Send the DS2761 Current Register MSB address (0x0E)
      CALL          DSRXBYTE                    ; Read the DS2761 Current Register MSB
      MOVF          IOBYTE,W
      MOVWF         PICMSB                      ; Put the Current MSB into file PICMSB
      CALL          DSRXBYTE                    ; Read the DS2761 Current Register LSB
      MOVF          IOBYTE,W
      MOVWF         PICLSB                      ; Put the Current LSB into file PICLSB
      CALL          OW_RESET

NOPDPULSE:                                      ; Add some error processing here!
      SLEEP                                     ; Put PIC to sleep
;---------------------------------------------------------
      end
Här används alltså macrona för att prata med 1-wire slaven. Det är dock en del som jag inte får klämpå.
NUmmer ett, vad är de olika talen som de skickar. Alltså den som motsvarar SKIP ROM (SKPROM) har jag lite koll på (Anropa alla slavar på linan) men de som är i siffror vet jag inte vad de gör.

Tempsensorn jag har DS18S20+ skickar, som jag har förstått det, tillbaka en Byte. Alltså behövs inte två register med Mest - Minst viktiga bitar. Min fråga är vart hamnar informationen när jag väl fått igång kommunikationen. Är det i IOBYTE?

Sista och den mest diffusa fråga, hur 17gubbar fungerar SearchRom/MatchRom. Jag kan inte ställa den nå mycket mer tydlig än så tyvärr. Exempel på saker som snurrar i huvudet. Behöver jag 8 olika register (64bits) för att ha idnummret till varje slav på linan? :shock: (Jag är ganska säker på att så inte är fallet men jag kan inte se hur jag annars ska kunna hålla koll på 64bitars idnummer)

Det är tre dokument som jag har försökt läsa:
http://www.maxim-ic.com/appnotes.cfm/an_pk/2420 Maxim guide för 1-wire tillsammans med en pic
http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf Databladet för Tempsensorn.
http://www.newark.thinkhost.com/brands/ ... 01199a.pdf MicrochipGuide för 1-wire tilsammans med Pic.

Jag är alldeles övertygad om att svaret på alla mina frågor finns i dessa tre dokument men jag får inte kläm på det.

Som vanligt: Tacksam för alla hjälp jag kan få.

MVH Peter F

Än en gång så har jag alltså kommit med ett gäng diffusa frågor, tyvärr.

Re: Ytterligare en HD44780 tråd.....

Postat: 13 maj 2009, 23:25:08
av sodjan
Ja, 1-Wire kommunikation är ju ett helt eget kapitel så att säga. :-)
Ganska komplext innan man har passerat ett par aha-upplevelser.

> Alltså den som motsvarar SKIP ROM (SKPROM) har jag lite koll på (Anropa alla slavar på linan)
> men de som är i siffror vet jag inte vad de gör.

Du menar alltså "SKPROM", "0x69" och "0x0E" ?
För det första så är ju SKPROM bara en symbol som definieras med "constant SKPROM=0xCC"
så just det skulle även kunna ha skrivits "MOVLW 0xCC". Det var lite oklart om
det var just det som du hakade upp dig på (generellt kan du vara lite tydligare
på vad som är oklart så blir det inte så mycket gissningar). Man skulle ju även
kunna ha "constant" definitioner för "0x69" och "0x0E" om man tycker att koden
blir tydligare så (vilket jag kan tycka).

Vad du olika kommandona gör framgår (och beror på) det aktuella databladet
för just den 1-wire pryl som de kör mot i exemplet (en DS2761). Om du använder
något annat, t.ex en DS18S20, så får du kolla vad *det* databladet säger.

> Tempsensorn jag har DS18S20+ skickar, som jag har förstått det, tillbaka en Byte...

Jag hade för mig att det var ett 12-bitars värde eller liknande. Vad säger databladet ?
Jag kollade och det är alltså 2 byte varav 8 bitar är ett värde och de andra "sign"...

Jag har aldrig kört någon 1-wire pryl, men databladet för DS18S20 är ju väldigt
tydligt på vilka sekvenser som ska köras. T.ex "DS18S20 OPERATION EXAMPLE 3"
på sidan 19 verkar vara nästan eakt det du vill göra.

> Alltså behövs inte två register med Mest - Minst viktiga bitar.

Som jag har förstått det så läser man alltid hela "Scratchpad" från DS18S20
plus en extra CRC (kontrollsumma), totalt 9 bytes. Alltså (som jag förstår det)
så får DSRXBYTE anropas 9 gånger och IOBYTE får sparas undan i en egen
kopia av Scratchpad efter varje anrop. Allokeras t.ex med "Scrachpad RES 9".
Sen kan man bara anropa DSRXBYTE och lägga under IOBYTE efter hand :

CALL DSRXBYTE
MOVW IOBYTE, W
MOVWF Scratchpad
CALL DSRXBYTE
MOVW IOBYTE, W
MOVWF Scratchpad + 1
CALL DSRXBYTE
MOVW IOBYTE, W
MOVWF Scratchpad +2
...
...
CALL DSRXBYTE
MOVW IOBYTE, W
MOVWF Scratchpad + 9

eller något i den stilen...
Först måste man naturligstvuis göra anropen för "Convert T",
"Skip ROM" och "Read Scratchpad", så klart...

Och, ja addresen är 64-bitar, men om man bara har en 1-wire enhet
så kan man hoppas över det just "Skip ROM". Om man har 2 eller fler
enheter så måste man använda "Match ROM" (tillsammans med en
64-bitars adress) för att "peka ut" en av dom.