PIC16F876 en DS18B20 helpen.

S

sinatra2010

Guest
Hi

Ik mesured met behulp van een LM335 temperatuur en weergegeven op mijn i 7segment 4 cijfers.

Nu moet ik ook mijn ra0 digitale sensor DS18B20 sencond aangesloten, zocht ik het internet om bij te dragen Ik heb niet gevonden hoe je sensor gebruiken maar ik zie een functie Veel initds, readdir, writed, maar ik lees temp ' m niet begrijpen deze functie en ik vond dit DS1820 register A met 9bytes
0 Temperature_LSB
1 Temperature_MSB
2 High Temp Alarm / User Byte 1
3 Lage Temp Alarm / 2 Gebruiker Byte
4 voorbehouden
5 Gereserveerd
6 Count_Remain
7 Count_per_C
8 CRC

voor mijn project Ik wil alleen display units en de tiende, en ik gebruik MPLAB cc5x, kan iemand mij helpen om mijn code te schrijven en te begrijpen hoe dit werk ????? DS18B20Toegevoegd na 3 uur 7 minuten:Code:

/ / Bibliotheek drive management DALLAS

/ / Jean-Pierre Mandon# Define skiprom 0xCC

Zet 0x44 # define

# Define readt 0xBE

# Pragma beetje dataline@PORTC.0LineIn void (void)

(

TRISC = 0x81;

)LineOut void (void)

(

TRISC = 0x80;

)tempo480 void (void) / / vertraging van 480 microsiemens

(

voor (teller = 0; telling <120, tel )

(

NOP ();

NOP ();

NOP ();

)

)tempo65 void (void) / / Timer 65 microsiemens

(

voor (teller = 0; telling <19, tel ) / / 21

)char touchreset (void) / / reset-knop en test DALLAS aanwezigheid van een knop

(

datalijn = 0 / / zet de lijn op 0

tempo480 () / / voor 480 microsiemens

datalijn = 1, / / en doe daarna de lijn 1

tempo65 () / / voor 65 microsiemens

LineIn () / / voorbij de Input Line

if (datalijn == 0) / / als datalijn = 0, een knop is

(

tempo480 ();

datalijn = 1, / / cross de lijn 1

LineOut () / / cross de lijnuitgang

return 1; / / en return 1

)

else / / als er geen toets

(

tempo480 ();

datalijn = 1, / / cross de lijn 1

LineOut () / / cross de lijnuitgang

return 0; / / en return 0

)

)touchbyte void (char byte) / / een commando sturen om de knop DALLAS

(

float rotatie;

char tijdelijke

char waarde;voor (rotatie = 1; rotation <9; rotatie ) / / serialisatie van het commando

(

tijdelijke rotatie = -1;

byte-waarde =>> tijdelijke / / rechts rotatie

datalijn = 0 / / op 0 gezet voor de lijn

NOP2 () / / ten minste

NOP2 () / / 1 μseconde

if ((waarde & 1) == 1) datalijn = 1, / / test beetje

anders datalijn = 0, / / en de positionering van de lijn

tempo65 ();

datalijn = 1;

NOP2 ();

NOP2 ();

)

)char touchreceive (void) / / ontvangen van een byte vanaf de button DALLAS

(

float rotatie;

char byte;

char tijdelijke

byte = 0;

voor (rotatie = 1; rotation <9; rotatie )

(

datalijn = 0 / / op 0 gezet voor de lijn

NOP2 () / / ten minste

NOP2 () / / 1 μseconde

datalijn = 1;

LineIn () / / voorbij de Input Line

NOP2 ();

rotatie -;

tijdelijke = 1;

= tijdelijke tijdelijke "rotatie;

rotatie ;

if (datalijn == 1) byte = byte | tijdelijke

datalijn = 1;

LineOut ();

tempo65 ();

)

terug byte;

)char crc8 (void) / / controleer de geldigheid van de bytes die zijn ontvangen

(

char temp, index, tellen, n;

crc = 0;

voor (n = 1, n <8, n )

(

dallastemp index = [n];

voor (teller = 1; telling <9, tel )

(

# Asm

movf index, w

xorwf CRC, w

movwf temp

RRF temp, w

movf CRC, w

btfsc STATUS, Carry

xorlw 0x18

movwf temp

RRF temp, w

movwf CRC

movf index, w

movwf temp

BCF STATUS, Carry

RRF temp, f

btfsc STATUS, Carry

BSF temp, 7

movf temp, w

movwf index

# Endasm

)

)

if (CRC == dallastemp [8]) return CRC;

else return 0;

)het omzetten van void (void)

(

int16 j;if (touchreset () == 1) / / als een knop is

(

touchbyte (skiprom) / / pas de identificatie-zone

NOP2 ();

NOP2 ();

touchbyte (converteren) / / Start Conversion

voor (j = 1 j <200 j ) tempo480 ();

)

)char litcode (void) / / Lees geheugentoets

(

char i;

int16 j;

char wedstrijden, terug te keren;

if (touchreset () == 1) / / als een knop is

(

touchbyte (skiprom) / / pas de identificatie-zone

NOP2 ();

NOP2 ();

Lezen:

touchbyte (readt) / / dan gaan lezen

for (i = 1; i <10; i ) / / 2 bytes

(

touchreceive resultaat = () / / het geheugen onderdelen

dallastemp = resultaat; / / en sla ze op in de tabel Dallas [] Tijdelijke

)

resultaat = 0; / / als alle bytes

for (i = 1; i <10; i ) / / code zijn 0

wedstrijden = wedstrijden dallastemp / dan / de code is

if (crc8 ()! = 0)

(

for (i = 1; i <10; i )

(

dallastemp resultaat = ;

dallas = resultaat;

)

terug = 1;

)

anders

(

rendement = 0;

)

)

anders

rendement = 0;

terugkeren;

)
 
Hi
Je kunt proberen te kijken naar de compiler als mikroC Het heeft een bibliotheek-routine voor de One-Wire interface, waar je gewoon bellen met de functie om te lezen, zoalsCode:

temp = OW_Read (...)
 

Welcome to EDABoard.com

Sponsor

Back
Top