As I'm currently coding a 1-wire solution, given that I'm dealing with writing and reading EEPROMs (not just temperature sensors), I can
very highly recommend the following device...
http://www.maximintegrated.com/en/produ ... ml/tb_tab0
This further supports search acceleration, where you have more than one addressable 1-wire device on the bus, and also 12V programming pulse generation (from a 12V source) should you need to program 1-wire devices as-well.
1-wire timing is pretty critical whereas the above device interfaces to your MCU (PIC, whatever) via simple TTL232 serial.
There is also an I2C alternative for this device, but unnecessary unless your ports are limited and you need to mux with other addressable I2C devices.
Regarding CRC calculation, this is most easily (and quickly) achieved by a CRC lookup table if you have the spare RAM or ROM space. Basically, for each successive data Byte you XOR with the existing CRC byte (commencing 0x0 for the usual seed of '0'), and the resulting value is the index value for the lookup table. You then simply extract the indexed Byte for the next XOR operation with the next data Byte, and repeat the operation for as many bytes you have. The last indexed Byte is then your CRC.
Just make sure that you use the right table as CRC polynomials do vary.
All the best,
Brendan