2010年11月21日日曜日

A/D変換-C18プログラミング-PIC18F2550

未完成



  1. /* 
  2. 概要:A/D変換値をRS232C通信で送信 
  3.  
  4. HID - Bootloaderを使った書き込み 
  5.  
  6. マイコン:PIC18F2550 
  7.  
  8. ファイル名:RS232C.c 
  9.  
  10. 開発環境:MPLAB C18 
  11.  
  12. */  
  13.   
  14. #include <p18f2550.h>  
  15. #include <usart.h>  
  16. #include <stdio.h>  
  17. #include <adc.h>  
  18. #include <stdlib.h>  
  19. #include <delays.h>  
  20.   
  21. // リセットベクタ    
  22. #pragma code reset_vector=0x1000  
  23.   
  24. extern void _startup(void);  
  25. void remapped_reset(void) { _asm goto _startup _endasm}  
  26.   
  27. #pragma code  
  28.   
  29. void main (void){  
  30. char ad_value[10] = "AD=";  
  31. char v_value[10] = "Volt=";  
  32. char str2[8] ="\r\n";  
  33.   
  34. int ADread;  //AD変換値  
  35. char buf_ad[3]; //一時的に保存  
  36. double press; //電圧値整形前  
  37. int One_digit; //電圧値の整数部分  
  38. int v_m;  //小数点以下2桁  
  39.    
  40.  TRISA = 0b00001001;     //RA0,A/D input RA3 Vref input  
  41.  TRISB = 0;              //all output  
  42.  TRISC = 0;        //all output  
  43.    
  44.  LATC = 0;    //ポートCの出力ラッチCすべてに0:OFFを出力  
  45.    
  46.  ADCON0 = 0b00000001; //bit0=1 AD変換開始  
  47.        //bit3,4,5の000でAN0を一つのだけのポートに指定  
  48.  ADCON1 = 0b00011101; //アナログ入力ポートの使い方の設定  
  49.        //bit4,5の0,1でVss、AN3/Vref+  
  50.        //bit0,1,2,3の1101でAN0,AN1がアナログ他はデジタル  
  51.  ADCON2 = 0b10110110; //bit0,1,2 の110で64Tosc  
  52.        //bit3,4,5の110で16TAD  
  53.    
  54.  T0CON = 0b10000110;     //Timer0 の設定  
  55.        //bit0,1,2 110 プリスケーラ使用時の倍率指定256  
  56.        //bit3=0 プリスケーラ使用有無 使用する   
  57.        //bit4=0 立ち上がり   
  58.        //bit5=0 TMR0クロックソース選択 命令サイクル   
  59.        //bit6=0 16ビットモード   
  60.        //bit7=1 TMR0有効  
  61.    
  62.    
  63.  INTCONbits.TMR0IE = 1;  // Timer0 Interrupt Enable  
  64.    
  65.  RCONbits.IPEN = 1;      // Interruput Priority Enable  
  66.  INTCON2bits.TMR0IP = 0; // Timer0 Interrupt is Low Priority  
  67.    
  68.  INTCONbits.GIEH = 1; //INTCONの7bit目  
  69.        //高位割込み許可  
  70.  INTCONbits.GIEL = 1; //INTCONの6bit目  
  71.        //低位割込み許可  
  72.    
  73.  while(BusyADC());       //AD変換が終わるまで待つ  
  74.   
  75.  // configure USART    
  76.  OpenUSART(USART_TX_INT_OFF & //送信割込みの禁止    
  77.  USART_RX_INT_OFF &       //受信割込みの禁止    
  78.  USART_ASYNCH_MODE &      //非同期(調歩)モード    
  79.  USART_EIGHT_BIT &      //8ビットモード    
  80.  USART_CONT_RX &        //連続受信モード    
  81.  USART_BRGH_LOW,        //低速ボーレート    
  82.  77);             //SPBRGレジスタ 9600 bps    
  83.   
  84.  while (1)  
  85.  {  
  86.   ConvertADC();   //start A/D  
  87.   ADread = ReadADC();     //AD変換値読込み int  
  88.   itoa(ADread,buf_ad); //型変換   
  89.   putsUSART(ad_value); //  
  90.   putsUSART(buf_ad);  //rs232c通信で送信  
  91.   putsUSART(str2);  //改行  
  92.   putsUSART(v_value);  
  93.   press = ADread * 0.005;//電圧値を取得  
  94.   One_digit = press;  //電圧値の整数部分  
  95.   itoa(One_digit,buf_ad); //型変換   
  96.   putsUSART(buf_ad);  //送信  
  97.   WriteUSART('.');  //コンマの送信  
  98.   v_m = press*100 - One_digit*100;//小数点以下2桁取得  
  99.   itoa(v_m,buf_ad);  //型変換   
  100.   putsUSART(buf_ad);  //送信  
  101.   putsUSART(str2);  //改行  
  102.     
  103.   Delay10KTCYx(200);  //wait about 0.8sec  
  104.   
  105.  }  
  106.    
  107.  CloseUSART();  
  108. }  

0 件のコメント:

コメントを投稿