×
单片机 > 单片机程序设计 > 详情

ATmega8的模拟比较器的总结

发布时间:2020-06-04 发布时间:
|

1、当ACBG=1时,使用内部能隙基准源(1.23V)做AIN0端的电压,ACME=0、ADEN=0时外界电压作AIN1端的电压。当外界电压小于1.23V时,红灯亮。否则,绿灯亮。模拟比较器段初始化程序设计:
void ac_init(void)
{
        //{{WIZARD_MAP(Analog Comparator)
        // Interrupt on Output Toggle
        // Bandgap Enabled
        // Multiplexer Disabled
        ACSR = 0x48;
        SFIOR |= 0x0;
        //}}WIZARD_MAP(Analog Comparator)
}

ISR(SIG_COMPARATOR)
{
        // TODO: Add your code here
        if(ACSR & _BV(ACO))
        {
                SET_RED_LED;
                CLR_GRE_LED;
        }
        else
        {
                CLR_RED_LED;
                SET_GRE_LED;
        }
}
 
2、不使用内部的能隙基准源,模拟比较器的AIN0、AIN1两端口都直接接外界的电压,直接比较外部的两个电压的状况。当AIN0void ac_init(void)
{
        //{{WIZARD_MAP(Analog Comparator)
        // Interrupt on Output Toggle
        // Bandgap Enabled
        // Multiplexer Disabled
        ACSR = 0x08;
        SFIOR |= 0x0;
        //}}WIZARD_MAP(Analog Comparator)
}

ISR(SIG_COMPARATOR)
{
        // TODO: Add your code here
        if(ACSR & _BV(ACO))
        {
                SET_RED_LED;
                CLR_GRE_LED;
        }
        else
        {
                CLR_RED_LED;
                SET_GRE_LED;
        }
}
 
3、模拟比较器的AIN0端接外部电压,AIN1端接模数转换的多路输入端,对两端口的状态的比较。模拟比较器负极输入使用参考表:
 
当AIN0void ac_init(void)
{
        //{{WIZARD_MAP(Analog Comparator)
        // Interrupt on Output Toggle
        // Bandgap Enabled
        // Multiplexer Disabled
        ACSR = 0x08;
        SFIOR |= 0x08;
ADCSRA=0x00;
ADMUX=0x00;
        //}}WIZARD_MAP(Analog Comparator)
}

ISR(SIG_COMPARATOR)
{
        // TODO: Add your code here
        if(ACSR & _BV(ACO))
        {
                SET_RED_LED;
                CLR_GRE_LED;
        }
        else
        {
                CLR_RED_LED;
                SET_GRE_LED;
        }
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析