/* A/D contverter. Last updated 25.5.00 */ #include "H8.h" #ifndef AD_H_DEFINED #define AD_H_DEFINED /* Section 12, A/D Converter */ #define ADDRA *((volatile word *) 0xffe0) /* s. 199 */ #define ADDRB *((volatile word *) 0xffe2) #define ADDRC *((volatile word *) 0xffe4) #define ADDRD *((volatile word *) 0xffe6) #define AN0 0 #define AN1 1 #define AN2 2 #define AN3 3 #define AN4 4 #define AN5 5 #define AN6 6 #define AN7 7 #define ADCSR *((volatile byte *) 0xffe8) /* s. 200 */ /* Return the converted analog value on pin = 0,1, ... ,7. */ uint16 ConvertADChannel( byte pin ) { uint16 ADvalue; /* Select AD channel given by the value of pin, all other bits are cleared, i.e. clear end flag, disable interrupts, use single conversion mode and conversion time 266 states. */ ADCSR = pin; /* Start conversion */ ADCSR |= bit5; /* Wait for end of conversion */ while ( !(ADCSR & bit7) ); /* Clear end of conversion flag */ ADCSR &= ~bit7; switch ( pin ) { case 0: ADvalue = ADDRA; break; case 1: ADvalue = ADDRB; break; case 2: ADvalue = ADDRC; break; case 3: ADvalue = ADDRD; break; case 4: ADvalue = ADDRA; break; case 5: ADvalue = ADDRB; break; case 6: ADvalue = ADDRC; break; case 7: ADvalue = ADDRD; break; default: ADvalue = 0; } /* Shift the 10 bit value to an integer in [0..1023] */ return (ADvalue >> 6); } #endif /* AD_H_DEFINED */