/***********************************************
**** AVR 模拟比较器使用范例 ***
**** ***
**** 作者: HJJourAVR ***
**** 编译器:WINAVR20050214 ***
***********************************************/
/*
本程序简单的示范了如何使用ATMEGA16的模拟比较器
模拟比较器的设置
中断方式--较常用
查询方式不常用,检测ACO即可,可用作DELTA-SIGMA A/D CONVERTER,校正后精度比较高,但速度低,用汇编可以略为提高速度。
出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器
*/
#include
#include
#include
#include
/*
宏INTERRUPT 的用法与SIGNAL 类似,区别在于
SIGNAL 执行时全局中断触发位被清除、其他中断被禁止
INTERRUPT 执行时全局中断触发位被置位、其他中断可嵌套执
另外avr-libc 提供两个API 函数用于置位和清零全局中断触发位,它们是经常用到的。
分别是:void sei(void) 和void cli(void) 由interrupt.h定义
注: 内部函数_delay_ms() 最高延时 262.144mS@1MHz
该函数可以实现较精确的定时,但用JTAG仿真时较麻烦---会进入机器码窗口(Disassembeler).注意跳开该语段。
一旦JTAG仿真进入该内部函数语句,会变得像"死机"一样(其实在运行中),可以先[break],然后在后面的C语句设[breakpoint],[RUN]跳过
?for()/while()语句计算延时时间较麻烦。
为了使 _delay_ms()函数的延时正确,须在makefile中设定F_CPU为实际的系统时钟频
本范例为1MHz内部RC振荡器 即 F_CPU=1000000
*/
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !