Alberto
- 31st January 2017, 09:42
pic 18F2620
Owin portB.5 ,0,[strDta\9] (works!)
Owin 5 ,0,[strDta\9] (works!)
mypin var byte
mypin=5
Owin mypin ,0,[strDta\9] (doesn't work!)
Not very elegant but this way it works!
One_W1 var PortB.5
One_W2 var PortB.6
One_W3 var PortB.7
if CIndex = 1 Then
owout One_W1,1,[$CC,$44]
owout One_W1,1,[$CC,$BE]
owin One_W1,0,[STR Dta\9]
endif
if CIndex = 2 Then
owout One_W2,1,[$CC,$44]
owout One_W2,1,[$CC,$BE]
owin One_W2,0,[STR Dta\9]
endif
if CIndex = 3 Then
owout One_W3,1,[$CC,$44]
owout One_W3,1,[$CC,$BE]
owin One_W3,0,[STR Dta\9]
endif
Alberto
Dave
- 1st February 2017, 11:59
Alberto, Here is a routine I wrote some years ago. I hope it helps.
' PROGRAM: 1_WIRE_SEARCH.bas
'
' WRITTEN BY DAVID PUROLA 9/18/2003
' WRITTEN FOR PIC18F452-I/L MICROPROCESSOR
'
' ************************************************** ******************
' Declare Variables
' ************************************************** ******************
SCRATCH VAR WORD 'SCRATCH VARIABLE
SCRATCH1 VAR BYTE 'SCRATCH VARIABLE
CRCData VAR Byte 'CRC CUMULATIVE DATA BYTE
CRC VAR Byte 'CRC ENDING BYTE
ONEWIRE VAR BYTE 'ONE WIRE RECEIVED DATA
ID_BIT VAR BIT 'ID BIT STATE
CMP_ID_BIT VAR BIT 'ID BIT COMPLEMENT
ID_BIT_NO VAR BYTE 'ID BIT COUNTER
LASTDEVFLG VAR BIT 'LAST DEVICE HISTORY BIT
LASTDESC VAR BYTE 'LAST DEVICE DESCRIPTION
LASTFAMDESC VAR BYTE 'LAST DEVICE FAMILY DESCRIPTION
LAST_ZERO VAR BYTE 'LAST ZERO COUNTER
ROM_NO VAR BYTE(8) 'STORAGE AREA FOR CURRENT ROM SERIAL NUMBER
SEARCHDIR VAR BIT 'SEARCH DIRECTION BIT
OK VAR BIT 'VALID DATA FLAG
DALLAS_NO VAR BYTE 'DEVICE FOUND NUMBER
DEVICES VAR BYTE(80) 'STORAGE LOCATIONS FOR 10 DEVICE SERIAL NUMBERS
CLEAR
'************************************************* ********************
'MAIN LOOP FOR PROGRAM
'************************************************* ********************
MODE1: 'DO ROM SEARCH FOR ANY DEVICES
FOR SCRATCH = 0 TO 7 'clear rom number for first search
ROM_NO[SCRATCH] = 0
NEXT
DALLAS_NO = 255
LASTDEVFLG= 0
OK = 1
WHILE LASTDEVFLG = 0
GOSUB ONEWIRE_SEARCH
IF OK = 1 THEN
DALLAS_NO = DALLAS_NO + 1
LCDOUT $fe,$80,"TOTAL ROM NUMBERS FOUND= ",DEC2 DALLAS_NO + 1
FOR SCRATCH = 0 TO 7
DEVICES[(DALLAS_NO * 8) + SCRATCH] = ROM_NO[SCRATCH]
NEXT
ENDIF
WEND
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
' DISPLAY ANY DEVICES FOUND
FOR SCRATCH1 = 0 TO DALLAS_NO
LCDOUT $fe,$C0,"SEARCH= "
FOR SCRATCH = 7 TO 0 STEP -1
LCDOUT HEX2 DEVICES[(SCRATCH1 * 8) + SCRATCH]
NEXT
LCDOUT " ",DEC2 SCRATCH1 + 1
PAUSE 1000
NEXT
GOTO MODE1
END
'************************************************* ********************
' Subroutines
'************************************************* ********************
'************************************************* ********************
ONEWIRE_SEARCH:
'************************************************* ********************
OWOUT SDA,1,[$F0] 'SEND RESET & SEARCH ROM COMMAND
IF LASTDEVFLG = 1 THEN
GOTO TWO
ENDIF
ID_BIT_NO = 1
LAST_ZERO = 0
RESEARCH:
OWIN SDA,4,[ID_BIT]
OWIN SDA,4,[CMP_ID_BIT]
IF ID_BIT = 1 AND CMP_ID_BIT = 1 THEN
GOTO TWO
ELSE
IF ID_BIT = 0 AND CMP_ID_BIT = 0 THEN
IF ID_BIT_NO = LASTDESC THEN
SEARCHDIR = 1
ELSE
IF ID_BIT_NO > LASTDESC THEN
SEARCHDIR = 0
ELSE
SEARCHDIR = ROM_NO.0[ID_BIT_NO - 1]
ENDIF
ENDIF
IF SEARCHDIR = 0 THEN
LAST_ZERO = ID_BIT_NO
IF LAST_ZERO < 9 THEN
LASTFAMDESC = LAST_ZERO
ENDIF
ENDIF
ELSE
SEARCHDIR = ID_BIT
ENDIF
ENDIF
ROM_NO.0[ID_BIT_NO - 1] = SEARCHDIR
OWOUT SDA,4,[SEARCHDIR]
ID_BIT_NO = ID_BIT_NO + 1
IF ID_BIT_NO > 64 THEN
LASTDESC = LAST_ZERO
IF LASTDESC = 0 THEN
LASTDEVFLG= 1
ENDIF
GOTO THREE
ENDIF
GOTO RESEARCH
THREE:
CRC = 0
FOR SCRATCH = 0 TO 7
CRCData = ROM_NO[SCRATCH]
GOSUB CRC8LU
NEXT
IF CRC = 0 THEN 'GOOD ROM READBACK ADDRESS
OK = 1 'SET FLAG TO STORE ADDRESS
RETURN
ENDIF
TWO:
LASTDEVFLG = 0
LASTDESC = 0
LASTFAMDESC = 0
OK = 0
RETURN
'************************************************* ********************
' ********** Subroutine CRC8LU **********
' Expects CRC at some starting value with data to CRC
' passed in CRCData.
' Gives ending CRC value and destroys CRCData
' Uses CRCData-Byte, CRC-Byte
CRC8LU:
CRCData = CRCData ^ CRC
Lookup CRCData,[0,94,188,226,97,63,221,131,194,156,126,32,163,253, 31,65,_
157,195,33,127,252,162,64,30,95,1,227,189,62,96,13 0,220,_
35,125,159,193,66,28,154,160,225,191,93,3,128,222, 60,98,_
190,224,2,92,223,129,99,61,124,34,192,158,29,67,16 1,255,_
70,24,250,164,39,121,155,197,132,218,56,102,229,18 7,89,7,_
219,133,103,57,186,228,6,88,25,71,165,251,120,38,1 96,154,_
101,59,217,135,4,90,184,230,167,249,27,69,198,152, 122,36,_
248,166,68,26,153,199,37,123,58,100,134,216,91,5,2 31,185,_
140,210,48,110,237,179,81,15,78,16,242,172,47,113, 147,205,_
17,79,173,243,112,46,204,146,211,141,111,49,178,23 6,14,80,_
175,241,19,77,206,144,114,44,109,51,209,143,12,82, 176,238,_
50,108,142,208,83,13,239,177,140,174,76,18,145,207 ,45,115,_
202,148,118,40,171,245,23,73,8,86,180,234,105,55,2 13,139,_
87,9,235,181,54,104,138,212,149,203,41,119,244,170 ,72,22,_
233,183,85,11,136,214,52,106,43,117,151,201,74,20, 246,168,_
116,42,200,150,21,75,169,247,182,232,10,84,215,137 ,107], CRC
' PBP only handles 255 constants in the list (256 for 18Cxxx). Since table is
' indexed starting at zero, special case for $FF (256th element).
If CRCData = $FF Then
CRC = 53
EndIF
Return
Powered by vBulletin® Version 4.1.7 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.