/** TEST 02_1 完成 * PIC 12F683 使用 * RS-232Cをsoft UARTで使う。ECHOを返す * AD変換を使ってアナログデータを取り込む (AN0〜AN3) * 作成開始 2008/3/31 --> 2008/4/1 * * PIN 1 : +5V (VDD) * PIN 2 : GP5 データ出力 * PIN 3 : GP4 アナログ入力3 AN3 * PIN 4 : GP3 データ入力 * PIN 5 : GP2 アナログ入力2 AN2 * PIN 6 : GP1 アナログ入力1 AN1 * PIN 7 : GP0 アナログ入力0 AN0 * PIN 8 : GND * * *Clock: 8.0MHz 内蔵発振器使用 *Device Flags: * _CP_OFF _MCLRE_OFF _PWRTE_ON _WDT_OFF _INTRC_OSC_NOCLKOUT * * MikroC v8.1.0.0 */ extern void crlf() ; // CR+LF 関数を宣言 void main() { //使用変数の定義 int temp; unsigned short data = 0 , ro = 0; // RS232C input-data unsigned short i=0 ; unsigned short j=0 ; unsigned short *er ; // RS232C read error pointer char txt[7] ; // IntToStr 用のバッファー //マイコンの初期化 //内臓クロック8MHzに設定 OSCCON.IRCF2=1; OSCCON.IRCF1=1; OSCCON.IRCF0=1; //A/D変換clock設定 0.125us*16倍=2.0us ANSEL.ADCS2=1; ANSEL.ADCS1=0; ANSEL.ADCS0=1; // A/D利用ピンの設定 // ANALOG=1, DIGITAL=0 //0 ANSEL.ANS3 = 1; //AN3(GP4)をアナログ使用 ANSEL.ANS2 = 1; //AN2(GP2)をアナログ使用 ANSEL.ANS1 = 1; //AN1(GP1)をアナログ使用 ANSEL.ANS0 = 1; //AN0(GP0)をアナログ使用 GPIO = 0b00000000; //GPIOの中身をきれいにする // 参考 TRISIO = 0b00010000; //GP4を1:入力、他5個を0:出力設定 TRISIO = 0b00011111; //GP5を0:出力に、他5個を1:入力に設定 //AD変換の値を、右そろえか、左そろえか決める ADCON0.ADFM=1; // 右そろえ //マイコンの初期化終わり er = &ro ; // pointer er に roのアドレスを与える // RS232C Initialize 8bit non-parity 9600 baud rate //void Soft_Uart_Init(unsigned short port, unsigned short rx inport , unsigned short tx outport, unsigned short baud_rate, unsigned short inverted); Soft_Uart_Init(GPIO, 3, 5,9600,0) ; do { do { data = Soft_Uart_Read(er) ; // Receive data } while (*er) ; Soft_Uart_Write(data) ; // send INPUT data via UART crlf() ; // send CR+LF //アナログデータの取得 //10bit(0~1023) if (data=='r' | data=='R') { temp = ADC_Read( ANS0 ); //ANS0 アナログ値を読む IntToStr(temp,txt); // 数字を文字に変換 for ( i=0 ; i<7 ; i++ ) { Soft_Uart_Write( txt[i] ) ; // Send アナログ値 via UART Soft_Uart_Write( ' ' ) ; // ブランク } temp = ADC_Read( ANS1 ); //ANS1アナログ値を読む IntToStr(temp,txt); // 数字を文字に変換 for ( i=0 ; i<7 ; i++ ) { Soft_Uart_Write( txt[i] ) ; // Send アナログ値 via UART Soft_Uart_Write( ' ' ) ; // ブランク } temp = ADC_Read( ANS2 ); //ANS2 アナログ値を読む IntToStr(temp,txt); // 数字を文字に変換 for ( i=0 ; i<7 ; i++ ) { Soft_Uart_Write( txt[i] ) ; // Send アナログ値 via UART Soft_Uart_Write( ' ' ) ; // ブランク } temp = ADC_Read( ANS3 ); //ANS3 アナログ値を読む + IntToStr(temp,txt); // 数字を文字に変換 for ( i=0 ; i<7 ; i++ ) { Soft_Uart_Write( txt[i] ) ; // Send アナログ値 via UART Soft_Uart_Write( ' ' ) ; // ブランク } } crlf() ; // send CR+LF } while (1) ; } // CR+LF 関数 void crlf() { Soft_Uart_Write(0x0D) ; // Send CR CODE via UART Soft_Uart_Write(0x0A) ; // Send LF CODE via UART }