C8051F020 用向AD0BUSY写1方式 AD0问题

2020-02-04 09:28发布

请大侠看看我的程序问题在哪里 十分感谢  不用考虑7289先 就转换 在线仿真 ADC0H 和ADC0L 没结果
#include <C8051F020.h>
#include "ad_initial.h"
#include "ZLG7289.h"

#define  VREF0 2.43    //内部基准电压为2.43V


void DelayMs(unsigned int n)//延时(n)MS
{
        unsigned int i;
        for(;n>0;n--)
        {
                for(i=2211;i>0;i--);
        }
}

void SysClkInit(void)//配置系统时钟
{
   int i;                              

   OSCXCN = 0x67;                      // 使用外部24M晶振
                                      

   for (i=0; i < 256; i++) ;           // 延时大于1ms

   while (!(OSCXCN & 0x80)) ;          // 查询是否稳定起振

   OSCICN = 0x88;                      // 切换到外部晶振
                                       
}

void SystemInit(void)//系统配置
{
        PCA0MD&=~0x40;//禁止看门狗定时器
        //EA=1;
}

void PortInit(void)//端口配置
{
   P0MDOUT = 0XFF;
   P1MDOUT = 0XFF;
   P2MDOUT = 0XFF;
   P3MDOUT = 0XFF;
   P74OUT = 0XFF;
}

void main(void)
{
       
        //uint sum;
        //uchar table[3];
        float dat;
        float output;
        SystemInit();//系统配置
        SysClkInit();//配置系统时钟
        PortInit();//端口配置
/*        DelayMs(300); //延时300ms,等待ZLG7289 复位完毕
        //ZLG7289_Init(40); //调用ZLG7289 的初始化函数
        DelayMs(1000);
        ZLG7289_Test();
        DelayMs(2000);
        ZLG7289_Reset();
        DelayMs(1000);*/

        ADC0_Init();
        AD0EN=1;
        while(1)
        {
                                                       
                        AD0INT=0;              //清除转换结果
                        AD0BUSY=1;                           //启动转换
                        DelayMs(10);
                        while(!AD0INT);        //等待AD0INT=1;
                                                                       
                        dat=ADC0H*256+ADC0L;                       
                        output=2.43/4096*dat;                       
                        DelayMs(100);
       
               
        /*        sum = output*100;
                table[0]=sum/100;
                table[1]=sum%100/10;
                table[2]=sum%100%10;

                ZLG7289_Download(0,0,1,table[0]);
                   ZLG7289_Download(0,1,0,table[1]);
                ZLG7289_Download(0,2,0,table[2]);*/


        }
}
void ADC0_Init (void)
{
        REF0CN=0x03;        //使用VREF0电压基准
        AMX0CF=0x00;        //选择单端输入
        AMX0SL=0x00;        //选择AIN0输入
        ADC0CF=0x80;        //ADC转换时钟2.5M 增益为1
        ADC0CN = 0x41;   // 关闭ADC0; 低能追踪模式
                           // ADC0使用向AD0BUSY写1做转换源
                         //使用左对齐输出模式
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
wanderhope
2020-02-04 23:58
PCA0MD&=~0x40;//禁止看门狗定时器 ------ 这句跟看门狗可没关系。

void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}
这是禁止看门狗的。

ADC0CF=0x80;        //ADC转换时钟2.5M 增益为1 ------这样配置出来,ADC的转换时钟没有2.5M

c8051fxxx系列的有专用的初始化配置软件,建议使用。

一周热门 更多>