我在定时中断程序中实现软件启动adc12采样转换,中断程序的编写思想是:首先设置ENC和ADC12SC 来启动adc采样,然后就是等待,实时判断ADC12IFG3这个转换标志位是否为1,当标志位置1时,我认为转换完成,这时读取ADC12MEM3的值并赋给results,具体程序如下:
///interrupt [TIMERA0_VECTOR] voidTimerA_ISR(void)#pragmavector=TIMERA0_VECTOR__interrupt voidTimerA_ISR(void){ _DINT(); //disablethe interrupt ADC12CTL0|= ENC+ADC12SC; //软件启动adc12 do { _NOP(); } //等待adc模数转换完成,若转换完成 //ADC12IFG3将被置位 while(ADC12IFG&BIT3==0); results =ADC12MEM3; //若ADC12IFG3=1,读取ADC12MEM3数值并赋给中间变量results ADC12CTL0&= ~ENC; //disable convert _EINT(); //enable theinterrupt}
在调试中,发现watch窗口中的中间变量results值并不等于 ADC12MEM3的值,而是等于上一次中断时ADC12MEM3的值(举例说明:第一次中断时 ADC12MEM3 =0x256,results=0,第二次中断时 ADC12MEM3 =0x512, results= 0x256 ),请问这是为什么?另外,我这种启动ADC12单通道单次采样的程序写法是否正确?
此帖出自
小平头技术问答
一周热门 更多>