1WIRECOUNT/de

From MCS Wiki AVR
Jump to: navigation, search

Contents

Funktion

Dieser Befehl ermittelt die Anzahl von 1wire-Slaves am Bus.

 

 

Syntax

var2 = 1WIRECOUNT()

var2 = 1WIRECOUNT( port , pin)

 

 

Beschreibung

var2

Eine WORD-Variable, die die Anzahl Geräte am Bus anzeigt.

port

Der Name des PORT PINx Registers wie z.B. PINB oder PIND.

pin

Die Pin-Nummer im Bereich von 0-7. Darf eine numerische Konstante oder Variable sein.

 

Die Variable muß vom Typ Word oder Integer sein.

Die 1wirecount()-Funktion kann benutzt werden, um zu ermitteln, wie oft die 1wsearchNext()-Funktion aufgerufen werden muß, um alle IDs vom Bus zu bekommen.

 

Die 1wirecount-Function benötigt 4 Bytes vom SRAM.

 

___1w_bitstorage , Byte zur Speicherung von Bits :

lastdeviceflag Bit 0

id_bit Bit 1

cmp_id_bit Bit 2

search_dir Bit 3

___1wid_bit_number, Byte

___1wlast_zero, Byte

___1wlast_discrepancy , Byte

 

 

 

 

ASM

Folgende Assembler-Routinen werden von der mcs.lib aufgerufen.

 

_1wire_Count : (ruft auf _1WIRE, _1WIRE_SEARCH_FIRST , _1WIRE_SEARCH_NEXT)

 

Übergebene Parameter : R24 : Pin-Nummer, R30 : Port , Y+0,Y+1 : 2 Bytes vom Software-Stack, X : Zeiger auf den Frame Space

 

Rückgabe von Y+0 und Y+1 mit dem Zählerwert. Wird auf die Zielvariable kopiert.

 

 

Siehe auch

CONFIG 1WIRE , 1WWRITE , 1WRESET , 1WREAD , 1WSEARCHFIRST , 1WSEARCHNEXT , 1WVERIFY , Using the 1wire protocol

 

 

 

Beispiel

'--------------------------------------------------------------------------------
'name : 1wireSearch.bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : demonstrates 1wsearch
'micro : Mega48
'suited for demo : yes
'commercial addon needed : no
'--------------------------------------------------------------------------------
 
 
$regfile = "m48def.dat"
$crystal = 4000000
 
 
$hwstack = 32 'Grundeinstellung 32 für den Hardware Stack
$swstack = 10 'Grundeinstellung 10 für den Software Stack
$framesize = 40 'Grundeinstellung 40 für den Frame Space
 
 
Config 1wire = Portb.0 'Angabe des Pins
'Am STK200 muß Jumper B.0 gesteckt sein
 
'Folgende Bytes werden von der Scan-Routine benötigt
'___1w_bitstorage , Byte zur Speicherung von Bits :
' lastdeviceflag Bit 0
' id_bit Bit 1
' cmp_id_bit Bit 2
' search_dir Bit 3
'___1wid_bit_number, Byte
'___1wlast_zero, Byte
'___1wlast_discrepancy , Byte
'___1wire_data , String * 7 (8 Bytes)
 
 
'[DIM benutzte Variablen]
'Mindestens 8 Bytes zur Speicherung der ID werden gebraucht
Dim Reg_no(8) As Byte
 
'ein Schleifenzähler und ein Word/Integer für die Anzahl der IDs am Bus
Dim I As Byte , W As Word
 
 
'Suchen des ersten Teilnehmers am Bus
Reg_no(1) = 1wsearchfirst()
 
 
For I = 1 To 8 'Ausgabe der ID im Hex-Format
 Print Hex(reg_no(i));
Next
Print
 
 
Do
'Suche nach anderen Teilmnehmern
Reg_no(1) = 1wsearchnext()
For I = 1 To 8
 Print Hex(reg_no(i));
Next
Print
Loop Until Err = 1 'Schleife bis zum ersten Fehler am Bus
 
 
'Wenn ERR = 1 ist, wurde kein weiterer Teilnehmer gefunden
'Man kann auch die Anzahl der Teilnehmer am Bus zählen lassen
W = 1wirecount()
'Es ist WICHTIG zu beachten, daß die 1wirecount-Function ein Word/Integer zurückgibt
'Die Ergebnis-Variable muß vom Typ Word oder Integer sein
'Man kann sie natürlich in eine Byte-oder Long-Variable übertragen
Print W
 
 
'als Bonus die nächste Routine :
' zuerst das Array mit einer existierenden ID füllen
Reg_no(1) = 1wsearchfirst()
' um ein Byte zu ändern und das Err-Flag zu testen, nächste Zeile auskommentieren
'Reg_no(1) = 2
'jetzt eine Prüfung, ob die ID existiert
1wverify Reg_no(1)
Print Err
'err =1 wenn die ID, welche mit Reg_no() übergeben wurde, nicht existiert
'optionaler Aufruf mit Angabe der Pinnummer: 1wverify reg_no(1),pinb,1
 
 
'wie bei den anderen 1-Wire Befehlen/Funktionen, wird die Angabe von Port und Pinnummer unterstützt
'W = 1wirecount(pinb , 1) 'als Beispiel am Pin PINB.1
End

Languages   English Deutsch  
Personal tools
Namespaces
Variants
Actions
Navigation
In other languages
Language