[AVR单片机] Mega8学习笔记-模拟比较器功能

[复制链接]
3511|5
 楼主| laslison 发表于 2009-12-14 22:03 | 显示全部楼层 |阅读模式
本帖最后由 laslison 于 2009-12-17 23:22 编辑

前言:关于运算放大器的比较器的应用知识先看看(大学里学了,再温习一遍吧,自己找资料)。关于mega8的模拟比较器我们可以这样理解,在单片机里有个运放就行了,很简单的,20分钟搞的定。

第六章:模拟比较器功能

主要的控制寄存器就两个,SFIOR ACSR。其中SFIOR 可以看成个选择开关,按照书上说的赋值就是了(有必要设置的时候才设置)。仔细研究一下ACSR

看完了,OK,开始实践吧,编一个比较AIN0 AIN1 大小的程序,若
AIN0
AIN1
之间的大小关系发生变化 ,则小led灯(串联330欧的电阻,正极接+5V,负极接PORTB.0---------如没有特殊说明,在本笔记中led小灯都是这种接法,即低电平点亮)亮2S

#i nclude <mega8.h>
#i nclude <delay.h>


interrupt [ANA_COMP] void anacomp_isr(void)
{


PORTB.0=0;


delay_ms(2000);

}

void init(void)
{


PORTB=0x01;


DDRB=0x01;


ACSR|=1<<3;


#asm("sei")

}


void main(void)
{

init();


while(1)


{


PORTB.0=1 ;


}

}

/*小记:一开始我在中断利用

if( ACSR&(1<<5)==0x00 )
这个语句,但调试结果不对,我就查原因,最中发现我在中断里 不管是用
if( ACSR&(1<<5)==0x00 )
还是
if( ACSR&(1<<5)
=0x00 )都不执行if里的语句,真是无奈了,查看资料说ACSR的第5为是只读,对啊,我这个句子就是读它啊,但就是读不出来,不是1也不是0,我就纳闷了,难道它是 0.5------狂晕!我到现在还是没查出来原因,若有谁知道,就帮我一下,告诉我其中的原因。用了一上午调试这个,被这个句子绊了--------10(数字量---瞬时也是非10)的现象还是头一次遇到!!!
love_life 发表于 2009-12-14 22:39 | 显示全部楼层
不错,学习了
lovelyegle 发表于 2009-12-16 22:27 | 显示全部楼层
wangwo 发表于 2009-12-17 21:53 | 显示全部楼层
字太小了
 楼主| laslison 发表于 2009-12-17 23:22 | 显示全部楼层
改了:)
linhai2009 发表于 2009-12-19 10:06 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

791

帖子

1

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