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

[复制链接]
988|0
 楼主| ddllxxrr 发表于 2014-11-7 22:07 | 显示全部楼层 |阅读模式

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

Proteus运行截图:

Studio 编译通过载图:

程序清单:
  1. /*
  2. * GccApplication12.c
  3. *
  4. * Created: 2014-11-7 21:12:17
  5. *  Author: Administrator
  6. */

  7. #include <avr/interrupt.h>
  8. #include <avr/io.h>
  9. #include <stdint.h>
  10. #define LED0_ON() (PORTC&=0xFE)
  11. #define LED0_OFF()(PORTC |= 0x01)
  12. #define LED1_ON() (PORTC &= 0xEF)
  13. #define LED1_OFF() (PORTC |=0x10)


  14. int main(void)
  15. {
  16.     DDRB = 0x00;
  17.         DDRC = 0xFF;
  18.         SFIOR &= ~_BV(ACME);
  19.         SFIOR |= _BV(PUD);
  20.         ACSR = _BV(ACIE);
  21.         sei();
  22.         while(1);
  23. }

  24. ISR(ANA_COMP_vect)
  25. {
  26.         if(ACSR &_BV(ACO))
  27.         {
  28.                 LED0_ON();LED1_OFF();
  29.                
  30.         }
  31.         else
  32.         {
  33.                 LED0_OFF();LED1_ON();
  34.         }
  35. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2404

主题

7002

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部