┌─┬─┐ +5v
+5v ┤ ├ GND |
┤ ├470Ω-volume
Tx ┤ ├ |
+5V-1kΩ ┤ ├ GND
└───┘
ソース
675ad.c
#include <pic.h>
#include <stdio.h>
#include "delay.h"
#include "adc.h"
#include "putch.h"__CONFIG(UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);
__IDLOC(0100);
#define VDD 5000 /* 電源電圧 */
//#defineはある識別子や定数、式をほかの識別子で表す。この場合VDDは5000と同意ということ。電源電圧を変更した時はここを書き換えれば良い。
ioport();main()
{
unsigned long ad_data0;
unsigned short ad_data;
//変数の宣言
OSCCAL=_READ_OSCCAL_DATA();ioport();
ADIE=1; /* A/D変換が終わったときに起きる */
//A/D変換割り込みを使う(PIEレジスタ)
PEIE=1;
//A/D変換割り込みはPIEレジスタに入っているので
("\rVoltage\r\n);
//タイトル入れてみるwhile(1){
ioport();
DelayMs(250); /* 約1秒間ごと */
DelayMs(250);
DelayMs(250);
DelayMs(250);ad_data0=(long)adc(0)*VDD; /* AN0をA/D変換して電圧値に変換 */
//adc()を呼び出している 10ビットなのでデータ型はlong 引数の0はなに?←要調査
ad_data=ad_data0/1024; /* 割り算は切り捨てになるから */
if((ad_data0%1024)>=512) /* 四捨五入 */
++ad_data;
//ad_data0%1024はad_data0を1024で割ったあまりを意味する あまりが512より大きかったら1足すprintf("\r%4dmV",ad_data);
//printf関数:formatを標準出力に出力する \r→CR(行頭復帰) \n→LF(改行) %dはコンマの後ろの物を代入する %4d→スペース含めて4文字表示
//ヘッダファイル→stdio.h 標準出力→putch
}
}ioport()
{
GPIO4=1; /* GP4ピンの出力データを1にする */
TRIS4=0; /* GP4ピンは出力ピン */TRIS0=1; /* GP0ピンは入力ピン */
ANS0=1; /* AN0ピンをアナログ入力モードにする */
}
delay.c (PICC Lite Sample 前出)
adc.c
#include <pic.h>
#include "delay.h"unsigned short adc(unsigned char ch)
//関数adcから返るデータはunsigned short→16bit正 関数adcが受け取る引数chはunsigned char→8bit正
{
ADCON0=((ch<<2)&0x0C); /* アナログ入力チャネルを設定する */
//0x0C→1100 chを2bit左シフトし1100で論理積する・・・どういう意味だ?
//CHS1=0, CHS2=0にするとGP0/AN0を選択したことになるはずだがADON=1; /* A/Dコンバータを電源オンする */
ADFM=1; /* A/D変換結果を右詰めにする */ADCS0=1; /* A/D変換クロックはFRC */
ADCS1=1;
ADCS2=1; /* この場合ADCS2=0;でもFRC */
//スリープモードのままAD変換する場合FRCにする。DelayUs(20); /* 20usec待つ */
ADIF=0; /* ADIFを0にする 割り込みフラグビットADIF(PIR1にある)はAD変換が終わると1になる*/
GODONE=1; /* A/D変換開始 */asm("sleep"); /* スリープ・モードにする */
ADCON0=0;
return((ADRESH*256)+ADRESL);
}
putch.c
#include <pic.h>
#include "delay.h"void putch(unsigned char tx_byte) /* 約2400bps,8N1で1バイトだけ */
{ /* シリアル・データを送る */
unsigned char i;GPIO4=0; /* スタート・ビット */
DelayUs(12);
for(i=0;i<10;i++){
DelayUs(200);
DelayUs(196);GPIO4=(tx_byte&0x01); /* データ・ビット */
tx_byte>>=1;
tx_byte|=0x80; /* ストップ・ビットを作っておく */
}
}
ヘッダ
pic.h
stdio.h
delay.h (以上PICC Lite Sample)
adc.h
unsigned short adc(unsigned char);
putch.h
void putch(unsigned char);
さてさていったいどういうことになってるんだろうか?全然わからん。とくにシリアル通信のところ