SOURCE 공개
매뉴얼을 보시는 분에게 약간의 SOURCE를 공개 하겠습니다. 사용 하실 분은 하세요.
keil 컴파일러를 기준으로 작성 되어 있습니다.
1. ADC , DAC 초기화 |
#define OSC 14745600.0 #define NOR_OSC_DIVIDE 12 #define HIGH_BYTE(n) ((char)(n >> 8)) #define LOW_BYTE(n) ((char)(n & 0xff))
void OpenADC(int ms, char dac_onoff) /* LAUNCH ADC CONVERSIONS */ // --> adc { xdata unsigned int TM; EADC = 0; // disable adc ADCCON1 = 0x62; // 0,1, 1,0, 0,0, 1,0 // normal mode,adc_ clk=x_clk/4,획득시간, timer2 interrupt enable //adc_clk 는 osc클럭을 몇분주 해서 처리할껀지를 본다 //획득시간은 한개의 data를 읽어 들이기 위한 민감도조절로 //입력 포트의 누설 전류를 감안해야 하며 누설전류가 1m 에서 610옴 //10m에서 61옴이다. 입력측 임피던스가 적으면 1개의 주기로도 상관이 //없지만 임피던스가 커지면 내부 콘덴서 누설을 감안해 설정을 늘려야 한다. ADCCON2 = 0x00 ; // sellect chan#8 = temp chanal (초기 체널값)
TM = 0x10000 - (_uint)((ms * 1000.0) / (NOR_OSC_DIVIDE/(OSC/1000000.0))); TH0 = HIGH_BYTE(TM); TL0 = LOW_BYTE(TM);
RCAP2L = TL0 ; // timer2 인터럽트 걸린후 자동 타이머 셋팅값 (rcap2l, rcap2H) RCAP2H = TH0 ;
TL2 = TL0 ; TH2 = TH0 ;
if(dac_onoff == 1) DACCON=0x1F; //DAC mode : 12bit,DAC1(0-Vref),DAC0(0-Vref),DAC1 output normal,DAC0 output normal //,DACxL upload => output change, DAC1 power on , DAC0 power off
EADC = 1; //enable ADC interrupt TR2 = 1; //T2CON = 0x04 ; // run Timer2 } |
1. ADC 처리루틴 |
#define ADC_MAX_CH 5 //입력되는 체널
xdata int ADC_BUF_VLT[ADC_MAX_CH]; //중간값 저장 xdata int ADC_CNV_VLT[ADC_MAX_CH]; //전압값 저장 xdata char adc_end = 0; //외부에 인터럽트 처리 완료
void adc_int() interrupt 6 { // int6*8+3 = 51dec = 33hex = ADCI
unsigned char ch_chk;
int add_DA_M; // int add_DA_R;
if( (ADCCON3 & 0x80) == 0x80 ) return; //adconverting.. if(ch_chk<4) add_DA_M = (((ADCDATAH & 0x0F) <<8 ) | ADCDATAL); //add AD converter value else add_DA_M = (((ADCDATAH & 0x0F) <<8 ) | ADCDATAL); //add AD converter value
if(add_DA_M < 0) add_DA_M=0; add_DA_R = (int)((250.0/4096.0*(add_DA_M))*2.0); // Calculation = (reference/step) * converting values ch_chk = (ADCDATAH >> 4) & 0x0F; ADC_BUF_VLT[ch_chk] = (ADC_BUF_VLT[ch_chk] + add_DA_R)/2 ; ch_chk++;
if(ch_chk >= ADC_MAX_CH) { ch_chk = 0 ; adc_end ++; //adc 한번 변환이 끝났다고 알려줌 }
ADCCON2 = ch_chk; } |
'공부 > 8051' 카테고리의 다른 글
[ADUC812] ADUC812 설명 8 (0) | 2012.11.10 |
---|---|
[ADUC812] ADUC812 설명 7 (0) | 2012.11.10 |
[ADUC812] ADUC812 설명 5 (0) | 2012.11.10 |
[ADUC812] ADUC812 설명 4 (0) | 2012.11.10 |
[ADUC812] ADUC812 설명 3 (0) | 2012.11.10 |