mega328p-ADC,PWM,UART驱动

ADC驱动:

//****************************************************************/
//函 数 名: Ai_Init
//函数功能: Ai端口初始化
//输入参数: void
//输出参数: void
//返 回 值: void
//参考文档: void
//创 件 人: 程强刚
//创建日期: 2016/02/09
//修改历史: 
//****************************************************************/
void Ai_Init(void)
{
    // 外部引脚
    DDRC = 0X00;
    PORTC = 0X00;
    
    //基准设置(外部AVCC)
    ADMUX &= ~(1 << REFS1);
    ADMUX |= 1 << REFS0;
    
    DIDR0 = 0X3F;
    
    //转换数据对齐(右对齐)
    ADMUX &= ~(1 << ADLAR);
    ADMUX |= 0X01;
    //转换设置
    ADCSRA |= 1 << ADEN;                //开启ADC功能
    ADCSRA |= (1 << ADSC);             //转换开始
    ADCSRA |= 1 << ADATE;               //自动触发使能
    ADCSRA |= 1 << ADIF;                //清零完成标记
    ADCSRA &= ~(1 << ADPS2);            //ADC时钟分频系数 2
    ADCSRA &= ~(1 << ADPS1);
    ADCSRA |= 1 << ADPS0;
    
    //连续触发模式
    ADCSRB &= ~(1 << ADTS2);
    ADCSRB &= ~(1 << ADTS1);
    ADCSRB &= ~(1 << ADTS0);
    
    ADCSRA |= 1 << ADSC;                  //转换开始
}

//****************************************************************/
//函 数 名: Read_Ad
//函数功能: 读AD转换值
//输入参数: ucEn (bit0-bit7:通道0-通道7)
//输出参数: void
//返 回 值: AD结果
//参考文档: void
//创 件 人: 程强刚
//创建日期: 2016/02/09
//修改历史: 
//****************************************************************/
UINT16 Read_Ad(UCHAR ucEn)
{
    UCHAR ucCh;
    
    ucCh = ucEn & 0x07;
  
    //转换通道
    ADMUX &= ~0x07;
    ADMUX |= ucCh;
  
    ADCSRA |= 1 << ADSC;                  //转换开始
    while (!(ADCSRA & (1 << ADIF)))
    {//等待转换完成
        vTaskDelay(1);
    }
    ADCSRA |= 1 << ADIF;                //清零完成标记
    
    return (ADC & 0x3ff);
}

//****************************************************************/
//函 数 名: Get_Vol
//函数功能: 取电压值
//输入参数: ucEn 
//输出参数: void
//返 回 值: AD结果
//参考文档: void
//创 件 人: 程强刚
//创建日期: 2016/02/09
//修改历史: 
//****************************************************************/
float Get_Vol(UCHAR ucEn)
{
    UCHAR ucCh;
    UINT16 ui16Val;
    float fVal;
    
    ucCh = ucEn & 0x07;
  
    ui16Val = Read_Ad(ucCh);
    
    fVal = ui16Val * AI_REF / AI_FULL;
    
    return (fVal);
}
/*************************************************************
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值