View Single Post
Old 18-10-2010, 04:46 PM   #2
Meichan
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();

}
}
Meichan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn