Ytterligare en HD44780 tråd.....

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Symbol not previously defined (DQ)

Har du läst sidan som du länkade till ?
Also, the following code assumes that a constant DQ has been configured
in the assembly code to indicate which bit in PORTB will be the 1-Wire pin.
Throughout the code, this bit number is simply called DQ.
Du måste ha med en "DQ EQU 1" (eller vilken pinne du nu vill ha 1-Wire prylen på).

> DQ har jag tex definerat i min huvudkod

Hur då !?

> Sedan är det över hundra: "Overwriting previous address contents (0053)" Meddelanden.

Ja, det var ju bra att du inte tog med alla 100, men 2-3 st hade varit intressant,
inklusive raderna där det inträffar.

PDBYTE och TMP0 är två register som du får definiera/allokera själv.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Jopp, jag har läst sidan som jag länkade till, det var just därför som jag definierade DQ.

Så här har jag definierat DQ:

Kod: Markera allt

    #define     DQ     	 	PORTA, 3
Detta är de 4 första error meddelandena av denna typ.

Kod: Markera allt

Error[118]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\LCD.ASM 92 : Overwriting previous address contents (0000)
Error[118]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\LCD.ASM 92 : Overwriting previous address contents (0000)
Error[118]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\LCD.ASM 96 : Overwriting previous address contents (0004)
Error[118]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\LCD.ASM 96 : Overwriting previous address contents (0004)
Och koden där dessa rader är:

Kod: Markera allt

	ORG     0x000             ; processor reset vector
	goto    main              ; go to beginning of program     <----------- rad 92
	

	ORG     0x004             ; interrupt vector location
	movwf   w_temp            ; save off current W register contents             <----------- rad 96
	movf	STATUS,w          ; move status register into W register
Jag såg nu att detta var i min LCD kod som det inte varit problem med förut. Detta får mig att tro att Inc filen lägger beslag på denna adress innan LCD koden skriver till den.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Så här har jag definierat DQ:
> Kod: #define DQ PORTA, 3

OK. Så DQ = "PORTA, 3". Fine.

Kolla sedan en gång till på någon av raderna där du får fel, t.ex
" BSF TRISB, DQ ". Byt ut "DQ" mot din definition, vad får du då ?
Och är det ett giltigt format för en instruktion ?? Nej, det är det inte.

Läs på lite om (t.ex) BSF så ser du hur DQ ska vara definierat. Och
förresten så hade jag det med i ett tidigare inlägg...

Om du vill göra så som du har tänkt så får du ändra till "BSF DQ".
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Defenitionen av DQ hade du förståss rätt som vanligt. Jag


Här är översta delen av felmeddelandena, dock bara ett message men jag är nyfiken i alla fall. Alltså den säger att jag står i fel bank trots att macrot börjar och slutar med bankbyte OCH trots att jag aldrig anropat macrot än så den vet absolut inte i vilken bank jag står när jag ropar på macrot. Dessutom så får jag felemddelande om rad 15 flera ggr. Jag tog med 2 ggr från Output fönstret som ni ser här under.

Kod: Markera allt

Message[302] LCD\ONEWIRE.INC 15 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] LCD\ONEWIRE.INC 24 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] LCD\ONEWIRE.INC 15 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Här är koden där rad 15 förekommer:

Kod: Markera allt

OW_HIZ:MACRO
      BSF           STATUS,RP0                  ; Select Bank 1 of data memory
      BSF           TRISA, DQ                   ; Make DQ pin High Z          <----------------- rad 15
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory

      ENDM
Någon som har nåt tips på hur man ska förshålla sig till detta?


Sedan kommer jag till mina Error meddelanden. 2st av varje.

Kod: Markera allt

Error[118]   LCD.ASM 96 : Overwriting previous address contents (0000)
Error[118]   LCD.ASM 96 : Overwriting previous address contents (0000)
Error[118]   LCD.ASM 100 : Overwriting previous address contents (0004)
Error[118]   LCD.ASM 100 : Overwriting previous address contents (0004)
Error[118]   LCD.ASM 101 : Overwriting previous address contents (0005)

Kod: Markera allt

	ORG     0x000             ; processor reset vector
	goto    main              ; go to beginning of program     <--------- rad 96
	

	ORG     0x004             ; interrupt vector location
	movwf   w_temp            ; save off current W register contents  <---------- rad 100
	movf	STATUS,w          ; move status register into W register
	movwf	status_temp       ; save off contents of STATUS register
Här har jag verkligen ingen aning om vad som är fel, skippar jag 1-wire inc filen så kommer detta inte upp. Några tips?

Tack Sodjan för hjälpen och även för ditt kodexempel till LCD displayen.

MVH Peter F
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Alltså den säger att jag står i fel bank trots att...

Nja, den säger att det register du jobbar med inte ligger i bank 0 och
påminner bara om att bankerna måste vara rätt satta. Den har dock ingen
som helst aning om hurvida bankerna *är* rätt satta eller inte. Många
undertrycker just detta meddelande eftersom de ofta blir så många...
Se "4.29 errorlevel..." i MPASM manualen.

> goto main

Jag kan inte hitta "main" i de delar som du har postat.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Main kommer ett par rader längre ner, efter ISR rutinen. (Som inte gör något just nu).

Kod: Markera allt

;**********************************************************************
	ORG     0x000             ; processor reset vector
	goto    main              ; go to beginning of program
	

	ORG     0x004             ; interrupt vector location
	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

;---------------------------------------------------------------------
;	Set up I/O 
;---------------------------------------------------------------------
		banksel		TRISB			; 
		clrw						; Make all PORTB bits output
		movwf		TRISB

		movwf		TRISA			; 
Anledningen till att jag inte postat mer är att jag inte gillar att posta MASSA kod, eftersom det för mig känns då som om man vill att någon annan ska fixa problemet åt en. Jag tänkte att felet var på precis den rad som den rapporterade om. Alltså inte vart den raden senare pekade.

Tacksam för all hjälp.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

Tja, ser ju OK ut. Lite märkligt.
Det finns inte fler "main" i t.ex den inkluderade koden ?
Tja, gör ett litet test-case som visar just det problemet
med minsta möjliga kod. Då kan någon intresserad testa det
i sin egen MPLAB miljö...
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Det ska jag absolut göra så fort jag får tid.
Återkommer (förhoppningsvis) inom kort.

MVH Peter F
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Har nu börjat att göra en test kod med så lite som möjligt med.

Min förra kod är baserad på en Template från microchips Suite. Jag ser nu att det finns två olika kataloger i Templates mappen.

Jag använde den från mappen som heter "Code", inte "Object". Jag antar att detta är rätt men det kan juh vara värt att fråga.
Jag använde alltså filen "16F628ATEMP.ASM"

Rätt eller Fel?

Jag återkommer snart med ett testexempel.

MVH Peter F
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Test kod:

onewiretest.asm

Kod: Markera allt

;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PIC16F628A. This file contains the basic code              *
;   building blocks to build upon.                                    *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F628A.INC                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;**********************************************************************

	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.




;***** VARIABLE DEFINITIONS
w_temp        EQU     0x7E        ; variable used for context saving 
status_temp   EQU     0x7F        ; variable used for context saving


DQ   EQU     .2

	cblock		H'20'
		w_temp        	;Interuppt temp värden
		status_temp

		TMP0			;Onewire Inc filens register
		PDBYTE
		IOBYTE
		COUNT

	endc



;**********************************************************************
	ORG     0x000             ; processor reset vector
	goto    main              ; go to beginning of program
	

	ORG     0x004             ; interrupt vector location
	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

; remaining code goes here

	goto	main		  ;loop forever, remove this instruction, for test only


; initialize eeprom locations

	ORG	0x2100
	DE	0x00, 0x01, 0x02, 0x03


	END                       ; directive 'end of program'

onewire.inc

Kod: Markera allt

; *******************************************************
;
; Dallas 1-Wire Support for PIC16F628
;
; Processor has 4MHz clock and 1µs per instruction cycle.
;
; *******************************************************

; 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
; *******************************************************
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
; --------------------------------------------------------



Onewiretest.asm är alltså BARA templaten från microchip plus att jag lagt till Defenitionen på DQ och registeradresserna till de olika register som används av onewire.inc filen.

Jag får samma felmeddelande som jag skrivit om tidigare i denna tråd. Dock lite färre eftersom att koden onewiretest.asm är kortare i detta test.

Alla tips på vad som kan vara galet mottages tacksamt.

MVH Peter F
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

> Jag använde den från mappen som heter "Code", inte "Object".

Jag antar att du har sett och läst filen "Code_vs_Object_Readme.txt"
som ligger i katalogen "Templates" ?

"Code" filerna är alltså enligt det äldre sättet att bygga applikationer "Absolute mode".
"Object" filerna byggs enligt det mer moderna och flexiblare "Rellocatable mode".
Se även : http://www.jescab.se/Relocmode.html och http://www.jescab.se/abs_reloc.html
samt naturligtsvis MPASM/MPLINK manualen.

> Jag använde alltså filen "16F628ATEMP.ASM"
> Rätt eller Fel?

Rätt och rätt. Fel och fel...

Personligen tycker jag att man lika bra kan köra "rellocatable mode", det är lite
mer flexibelt och "snyggare" och "renare", så att säga. Mer likt utveckling på andra
större plattformar (alltså där man har ett compile/assemble => link => execute flöde).

Jag hade alltså föreslagit 16F628ATMPO.ASM istället. Men nej, den du valde är inte "fel"...

> Jag återkommer snart med ett testexempel.

Återkommer snart med svar på det (om jag har något att tillägga...) :-)
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Ja det går inte bra för mig. Har testat att köra med Object Templaten istället (Hade inte sett den TXT filen då jag öppnat den via MPLAB och då visas bara .asm filer) och givetvis gjort projektet till "Relocatable mode" men det blev ingen skillnad.
Nu är jag alltså tillbaka precis där jag var när jag skrev förra inlägget. :?

Jag hade dock läst båda dina sidor sedan innan och även ganska mycket annan info om Absolut vs Ralocatable mode, hade dock ingen aning om att de olika "kod delarna" kallades object. Relocatable mode har varit på min "att lära sig" lista men inte så högt upp på den. Nu har den punkten dock knuffats upp så igårkväll skrev jag ut lektion 16 från Elmer 160 http://www.amqrp.org/elmer160/lessons/E160L16.pdf. Det var juh inte så stor skillnad som jag trodde.
Vi får se om nästa projekt blir att köra lite enkla saker i Relocatable mode.

Som sagt, jag står och stampar på samma ställe som om någon har något förslag på vad jag kan testa så tages det emot tacksamt.

MVH Peter F
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg av sodjan »

"Object code" är ett mellanläge :
Källkod => assemblering/kompilering => objektkod => länkning => exekverbarkod.
Eller :
ASM => MPASM => O => MPLINK => HEX
MPASM manualen sodan 11 har en bra bild över detta.

Hur ser din kod ut nu så att den går att testa ?
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

Nu är jag tillbaka till det kodsnuttar som finns i mitt inlägg här ovanför.

Jag gick till baka till Absolut mode när jag fick likadana felmeddelande i Relocatable Mode. Detta eftersom jag känner till Absolute mode bättre och känner att jag har större chans att klara det där. Men trots det så har jag verkligen kört fast.
Tror du att problemet kan vara att jag kör i Absolutmode?

MVH Peter F
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

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

Inlägg av PopUnoNkoK »

OneWireTEstO.asm

Kod: Markera allt

;**********************************************************************
;   This file is a basic code template for object module code         *
;   generation on the PIC16F628A. This file contains the              *
;   basic code building blocks to build upon.                         *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler and linker (Document DS33014).          *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:        xxx.asm                                         *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required: P16F628A.INC                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;**********************************************************************

    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.

;***** VARIABLE DEFINITIONS (examples)

TMP0            RES 1                ; Allokerar (skapar) en variabel med namnet "myvar1".
PDBYTE            RES 1  
COUNT            RES 1 
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
; remaining code goes here

        goto     $                ; loop forever

; initialize eeprom locations

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

        END                       ; directive 'end of program'

onewire.inc

Kod: Markera allt

; *******************************************************
;
; Dallas 1-Wire Support for PIC16F628
;
; Processor has 4MHz clock and 1µs per instruction cycle.
;
; *******************************************************

; 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
; *******************************************************
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
; --------------------------------------------------------
Har nu testat igen och det är andra felmeddelanden. Jag har defenierat registrerna men in DQ då jag inte vet riktigt hur man gör det i "Relocatable Mode", alltså när jag bara ska definiera ett BIT nummer. Gör jag på samma sätt som i Absolutmode när det gäller bitnummer och inte minnesadresser? Alltså EQU?

Kod: Markera allt

Error[150]   C:\ONEWIRE.INC 39 : Labels must be defined in a code or data section when making an object file
Error[152]   C:\ONEWIRE.INC 41 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ONEWIRE.INC 42 : Executable code and data must be defined in an appropriate section
Error[151]   C:\ONEWIRE.INC 43 : Operand contains unresolvable labels or is too complex
Error[152]   C:\ONEWIRE.INC 43 : Executable code and data must be defined in an appropriate section
Error[151]   C:\ONEWIRE.INC 44 : Operand contains unresolvable labels or is too complex
Error[152]   C:\ONEWIRE.INC 44 : Executable code and data must be defined in an appropriate section
Error[152]   C:\ONEWIRE.INC 45 : Executable code and data must be defined in an appropriate section
Första Error raderna av måååånga errorrader.


MVH Peter F
Skriv svar