#include #include "temperature.h" static int32_t adc_val; static uint8_t* flag_ptr = NULL; // Inicializa el puntero a NULL para asegurar que su estado no inicializado sea detectable. uint8_t init_temperature_sensor(uint8_t* flag_main) { // Configura el ADC para medir la temperatura (ADC10CLK/4) ADC10CTL1 |= INCH_10 + ADC10DIV_3; ADC10CTL0 |= SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE; // Espera para que se estabilice la referencia del ADC __delay_cycles(1000); // Verifica si el puntero proporcionado es válido if (flag_main == NULL){ return 0; // Puntero inválido } flag_ptr = flag_main; return 1; // Puntero válido y asignado } void run_temperature_measurement(void) { // Inicia muestreo y conversión ADC10CTL0 |= ENC + ADC10SC; } int32_t get_temperature_value(void) { // Convierte el valor del ADC a grados Celsius int32_t temp = (((adc_val - 673) * 423) / 1024); // Verifica si el puntero a la bandera ha sido inicializado antes de usarlo if (flag_ptr != NULL) { *flag_ptr = 0; // Resetea la bandera } return temp; } // Rutina de servicio de interrupción para el ADC #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { // Verifica si el puntero a la bandera ha sido inicializado antes de usarlo if (flag_ptr != NULL) { *flag_ptr = 1; // Indica que la medición está lista } adc_val = ADC10MEM; // Almacena el valor medido }