在ADC_init()AD初始化函数中打开了ADC12IE中断,在ADC12ISR中断函数中需不需要将ADC12IE关掉?
我的程序出现两个问题:
问题1:如果在#pragma vector=ADC_VECTOR __interrupt void ADC12ISR (void) 中断函数中不把ADC12IE关掉的话,程序不会跳出ADC12ISR中断函数?
问题2:如果在中断函数中把ADC12IE关掉的话,程序跑了一段时间(这个时间不固定)AD就不再采集,LCD也不再刷新?
请大侠们看看是什么原因,谢谢!
此帖出自
小平头技术问答
你只开了ADC的中断,那么就是ADC中断,在然后会关闭全局中断使能,也就是说在处理一个中断的时候,不再会相应任何可屏蔽中断。
所以你的代码如果从中断服务函数中出不来,可能是出现了死循环或者系统复位的情况。
中断中关掉ADC12IE是可以的,但是在处理结束的时候需要打开才能相应下一次的中断。
你可以到我的空间中看下中断的响应过程,可能对你有帮助。
http://home.eeworld.com.cn/my/sp ... o=blog&id=42042
还有点疑问:
1、在你的回复中提到我的“中断服务函数中出不来,可能是死循环或系统复位”这点有点不解,因为我的中断服务函数只有简单的2个赋值语句“Result = ADC12MEM0;和Volt=(Result*3.3)/4095”,应该不会出现死循环吧!?,但是程序就是回不到main里执行LCD显示函数Dis_Volt()函数(因为液晶没有显示,我单步调试,进入中断后出不去!);
2、我在中断函数中关闭了ADC12IE,在ADC_init()AD初始化函数有重新打开ADC12IE(ADC12IE |=0x01),但是奇怪的是会出现我前面说的情况:程序跑了一段时间(这个时间不固定)AD就不再采集,LCD也不再刷新!!
注:刚学的430,如有不当,请指正,谢谢!
一周热门 更多>