请教斑竹,为什么调试窗口检测的结果与程序设计不符

2019-03-24 12:02发布

我在定时中断程序中实现软件启动adc12采样转换,中断程序的编写思想是:首先设置ENCADC12SC 启动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 =0x256results=0,第二次中断时 ADC12MEM3 =0x512 results= 0x256 ),请问这是为什么?另外,我这种启动ADC12单通道单次采样的程序写法是否正确? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
wstt
1楼-- · 2019-03-24 18:40
 精彩回答 2  元偷偷看……
zhy3928551
2楼-- · 2019-03-24 23:53
< :TI_MSP430_内容页_SA7 --> 断电设置在这一句啦,ADC12CTL0&= ~ENC;                  //disable convert
zzbaizhi
3楼-- · 2019-03-25 04:08
123333.jpg
1.按照你的程序运行了下,么有问题呀。要不你再多试几次,看看是不是总这样,在中断里设置一个计数标志位,当标志位等于n时,设置断点查看看results的值是不是和n-1时一样。你把ADC12初始化的程序也贴出来让大家看看
2.单通道单次采样转换时,这样写程序OK。不过我不明白为什么要_DINT(),进入中断后总中断默认关闭的,其他中断是不会进来的~

[ 本帖最后由 zzbaizhi 于 2013-11-26 15:42 编辑 ]
zhy3928551
4楼-- · 2019-03-25 07:33
 精彩回答 2  元偷偷看……
wstt
5楼-- · 2019-03-25 10:55
中断里面的那句中断关闭没有意义,其实已经关掉了

一周热门 更多>

相关问题

    相关文章