打印
[Atmel]

用AtmelStudio6.2跑mega16例程(49)模拟比较器

[复制链接]
815|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

本例程序运行时,模拟比较器的正极AN0与负极AN1所输入法的模拟电压将进行比较,如果AN0上的电压高于AN1上的电压,LED0点亮。
主程序将特殊功能I/O寄存器SFIOR中的ACME位清零,使AIN1连接比较器的负极输入端,在ADCSRA中的ADEN为0时,如果将ACME置位,模拟比较器将ADC的多路输入作为负极输入端。将SFIOR中的PUD置位,彬内部上拉电阻。将ACSR中的ACIE位置位,以允许模拟比较器中断。

Proteus运行截图:

Studio 编译通过载图:

程序清单:
/*
* GccApplication12.c
*
* Created: 2014-11-7 21:12:17
*  Author: Administrator
*/

#include <avr/interrupt.h>
#include <avr/io.h>
#include <stdint.h>
#define LED0_ON() (PORTC&=0xFE)
#define LED0_OFF()(PORTC |= 0x01)
#define LED1_ON() (PORTC &= 0xEF)
#define LED1_OFF() (PORTC |=0x10)


int main(void)
{
    DDRB = 0x00;
        DDRC = 0xFF;
        SFIOR &= ~_BV(ACME);
        SFIOR |= _BV(PUD);
        ACSR = _BV(ACIE);
        sei();
        while(1);
}

ISR(ANA_COMP_vect)
{
        if(ACSR &_BV(ACO))
        {
                LED0_ON();LED1_OFF();
               
        }
        else
        {
                LED0_OFF();LED1_ON();
        }
}

相关帖子

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6950

帖子

67

粉丝