18-10-2010, 04:46 PM | #2 |
Nhập môn đệ tử
Tham gia ngày: Jul 2010
Bài gửi: 5
: |
Code:
---------------------------------------------------------------- #include <pic.h> #ifndef _XTAL_FREQ #define _XTAL_FREQ 4000000 #endif __CONFIG(UNPROTECT & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO); __IDLOC(0100); #define VDD 5000 void ioport_adc() { GPIO0 = 0; //output value TRIS0 = 0; //output pin ANS0 = 0; //digital pin TRIS1 = 1; //input pin ANS1 = 1; //analog input pin ADON = 1; //ADコンバータを電源オンする ADFM = 1; //AD変換結果データは右詰めるにする ADCS0 = 1; //AD 変更クロックをFosc/8にする ADCS1 = 0; ADCS2 = 0; CHS0 = 1; // AN1ピンの電圧をAD交換する CHS1 = 0; _delay(1000); ADIF = 0; //割り込みフラグ。ピットを0にする ADIE = 1; // PIE1レジスタに関連する割り込みを使 PEIE = 1; GIE = 0; //we don't want interrupt } unsigned short adc_read () { GODONE = 1; _delay(1000); while (GODONE); return (ADRESH*256 + ADRESL); //return 8 MSB of the result } void putch(unsigned char tx_byte) { unsigned char i; GPIO0 =0; _delay(1000); for(i=0; i<8; i++) { _delay(200); GPIO0 = (tx_byte&0x01); tx_byte>>=1; tx_byte |= 0x80; } } void adc_control () { unsigned short volts; ADIE = 1; PEIE = 1; while (1) { ioport_adc(); _delay(200); _delay(200); _delay(200); volts = (long)adc_read()*(VDD/255); putch(volts); } } void main(void) { OSCCAL = _READ_OSCCAL_DATA(); ioport_adc(); while (1){ adc_control(); } } |
|
|