- /*
- 概要:A/D変換値をRS232C通信で送信
- HID - Bootloaderを使った書き込み
- マイコン:PIC18F2550
- ファイル名:RS232C.c
- 開発環境:MPLAB C18
- */
- #include <p18f2550.h>
- #include <usart.h>
- #include <stdio.h>
- #include <adc.h>
- #include <stdlib.h>
- #include <delays.h>
- // リセットベクタ
- #pragma code reset_vector=0x1000
- extern void _startup(void);
- void remapped_reset(void) { _asm goto _startup _endasm}
- #pragma code
- void main (void){
- char ad_value[10] = "AD=";
- char v_value[10] = "Volt=";
- char str2[8] ="\r\n";
- int ADread; //AD変換値
- char buf_ad[3]; //一時的に保存
- double press; //電圧値整形前
- int One_digit; //電圧値の整数部分
- int v_m; //小数点以下2桁
- TRISA = 0b00001001; //RA0,A/D input RA3 Vref input
- TRISB = 0; //all output
- TRISC = 0; //all output
- LATC = 0; //ポートCの出力ラッチCすべてに0:OFFを出力
- ADCON0 = 0b00000001; //bit0=1 AD変換開始
- //bit3,4,5の000でAN0を一つのだけのポートに指定
- ADCON1 = 0b00011101; //アナログ入力ポートの使い方の設定
- //bit4,5の0,1でVss、AN3/Vref+
- //bit0,1,2,3の1101でAN0,AN1がアナログ他はデジタル
- ADCON2 = 0b10110110; //bit0,1,2 の110で64Tosc
- //bit3,4,5の110で16TAD
- T0CON = 0b10000110; //Timer0 の設定
- //bit0,1,2 110 プリスケーラ使用時の倍率指定256
- //bit3=0 プリスケーラ使用有無 使用する
- //bit4=0 立ち上がり
- //bit5=0 TMR0クロックソース選択 命令サイクル
- //bit6=0 16ビットモード
- //bit7=1 TMR0有効
- INTCONbits.TMR0IE = 1; // Timer0 Interrupt Enable
- RCONbits.IPEN = 1; // Interruput Priority Enable
- INTCON2bits.TMR0IP = 0; // Timer0 Interrupt is Low Priority
- INTCONbits.GIEH = 1; //INTCONの7bit目
- //高位割込み許可
- INTCONbits.GIEL = 1; //INTCONの6bit目
- //低位割込み許可
- while(BusyADC()); //AD変換が終わるまで待つ
- // configure USART
- OpenUSART(USART_TX_INT_OFF & //送信割込みの禁止
- USART_RX_INT_OFF & //受信割込みの禁止
- USART_ASYNCH_MODE & //非同期(調歩)モード
- USART_EIGHT_BIT & //8ビットモード
- USART_CONT_RX & //連続受信モード
- USART_BRGH_LOW, //低速ボーレート
- 77); //SPBRGレジスタ 9600 bps
- while (1)
- {
- ConvertADC(); //start A/D
- ADread = ReadADC(); //AD変換値読込み int
- itoa(ADread,buf_ad); //型変換
- putsUSART(ad_value); //
- putsUSART(buf_ad); //rs232c通信で送信
- putsUSART(str2); //改行
- putsUSART(v_value);
- press = ADread * 0.005;//電圧値を取得
- One_digit = press; //電圧値の整数部分
- itoa(One_digit,buf_ad); //型変換
- putsUSART(buf_ad); //送信
- WriteUSART('.'); //コンマの送信
- v_m = press*100 - One_digit*100;//小数点以下2桁取得
- itoa(v_m,buf_ad); //型変換
- putsUSART(buf_ad); //送信
- putsUSART(str2); //改行
- Delay10KTCYx(200); //wait about 0.8sec
- }
- CloseUSART();
- }
2010年11月21日日曜日
A/D変換-C18プログラミング-PIC18F2550
未完成
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿