打印
[家电应用]

如何写多个通道的ADC转换,检测多个电源值?

[复制链接]
739|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
寻思远|  楼主 | 2016-8-3 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void adc_init(void)
{
ADCON=Bin(10010010);/* 使能ADC模块,使用外部参考电压 */
ADT=Bin(11100111);
/*ADC时钟为系统时钟的32分频,T(ad)=32/12M)=8/3us
ADC采样时间为15个ADC时钟 T(s)= (14+1)*T(ad) = 40us
ADC全部转换时间=12tAD+采样时间=12*(8/3)+40=72us*/
ADCH = Bin(00000010);/* P4.1用作ADC通道1  AN1 */
ADCON |= Bin(00000001);        /*设置开始AD转换*/
EADC=1;
}



void adc(void)interrupt 6 //ADC中断
{
EA=0;
ADCON &= Bin(10111111);        /* 清ADC中断请求标志,ADCIF=0 */
adc_num+=ADDH; //将采样寄存器的值
if(++num1==256)                /* 计数器:AD采样次数计数器 */
   {
          num2=HIBYTE(adc_num);       
      adc_num = 0x00;/* 清AD值寄存器 */
          num1= 0x00;/* 清256次计数器 */
          ADCON &= Bin(01111111);        /* 关闭ADCs */
     }
   adc_temp=(ulong)num2*(5000/1024);
   ADCON |= Bin(00000001);                                                                        //GO/DONE标志

   EA=1;
}

void main(void)
{  
CLK_Init();//初始化时钟
GPIO_Init(); //初始化引脚
adc_init();//ADC初始化
timer2();//定时器初始化

System_DelayMicrosecond(500);
/*---------------------------数码管自检显示-------------------------------*/
NixieTube_DisplayOff(0x01);//关闭数码管模块1显示,避免开机显示乱码
NixieTube_DisplayOff(0x02);//关闭数码管模块1显示,避免开机显示乱码

while(1)
{
//adc_valuve=adcprocess();//获取ADC的值
//adc_temp=(ulong)adc_valuve*(5000/1024);
NixieTube_DisplayIntegerNumber(adc_temp,0x02);

}

}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

1

粉丝