打印
[AVR单片机]

求助:那位帮看看这个AD采集程序出什么问题了

[复制链接]
2042|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cmy043|  楼主 | 2011-5-28 16:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果先进入外部中断0  能正常显示AD0通道采集的电压值  再进入外部中断1 也可以正常显示AD1通道采集的AD值  但这时再进入外部中断0 显示的却是AD1通道的值
还有 如果先进入外部中断1就只能显示AD1通道的值 再进入外部中断0还是显示AD1的值

#include <iom128v.h>                                      //AVR  M128  8M内部晶振
#include <macros.h>

float temp;

#pragma interrupt_handler int0_isr:2                       

void int0_isr(void)                                        //外部中断0
{

ADCSRA=0x00;
ADMUX|=0x00;                                            //选择AD0通道
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADSC);
while(!(ADCSRA&(1<<ADIF)));
ADCSRA|=~(1<<ADIF);
}


#pragma interrupt_handler int1_isr:3

void int1_isr(void)                                         //外部中断1
{

ADCSRA=0x00;
ADMUX|=0x01;                                              //选择AD1通道
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADSC);
while(!(ADCSRA&(1<<ADIF)));
  ADCSRA|=~(1<<ADIF);

}

#pragma interrupt_handler AD0:22

void AD0(void)                                           //AD中断
{
temp=((float)(ADC))*(5.000/1024.0);
Seg7_Led_float(temp);
}

void main(void)
{

DDRD=0xff;
PORTD=0xff;
CLI();
EICRA|=0X00;
EIMSK|=(1<<INT0)|(1<<INT1);
SEI();

while(1)
   {
    ;
    }

相关帖子

沙发
928315| | 2011-5-29 10:37 | 只看该作者
是不是数据读取的高位,低位问题,我记得好像数据没有读取到,会保持到下一次采样。

不过在中断里面做temp=((float)(ADC))*(5.000/1024.0)这样的运算确实不好。

使用特权

评论回复
板凳
cmy043|  楼主 | 2011-5-29 23:06 | 只看该作者
2# 928315
那请问应该怎么样处理啊 ??

使用特权

评论回复
地板
uabuntsu| | 2011-7-30 16:47 | 只看该作者
问题出在你给通道赋值上,你一开始是ADMUX|=0x00; 然后变成了ADMUX|=0x01;  下一次你希望是变成ADMUX|=0x00; 但是,ADMUX|=0x01;  执行之后,寄存器就是0x01了,你用0x00和0x01相与,结果是多少?还是0x01吧??这就是你的原因了!为了避免这样的问题,在赋值通道之前,首先对通道进行清零操作。

使用特权

评论回复
5
huiyuan2000| | 2011-8-1 16:15 | 只看该作者
长见识了 谢谢

使用特权

评论回复
6
joyme| | 2011-8-4 11:21 | 只看该作者
4楼正解,如果多通道采样,AD采样中断读数据后应该关闭所有AD通道,下一次触发在打开相应通道即可,带浮点运算应该放在主程序里做,把AD值保存到buffer里,置一个标志位,主程序查询标志位再做处理

使用特权

评论回复
7
selloy| | 2011-8-8 17:00 | 只看该作者
学习了!~

使用特权

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

本版积分规则

0

主题

27

帖子

0

粉丝