测试下ADC功能。
一、硬件电路
使用ADC3端口来采集模拟电压。
二、程序
2.1、main.c
- #include "config.h"
- void main(void)
- {
- uint i=0;
- uint adc_val;
- Init_led();
- Init_key();
- Init_uart(32, 9600);
- Init_rs485();
- uart_chl(1); //usb-ttl
- adc_test();
- while(1)
- {
- }
- }
2.2、adc.c
- #include "config.h"
- bit adcflag = 0;
- void Init_adc(uchar chl)
- {
- ADCCON = 0X80|chl;
- if(chl<8) //EADC
- {
- ADCCFG0=1<<chl;
- }
- else
- {
- ADCCFG1=1<<(chl-8);
- }
- //EADC=1;
- ADCCON &= ~(0X20);
- //IE |= 0X40;
- EA=1;
- }
- void ADC_Interrupt(void) interrupt 6
- {
- ADCCON &= ~(0X20);
- adcflag = 1;
- }
- //uint ADC_Readdata(uchar chl)
- //{
- // uint adcvalue=0;
- // Init_adc(chl);
- // ADCCON |= 0X40;
- // while(!adcflag);
- // adcflag=0;
- // adcvalue = (ADCVH<<4)+(ADCVL>>4);
- // return adcvalue;
- //}
- void adc_test(void)
- {
- uint adcvalue=0;
- uint i;
-
- Init_adc(3);
- while(1)
- {
- ADCCON |= 0x40;
- //while(!adcflag);
- while(!(ADCCON&0x20));
- ADCCON &= ~(0X20);
- adcflag=0;
- adcvalue = (ADCVH<<4)+(ADCVL>>4);
- uart_send_char(adcvalue>>8);
- uart_send_char(adcvalue);
- for(i=0;i<50000;i++);
- }
-
- }
2.3、adc.h
- #ifndef _ADC_H_
- #define _ADC_H_
- #define IC_MODEL SC95F8617
- void adc_test(void);
-
- #endif
三、测试结果
调整电位器,串口输出的数据变化。
|