#include <kd_sfrs.h>
void inits_ad()
{
unsigned int regtemp;
asm { di; }
wsr=0; //Aunque podemos usar cualquier ventana para int_mask/int_mask1
int_mask=int_mask & 0xFD; // Deshabilitamos int del AD (realizaremos encuesta, no int)
/* Modifiquem el registre IOC2, seleccionem les opcions del conversor.*/
wsr=0xf; regtemp=ioc2;
regtemp = regtemp & 0xF7; // AD_TIME_ENA=0 para modo compatible con 196KB
wsr=0x0; ioc2=regtemp;
wsr=0xf; regtemp=ad_command;
regtemp = regtemp | 0x10; // 8 bits
wsr=0x0; ad_command=regtemp;
/* Finalment cal habilitar les interrupcions per poder servir-les. */
asm { ei;}
}
unsigned int conversio_ad(char canal) {
/* Este bucle espera a que se haya acabado la interrupciĆ³n que lee el contenido del
registro de resultado del conversor AD (rutina RSIADDone). Una vez acabada se
muestra el resultado por el array de leds de la placa placa */
unsigned int regtemp;
wsr=0x0; // Para leer ad_result
while (ad_result&0x08); // Esperar a que haya acabado (encuesta)
asm { di; }
wsr=0xf; regtemp=ad_command;
if (canal==1) { regtemp&=0xF9; regtemp|=1; } // ...001
else if (canal==2) { regtemp&=0xFA; regtemp|=2; } // ...010
else if (canal==3) { regtemp&=0xFB; regtemp|=3; } // ...011
regtemp = regtemp | 0x08; // GO=1
wsr=0x0; ad_command=regtemp;
asm { ei; }
while (ad_result&0x08); // Esperar a que haya acabado (encuesta)
asm { di; }
regtemp=ad_result;
regtemp=regtemp>>8;
regtemp &= 0xFF;
asm { ei; }
return regtemp;
}