请教(⊙_⊙)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) //空循环
{ }
}
实际测试只是执行了一次中断 ,不知道哪里搞错了 在中断处理程序里面,全局中断响应是被关闭的,在这种情况下进入sleep模式,中断是没法
唤醒系统的——因为被屏蔽了。所以你只能看到中断处理程序只被执行了一次。
尝试在中断的asm("sleep")前面加一句SEI(); 看看能不能解决。 万分感谢您在百忙中的回复,我加上SEI(); 结果也是一样。还望版主不惜赐教。 ldhavr 发表于 2013-4-9 09:00 static/image/common/back.gif
万分感谢您在百忙中的回复,我加上SEI(); 结果也是一样。还望版主不惜赐教。...
你把asm("sleep");从中断里面挪到超级循环里面看看。 是这样么?
while(1) //主循环
{
while(!(ADCSRA&(1<<ADIF)));
{
SEI();
SMCR = 0x03;// ADC的噪声抑制器使其可以在睡眠模式下进行转换
asm("sleep");
_NOP();
}
} 放到超级循环中可以。谢谢
页:
[1]