Estoy leyendo un valor anlogue usando el ADC de 10 bits del canal 0. He implementado una interrupción usando el temporizador 0, donde establezco algún valor para los registros del temporizador 0 (TMR0H y TMR0L - 8 bits) y espero el exceso de flujo.
Con referencia a la pregunta, quiero usar la lectura de 10 bits del ADC para los registros de 2 8 bits del temporizador 0. Se me ocurrió la idea de multiplicar la lectura del ADC por 64 (aproximadamente 16 bits de lectura) , luego algunos de cómo transferir ese valor a TMR0H y TMR0L. Sé que al hacer la multiplicación estoy perdiendo algunos datos.
No he encontrado una manera de lograr el cambio entre el registro de 16 bits a los registros de 2 8 bits. Intenté usar el enmascaramiento de bits con los operadores de cambio.
void interrupt ISR(){
//Check if it is TMR0 Overflow ISR
if(INTCONbits.TMR0IE && INTCONbits.TMR0IF){//TMR0 Overflow ISR
if(giro){
if(aux && PORTD == aux){
PORTD = 0x01;
}else{
PORTD <<=1;
}
}else{
if(PORTD == 0x01){
PORTD = aux;
}else{
PORTD >>= 1;
}
}
TMR0H = (auxADC && 0xFF00) >> 8;
TMR0L = auxADC && 0xFF;
INTCONbits.TMR0IF = 0;
}
}
No hay problemas para compilar el código, pero cuando se depura el código con el pickit 3, los valores de TMR0H y TMR0L no cambian correctamente, no se actualizan con la parte alta y baja de auxADC.
¡Muchas gracias!