打印
[国产单片机]

求助分析STCAD转换程序

[复制链接]
2843|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
明天及以后|  楼主 | 2011-1-6 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 明天及以后 于 2011-1-6 22:04 编辑

我用STC12C5201AD写一个检测电压的程序,结果一直在检测是否转换成功的while循环里,成了死循环。帮我分析一下,哪里没有做到位,谢谢!
#include"D:\Program Files\keil\C51\INC\**\STC12C52.h"
sfr P1ASF=0x9d;
sfr ADC_RES=0xbd;
#define  AD_POWER 0x80;
#define  SPEED 0x00;
#define  AD_FLAG 0x10;
#define  AD_START 0x08;
#define  AD_CH2 0x04;
#define  AD_CH1 0x02;
#define  AD_CH0 0x01;
unsigned int a=0,b=0,c=0;
unsigned int ad_p17=0,ad_p16=0,d=0;
void start(); //上电初始化
void delay10(unsigned x);//延时子程序
void AD(unsigned char channel);//AD转换子程序
void main()
{
      start(); //上电初始化
      AD(6);
      if(ad_p16>ad_p17)
          {P37=0;P10=1;}
      else
          {P37=1;P10=0;}
      if(ad_p16==ad_p17)
          {P37=0;P10=0;}
}
void start() //上电初始化
{
//设置P3口
P3M1=0x00;
P3M0=0x00;
//设置P1口
P1M1=0xc0; //P1.6、P1.7为开漏,输入模式
P1M0=0xc0; //P1.6、P1.7为开漏,输入模式
//先让充电放电控制无效,指示灯全亮
P33=1;
P34=1;
P37=0;
P10=0;
P11=0;
P12=0;
P15=1;
P30=1;
P31=1;
//设置AD
P1ASF=0xc0; //选择P1.6、P1.7位模拟输入通道
}
void delay10(unsigned int x)
{
       for(b=x;b>0;b--)
           {
               for(c=6000;c>0;c--);
            }
//return;
}
void AD(unsigned char channel)
{
    unsigned char AD_finished=0;
    ADC_RES = 0;
    ADC_CONTR=0x60;  //70个时钟转换一次
    delay10(100);
    ADC_CONTR|=channel;           //选择 A/D 当前通道为P1.6
    delay10(100);
    ADC_CONTR|=0x80;           //启动 A/D 电源
    delay10(100);        //使输入电压达到稳定
    ADC_CONTR|=0x08;          //0000,1000 令 ADCS = 1, 启动A/D转换,
    while(AD_finished==0)        //等待A/D转换结束
    {
         AD_finished=ADC_CONTR&0x10; //0001,0000 测试A/D转换结束否
    }
    P12=0;
    ADC_CONTR&= 0xE7;         //1110,0111 清 ADC_FLAG 位, 关闭A/D转换,
    if(channel=6)
         ad_p16=ADC_RES;
    if(channel=7)
         ad_p17=ADC_RES;
    //return (ADC_RES);               //返回 A/D 高 8 位转换结果
}

上面的程序执行到“while(AD_finished==0)        //等待A/D转换结束”就成了死循环。请各位大侠分析了。谢谢!

相关帖子

沙发
明天及以后|  楼主 | 2011-1-7 23:50 | 只看该作者
解决了。谢谢!

使用特权

评论回复
板凳
autopccopy| | 2011-1-9 11:50 | 只看该作者
如何解决的呢?共享一下。。。

使用特权

评论回复
地板
明天及以后|  楼主 | 2011-1-10 12:45 | 只看该作者

#define  AD_POWER 0x80;
#define  SPEED 0x00;
#define  AD_FLAG 0x10;
#define  AD_START 0x08;
#define  AD_CH2 0x04;
#define  AD_CH1 0x02;
#define  AD_CH0 0x01;
后面的“;”去掉就OK了。

使用特权

评论回复
5
autopccopy| | 2011-1-10 20:36 | 只看该作者

...#define  AD_CH0 0x01;
后面的“;”去掉就OK了。 ...
明天及以后 发表于 2011-1-10 12:45


晕:dizzy: :L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

75

帖子

1

粉丝