测试下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
三、测试结果
调整电位器,串口输出的数据变化。
|