ldhavr 发表于 2013-4-8 09:30:30

请教(⊙_⊙)mega48如何实现连续的ADC噪声抑制模式采样?

虚心求教
在ICCAVR中我是这样写的:

#pragma interrupt_handler adc_isr:iv_ADC   //ADC中断函数
void adc_isr(void)               
{
SMCR&=0xFE;
_PB1^=1;
////读取ADC的值
//略
ADMUX = 0xC0;
ADCSRA=0x8e;
SMCR = 0x03;                         /ADC噪声抑制模式
asm("sleep");                         //休眠使能。
}

void main (void)               

{
ADMUX = 0xC0;
ADCSRA=0x8e;                     //ADC初始化 ,允许ADC中断
SMCR = 0x03;                         /ADC噪声抑制模式
asm("sleep");                         //休眠使能。
   while(1)         //空循环
    {      }
}
实际测试只是执行了一次中断 ,不知道哪里搞错了

Gorgon_Meducer 发表于 2013-4-8 11:06:47

在中断处理程序里面,全局中断响应是被关闭的,在这种情况下进入sleep模式,中断是没法
唤醒系统的——因为被屏蔽了。所以你只能看到中断处理程序只被执行了一次。
尝试在中断的asm("sleep")前面加一句SEI(); 看看能不能解决。

ldhavr 发表于 2013-4-9 09:00:11

万分感谢您在百忙中的回复,我加上SEI(); 结果也是一样。还望版主不惜赐教。

Gorgon_Meducer 发表于 2013-4-9 12:23:05

ldhavr 发表于 2013-4-9 09:00 static/image/common/back.gif
万分感谢您在百忙中的回复,我加上SEI(); 结果也是一样。还望版主不惜赐教。...

你把asm("sleep");从中断里面挪到超级循环里面看看。

ldhavr 发表于 2013-4-9 14:46:23

是这样么?
while(1)         //主循环
    {
        while(!(ADCSRA&(1<<ADIF)));
{
SEI();
   SMCR = 0x03;// ADC的噪声抑制器使其可以在睡眠模式下进行转换
asm("sleep");
_NOP();
}
}

ldhavr 发表于 2013-4-10 12:04:37

放到超级循环中可以。谢谢
页: [1]
查看完整版本: 请教(⊙_⊙)mega48如何实现连续的ADC噪声抑制模式采样?