View Single Post
Old 19-10-2010, 11:49 AM   #5
Meichan
Nhập môn đệ tử
 
Tham gia ngày: Jul 2010
Bài gửi: 5
:
Code mình sửa lại rồi. Nhưng chẳng hiểu sao LED nó cứ chập chờn nhỉ ?! Đau mắt quá.
Ai đó giải thích cho mình vì sao LED nó cứ nháy liên tục được ko ?!

__________________________________________________ _

#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 context;

unsigned short adc_read () {
if (!GODONE) {
GODONE = 1;
context = (ADRESH*256 + ADRESL);
}
return context; //return 8 MSB of the result
}

void delay_option (unsigned char counter) {
unsigned char tempt;
tempt = counter/10;
do {
_delay(10);
} while(--tempt);
}

void main(void) {
OSCCAL = _READ_OSCCAL_DATA();

ioport_adc();
unsigned short ad_value;
unsigned short light_time;
while (1){
ioport_adc();
ad_value = (adc_read()*VDD)/1023;
light_time = ((ad_value*2000)/VDD);
GPIO0 = 0;
delay_option(light_time);
GPIO0 = 1;
delay_option(2000-light_time);
}
}
Meichan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn