#define WAIT(TT) { int tt; for(tt=0;tt<(TT);tt++); } /* wait 1 bit time (1/9600 sec) */ #define kCRcode (0x0D) #define kLFcode (0x0A) #define _GRA (10000) /* 5.000msec. */ #define _GRB (3000) /* 1.500msec. */ #define T0050 ( 100) /* 0.050msec. */ #define T0100 ( 200) /* 0.100msec. */ #define T0150 ( 300) /* 0.150msec. */ #define T0200 ( 400) /* 0.200msec. */ #define T0700 (1400) /* 0.700msec. */ #define T2300 (4600) /* 2.300msec. */ static void outch( unsigned char ch ) { short xx; do { xx = SCI3.SSR.BIT.TDRE; } while( xx == 0 ); SCI3.TDR = (short)ch; SCI3.SSR.BIT.TDRE = 0; } static void crlf( void ) { outch( kCRcode ); outch( kLFcode ); } static void out1h( unsigned char xx ) { xx &= 0x0F; if( xx <= 9 ) { xx |= '0'; } else { xx += 'A' - 10; } outch( xx ); } static void out4h( unsigned short xx ) { out1h( xx >> 12 ); out1h( xx >> 8 ); out1h( xx >> 4 ); out1h( xx ); } static int inch( void ) { int ch; ch = SCI3.SSR.BYTE; if( (ch & 0x78) != 0 ) { /* RDRF=ORER=FER=PER=0 */ if( SCI3.SSR.BIT.RDRF == 0 ) { ch = 0; /* error */ SCI3.SSR.BYTE = 0x80; } else { ch = SCI3.RDR; SCI3.SSR.BIT.RDRF = 0; } } else { ch = 0; } return ch; } unsigned int get_ad( int ch ) { unsigned int ad = 0; #if 0 AD.ADCSR.BIT.SCAN = 0; // シングルモード AD.ADCSR.BIT.CH = ch; // AN0 - AN3 AD.ADCSR.BIT.ADST = 1; /* ADCスタート */ while( AD.ADCSR.BIT.ADF == 0 ) ; /* ADC 終了待ち*/ AD.ADCSR.BIT.ADF = 0; #endif switch( ch ) { case 0: case 4: ad = AD.ADDRA >> 5; break; case 1: case 5: ad = AD.ADDRB >> 5; break; case 2: case 6: ad = AD.ADDRC >> 5; break; case 3: case 7: ad = AD.ADDRD >> 5; break; } return ad; }