#include <3664.h> // 1文字送信 ===================================== void rs_putc (char c) { while (SCI3.SSR.BIT.TDRE == 0) ; SCI3.TDR = c; } // 文字列送信 ==================================== void rs_puts (char *st) { while (*st) rs_putc (*st++); } // タイマーウェイト ============================== void TAwait(int ms) { int i; for(i=0; i<=ms; i++) { while(!IRR1.BIT.IRRTA); IRR1.BIT.IRRTA = 0; // 検知フラグを戻して再開 } } // メイン ======================================== void main(void) { char txb[10], rxb[10]; char buf[8]; // 送信用文字配列 int swapAD1, swapAD2; // AN0の値, AN1の値 SCI3_INIT(br38400, txb, sizeof(txb), rxb, sizeof(rxb)); // SCI初期化 IO.PCR5=0x03; /* 0000 0011 P5-0とP5-1を出力 */ TA.TMA.BYTE=0x0B; /* 0000 1011 タイマーA 31.25ms */ int i; while(1) { IO.PDR5.BIT.B0=1; // P5-0をON IO.PDR5.BIT.B1=1; // P5-1をON for(i=0; i<=1; i++) { switch(i) { case 0: AD.ADCSR.BYTE = 0x08; /* 0000 1000 AN0 */ AD.ADCSR.BIT.ADST = 1; // 変換スタート(1回だけ) while(!AD.ADCSR.BIT.ADF); // A/D変換が終わるまでループで待つ swapAD1 = (int)(AD.ADDRA >> 8); // ビットシフトで精度を落とす(0〜255) break; case 1: AD.ADCSR.BYTE = 0x09; /* 0000 1001 AN1 */ AD.ADCSR.BIT.ADST = 1; while(!AD.ADCSR.BIT.ADF); swapAD2 = (int)(AD.ADDRB >> 8); break; } } rs_putc('\r'); // 改行送信(UNIXにはいらない) rs_putc('\n'); // 改行送信(MAC OSにはいらない) buf[0] = ((swapAD1 / 100) % 10) + 0x30; // 100の位を文字コードに変換 buf[1] = ((swapAD1 / 10) % 10) + 0x30; // 10の位を文字コードに変換 buf[2] = (swapAD1 % 10) + 0x30; // 1の位を文字コードに変換 buf[3] = '-'; buf[4] = ((swapAD2 / 100) % 10) + 0x30; // 100の位を文字コードに変換 buf[5] = ((swapAD2 / 10) % 10) + 0x30; // 10の位を文字コードに変換 buf[6] = (swapAD2 % 10) + 0x30; // 1の位を文字コードに変換 buf[7] = '\0'; // null文字(0x0dと同等?) rs_puts(buf); // 文字列送信 TAwait(10); // 約300ms待つ } }