goodmoodnow 发表于 2010-8-4 16:27

关于C8051F410 的ADC问题

请各位帮帮我吧,我刚刚开始用C8051F410 的ADC和DAC,但是AD转换老出问题,采集不了外部电压,帮我看看ADC的配置以及时钟设置,谢谢了
//

#include "C8051F410.h"

#define SYSCLK          24500000 // SYSCLK频率(Hz)

// Peripheral specific initialization functions,
// Called from the Init_Device() function
void ADC_Init()
{
    ADC0MX    = 0x06;
   
      ADC0CN    = 0x80;
   
      ADC0TK    = 0xFB;

      ADC0CF = ((SYSCLK/6000000)-1)<<3;
    ADC0CF |= 0x00;                     // right-justify results
}

void DAC_Init()
{
    IDA0CN    = 0xF7;
}

void Voltage_Reference_Init()
{
    REF0CN    = 0x90;
}

void Port_IO_Init()
{
    // P0.0-Skipped,   Push-Pull,Analog
    // P0.1-Unassigned,Push-Pull,Digital
    // P0.2-Unassigned,Push-Pull,Digital
    // P0.3-Unassigned,Push-Pull,Digital
    // P0.4-Unassigned,Push-Pull,Digital
    // P0.5-Unassigned,Push-Pull,Digital
    // P0.6-Skipped,   Push-Pull,Analog
    // P0.7-Unassigned,Push-Pull,Digital

    // P1.0-Unassigned,Push-Pull,Digital
    // P1.1-Unassigned,Push-Pull,Digital
    // P1.2-Skipped,   Push-Pull,Analog
    // P1.3-Unassigned,Push-Pull,Digital
    // P1.4-Unassigned,Push-Pull,Digital
    // P1.5-Unassigned,Push-Pull,Digital
    // P1.6-Unassigned,Push-Pull,Digital
    // P1.7-Unassigned,Push-Pull,Digital

    // P2.0-Unassigned,Push-Pull,Digital
    // P2.1-Unassigned,Push-Pull,Digital
    // P2.2-Unassigned,Push-Pull,Digital
    // P2.3-Unassigned,Push-Pull,Digital
    // P2.4-Unassigned,Push-Pull,Digital
    // P2.5-Unassigned,Push-Pull,Digital
    // P2.6-Unassigned,Push-Pull,Digital
    // P2.7-Unassigned,Push-Pull,Digital

    P0MDIN    = 0xBE;
    P1MDIN    = 0xFB;
   
      P0MDOUT   = 0xFF;
    P1MDOUT   = 0xFF;
    P2MDOUT   = 0xFF;
   
      P0SKIP    = 0x41;
    P1SKIP    = 0x04;
   
      XBR1      = 0x40;
}

void Oscillator_Init()
{
   OSCICN = 0x87;                      // configure internal oscillator for
                                       // 24.5MHz
   RSTSRC = 0x04;                      // enable missing clock detector
}

void Interrupts_Init()
{
    EIE1      = 0x08;
    IE      = 0x80;
}

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    ADC_Init();
    DAC_Init();
    Voltage_Reference_Init();
    Port_IO_Init();
    Oscillator_Init();
    Interrupts_Init();
}

// Close      WDT
// Call WDT_DISABLE() from the main program
void WDT_DISABLE(void)
{
      EA=0;
      PCA0MD = ~0x40 ;
      EA=1;
}



void main(void)
{
//      unsigned char i = 0;
      WDT_DISABLE();         //关闭WDT;
      Init_Device();         //主初始化;


      while(1)
      {
//                for(i = 0;i < 32000;i++);
                AD0BUSY = 1;            //开AD
                while(AD0BUSY);         //等待AD转换结束
                while(AD0INT)
                {
                        IDA0L = ADC0L;
                        IDA0H = ADC0H;
                        
                        AD0INT = 0;
                }
      }
}

急救呀!!!!

ayan200112 发表于 2010-8-7 13:28

我有相关产品的程序
email:ayn200112@163.com
页: [1]
查看完整版本: 关于C8051F410 的ADC问题