bingbingliang 发表于 2012-8-29 17:06:54

各位高手 能有时间帮我看一下51单片机AD转换的问题吗

高手,单片机是AT89s53,AD芯片是ADS7844N, 三个输入信号,现在就是检测不到,输出数据老是0.急死人了,求高手相助

MINI2440 发表于 2012-8-29 17:27:57

shang PP !

bingbingliang 发表于 2012-8-29 17:43:24

MINI2440 发表于 2012-8-29 17:27 static/image/common/back.gif
shang PP !

告诉我你的QQ,我加你吧

MINI2440 发表于 2012-8-30 09:23:52

干嘛不用自带AD@!

MINI2440 发表于 2012-8-30 09:33:11

网上一段程序!!

/*********************************************************************
** 功能描述:模数转换程序**
*********************************************************************/   
#include "DSP28_Device.h"   
   
#define uint unsigned int   
#define DCLK GpioDataRegs.GPFDAT.bit.GPIOF13   
#define CS   GpioDataRegs.GPFDAT.bit.GPIOF12   
#define DINGpioDataRegs.GPFDAT.bit.GPIOF11   
#define DOUT GpioDataRegs.GPFDAT.bit.GPIOF9   
#define BUSY GpioDataRegs.GPFDAT.bit.GPIOF10   
   
void IOinit(void)   
{   
    EALLOW;   
    GpioMuxRegs.GPFDIR.bit.GPIOF13 = 1;   //GPIO F13为输出   
    GpioMuxRegs.GPFDIR.bit.GPIOF12 = 1;   //GPIO F12为输出   
    GpioMuxRegs.GPFDIR.bit.GPIOF11 = 1;   //GPIO F11为输出   
    CS=1;   DCLK=0;   
    EDIS;   
}   
   
uint ADS7844(void)   
{   
    uint temp,i;   
    CS=0;   
    temp=0x87;//控制字   
    temp<=8;   
    for(i=0;i<8;i++)   
      {   
            DCLK=0;   
            if((temp&0x8000)==0x8000)DIN=1;   
            else DIN=0;   
            temp<=1;   
            DCLK=1;   
      }   
    DCLK=0;   
    DCLK=1;   
    while(BUSY==0);   
    temp=0x00;   
    for(i=0;i<16;i++)   
      {   
            DCLK=0;   
            if(DOUT==1)temp|=0x01;   
            temp<=1;   
            DCLK=1;   
      }   
    DCLK=0;   
    CS=1;   
    temp>>=4;   
    return(temp);      
}   
   
void Spi_intial()   
{   
    SpiaRegs.SPICCR.all = 0x004F;    //使SPI处于复位模式, 下降沿,16位数据   
    SpiaRegs.SPICTL.all = 0x000d;    // 主控模式, 一般时钟模式,使能talk, 关闭SPI中断 0x000D:表示有延时   
    SpiaRegs.SPIBRR = 0x007F;      //配置波特率   
    SpiaRegs.SPICCR.all = SpiaRegs.SPICCR.all|0x0080; //退出复位状态      
    EALLOW;   
    GpioMuxRegs.GPFMUX.all = 0x000F;      //设置通用引脚为SPI引脚         
    EDIS;   
}   
void main(void)   
{   
    unsigned int i20,temp11,d_a_data;   
    InitSysCtrl();   
    IOinit();   
    EALLOW;   
    SysCtrlRegs.HISPCP.all = 0x3;// 高速外设模块时钟HSPCLK=SYSCLKOUT/6=25Mhz   
    EDIS;   
    DINT;         // 关闭总中断   
    IER = 0x0000; // 关闭外设中断   
    IFR = 0x0000; // 清中断标志   
    Spi_intial();       // SPI初始化子程序   
    /*
    SpiaRegs.SPITXBUF = 0xD002; // 初始化指令:DAC_A使能 内部参考,输出2.048
    while(SpiaRegs.SPISTS.bit.INT_FLAG != 1);
    SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;
    d_a_data=100;//(0--2047)
    for(i20 = 0; i20<2; i20++);
    SpiaRegs.SPITXBUF = 0xC000|d_a_data;// DAC_A置数   
    while(SpiaRegs.SPISTS.bit.INT_FLAG != 1);
    SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;
    temp11= ADS7844();
    */   
    d_a_data=2000;   
/*GpioDataRegs.GPBDAT.bit.GPIOB9= 0;                  */   
/*//DSP28x_usDelay(20);                                 */   
/*SpiaRegs.SPITXBUF = 0x5000|d_a_data; //0101         */   
/*   while(SpiaRegs.SPISTS.bit.INT_FLAG != 1){}         */   
/*   SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;             */   
/*   //DSP28x_usDelay(20);                              */   
/*   GpioDataRegs.GPBDAT.bit.GPIOB9= 1;               */   
   
    //DSP28x_usDelay(20);   
    GpioDataRegs.GPBDAT.bit.GPIOB9= 0;   
    //DSP28x_usDelay(20);   
    SpiaRegs.SPITXBUF = 0xc000|d_a_data;// DAC_A置数   
    while(SpiaRegs.SPISTS.bit.INT_FLAG != 1){}   
    SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;   
    //DSP28x_usDelay(20);   
    GpioDataRegs.GPBDAT.bit.GPIOB9= 1;   
   
    while (1)   
    {   
      
    DSP28x_usDelay(205630);   
      
   
   
    };   
}   

zjk 发表于 2012-8-30 13:32:57

{:lol:}妹纸。。。上图啊,没图没程序咋看
页: [1]
查看完整版本: 各位高手 能有时间帮我看一下51单片机AD转换的问题吗