V čem to chceš psát? Assembler? Vyšší jazyk (C, Pascal, Basic)?
Pokud by to byl vyšší jazyk, doporučuji prostředí společnosti Mikroelektronika (
www.mikroe.com). Mají na výběr mezi C, Pascalem a Basicem a mají hotovou knihovnu pro OneWire technologii, takže pak může vyčtení hodnoty z jednoho teploměru 18B20 vypadat nějak takto (teď nevím, zdali je to pro 1820 nebo 18B20 nebo 18S20 - nutno zkontrolovat v příslušných datasheetech):
ow_reset(PORTA,5); // onewire reset signal
ow_write(PORTA,5,$CC); // issue command to DS1820
ow_write(PORTA,5,$4E); // issue command to DS1820
ow_write(PORTA,5,$FF); // issue command to DS1820
ow_write(PORTA,5,$FF); // issue command to DS1820
ow_write(PORTA,5,$3F); // Set for 12 bit output 7F=12 bit=0,0625°C, 5F=11bit=0,125°C, 3F=10bit=0,25°C, 1F=9bit=0,5°C
ow_reset(PORTA,5); // onewire reset signal
ow_write(PORTA,5,$CC); // issue command to DS1820
ow_write(PORTA,5,$44);
// start temperature conversion
j1 := 0;
Repeat // end of conversion cycle is
j1 := ow_read(PortA,5); // indicated by a non-zero
Until j1 > 0; // output to polling
ow_reset(PORTA,5); // at this point temp is in memory
ow_write(PORTA,5,$CC); // issue command to DS1820
ow_write(PORTA,5,$BE); // read scratchpad memory
j1 := ow_read(PORTA,5); // get Low Byte result
j2 := ow_read(PORTA,5); // get High byte resujlt
RawTemp := j2; // Raw now holds the 16-bit
RawTemp := RawTemp shl 8; // output, with sign bit and
RawTemp := RawTemp + j1; // maximum resolution information
// result in units of 0.0625 deg C
Určitě bude hotová knihovna i pro assembler. Ale jak jsem psal, jde o to, v čem chceš požadovaného výsledku docílit.
Petr Filipi