Pic16f946的ADC采集子程序不工作

[复制链接]
 楼主| reflecter 发表于 2008-10-8 10:05 | 显示全部楼层 |阅读模式
/*<br />A/D转化初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;ADSEL&nbsp;&nbsp;&nbsp;&nbsp;//ANS7,ANS6,ANS5,ANS4,ANS3,ANS2,ANS1,ANS0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//After&nbsp;POR:1,1,1,1,1,1,1,1;默认为模拟输入<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RE2,&nbsp;RE1,&nbsp;RE0,&nbsp;RA5,&nbsp;RA3,&nbsp;RA2,&nbsp;RA1,&nbsp;RA0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1,1,1,1,0,0,1,1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCON0&nbsp;&nbsp;&nbsp;&nbsp;//ADFM,VCFG1,&nbsp;VCFG0,CHS2,CHS1,CHS0,GO/DONE,ADON<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//After&nbsp;POR:0,0,0,0,0,0,0,0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//1,right&nbsp;justify,0,vss,0,vdd<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCON1&nbsp;&nbsp;&nbsp;&nbsp;//-,ADCS2,ADCS1,ADCS0,-,-,-,-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0,1,&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;0,0,0,0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />*/<br />&nbsp;&nbsp;&nbsp;&nbsp;//ADIF=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANSEL=0xff;&nbsp;&nbsp;&nbsp;&nbsp;//8个通道都打开;但程序中,尚未对chn2、3,进行处理<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCON0=0X81;&nbsp;&nbsp;&nbsp;&nbsp;//右对齐,VSS,VDD,ADON=1<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCON1=0x50;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;16Tosc,&nbsp;Tad=4us,@4MHz<br /><br />/********************************************************************<br />Function&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;:Collect_Data<br />Input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />Return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />Access&nbsp;Register:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />Description&nbsp;&nbsp;&nbsp;&nbsp;:最底层的按通道采集程序<br />Subroutine&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />stack&nbsp;Layers&nbsp;&nbsp;&nbsp;&nbsp;:0<br />Run&nbsp;Time(us)&nbsp;&nbsp;&nbsp;&nbsp;:<br />***********************************************************************/<br /><br />/*<br />A/D数据采集<br />注:在ADC采样通道转换时,要注意有一个延时<br />每一bit的AD转换时间为Tad,在下一次采集前,至少需要等待2Tad的时间.&nbsp;&nbsp;&nbsp;&nbsp;<br />*/<br />void&nbsp;Collect_Data&nbsp;(UC8&nbsp;chn)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCON0&nbsp;&nbsp;&nbsp;&nbsp;&=0x81;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;clear&nbsp;current&nbsp;channel&nbsp;select<br />&nbsp;&nbsp;&nbsp;&nbsp;ADCON0&nbsp;&nbsp;&nbsp;&nbsp;|=(chn&lt&lt2);//&nbsp;apply&nbsp;the&nbsp;new&nbsp;channel&nbsp;select<br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;延时至少2Tad时间<br />&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;DelayUs(8);<br />&nbsp;&nbsp;&nbsp;&nbsp;GODONE&nbsp;&nbsp;&nbsp;&nbsp;=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(GODONE)continue;//&nbsp;等待转换结束,转换结束GODONE自动被硬件清零<br />&nbsp;&nbsp;&nbsp;&nbsp;ADIF=0;&nbsp;&nbsp;&nbsp;&nbsp;//虽然没用中断,但是标志位还是要清零<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADC_Data.c[0]=ADRESL;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADC_Data.c[1]=ADRESH&nbsp;&&nbsp;0x03;//取10位A/D转换数据<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}<br /><br />/*<br />ADC,10Bit,右对齐,9..0,ADRESH[1..0]+ADRESL[7..0]<br />*/<br />union&nbsp;ADC_Value{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UC8&nbsp;c[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT16&nbsp;i;<br />}ADC_Data;&nbsp;&nbsp;//全局变量<br />
 楼主| reflecter 发表于 2008-10-8 15:08 | 显示全部楼层

偶调试找出原因了

这段代码运行正常,只是代码内中断更改配置的缘故。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部