Hola Braulio !, fantastico lo que posteaste. Tengo simplemente algunas recomendaciónes según mi punto de vista que no implica que sea la verdad absoluta.
Cuando implementas una libreria con determinada funcionalidad es importante mantener los detalles de la implementación ocultos al resto de la aplicación, es decir en el archivo H solo se colocan las funciones que van a ser usadas externamente, en tu caso :
int ds1820_temperatureX2(char);
Que es en definitiva la función que se usara para leer el valor de la temperatura, el resto de las definiciones o funciones las podes incluir dentro del archivo C directamente, ya que esas funciones las utiliza tu módulo nada mas.
Otra cosa tambien sugerida es que a las funciones internas las antepongas con la palabra reservada
static de esa manera te aseguras que solo tu módulo las accede permaneciendo ocultas para el resto de la aplicación, es mas o menos el concepto de objetos llamado encapsulación.
static unsigned char read_bit(void);
Por último y espero que sepas perdonarme por las sugerencias, es tratar de utilizar el tipo de datos correcto o más portable, el tema es asi, al usar CodeWarrior te aseguras que el tipo int es de 16 bits signeado, el HCS08 lo puede manejar eficientemente porque el registro H:X es de ese tamaño y ademas maneja operaciones signeadas, el problema es que si esa función la tratas de mover a otro micro sin estas caracteristicas, digamos x ejemplo a un 8051 el overhead que se le mete al tratar signeados es muy significativa con respecto a los unsigned. En tu caso todo bien, pero mi experiencia me dice que es recomendable escribir codigo portable, cuando te acostumbras a eso vas a notar que ciertas cosas que hagas te van a servir para aplicarlas a otros micros sin demasiado esfuerzo y eso te salva mucho tiempo. Yo utilizo estos tipos:
/* Types definition */
typedef unsigned char bool;
typedef unsigned char byte;
typedef unsigned short int word;
typedef unsigned long dword;
Otros usan conbinaciones de int8, int16, int32, etc.
Saludos !