打印
[AVR单片机]

Mega8学习笔记-模拟比较器功能

[复制链接]
2708|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 | 只看该作者
字太小了

使用特权

评论回复
5
laslison|  楼主 | 2009-12-17 23:22 | 只看该作者
改了:)

使用特权

评论回复
6
linhai2009| | 2009-12-19 10:06 | 只看该作者
学习了

使用特权

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

本版积分规则

95

主题

791

帖子

1

粉丝