2726|1

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

哪位高手帮我看看,STC12c5410ad,为什么AD采集结果老是00 [复制链接]

STC12c5410ad,为什么AD采集结果老是0。

#include "reg51.h"
#include "intrins.h"
#include "164.h"
#include "math.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define uchar unsigned char
/*Declare SFR associated with the ADC */
sfr ADC_CONTR   =   0xC5;           //ADC control register
sfr ADC_DATA     =   0xC6;           //ADC high 8-bit result register
sfr ADC_LOW2    =   0xBE;           //ADC low 2-bit result register
sfr P1M0        =   0x91;           //P1 mode control register0
sfr P1M1        =   0x92;           //P1 mode control register1

/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER   0x80            //ADC power control bit
#define ADC_FLAG    0x10            //ADC complete flag
#define ADC_START   0x08            //ADC start control bit
#define ADC_SPEEDLL 0x00            //420 clocks
#define ADC_SPEEDL  0x20            //280 clocks
#define ADC_SPEEDH  0x40            //140 clocks
#define ADC_SPEEDHH 0x60            //70 clocks
void InitADC();
BYTE GetADCResult(BYTE ch);
void delay(WORD n);
void display();
sbit sw=P1^5;
sbit gw=P1^4;
float AD_temp;
char shu;
uchar a,b;
void main()
{
    sw=0;
    gw=0;
                
    InitADC();
    AD_temp=GetADCResult(0xe3);
    AD_temp*=10;
    a=(int)AD_temp%10;
    b=(int)AD_temp/10;
    while (1)
    {
     display();
   
    }
}

Get ADC result
----------------------------*/
BYTE GetADCResult(BYTE ch)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDH | ch | ADC_START;
    _nop_();                        //Must wait before inquiry
    _nop_();
    _nop_();
    _nop_();
    while ((ADC_CONTR & ADC_FLAG)!=0);//Wait complete flag
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC
    return ADC_DATA;                 //Return ADC result
}

Initial ADC sfr
----------------------------*/
void InitADC()
{
    P1M0 = P1M1 = 0x08;        //Set all P1 as Open-Drain mode
    ADC_DATA = 0;                    //Clear previous result
    ADC_CONTR = ADC_POWER | ADC_SPEEDH;
    delay(2);                       //ADC power-on and delay
}

Software delay function
----------------------------*/
void delay(WORD n)
{
    WORD x;

    while (n--)
    {
        x = 5000;
        while (x--);
    }
}
void display()
{
            gw=1;
         sendbyte(a);    
   delay(1);
   gw=0;
          
   sw=1;
   sendbyte(b);    
   delay(1);
      sw=0;
}

说明几点:

1.AD转换是使用内部晶振,P1.3做AD检查电压口。

2.请帮我看看蓝色部分程序。

3.是不是晶振用得不对,还是程序结构有问题。

4.我用直接赋值试过,显示电路可以显示所赋值结果。

此帖出自单片机论坛

最新回复

对程序我不太懂。。。 想请教下楼主,是在什么编译环境下编写程序的呢?怎么设置呀? 谢谢楼主!  详情 回复 发表于 2012-2-1 22:25

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

799

帖子

0

TA的资源

纯净的硅(中级)

沙发
 

回复 楼主 SHT112 的帖子

对程序我不太懂。。。
想请教下楼主,是在什么编译环境下编写程序的呢?怎么设置呀?
谢谢楼主!
此帖出自单片机论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表