各位高手 能有时间帮我看一下51单片机AD转换的问题吗
高手,单片机是AT89s53,AD芯片是ADS7844N, 三个输入信号,现在就是检测不到,输出数据老是0.急死人了,求高手相助 shang PP ! MINI2440 发表于 2012-8-29 17:27 static/image/common/back.gifshang PP !
告诉我你的QQ,我加你吧 干嘛不用自带AD@! 网上一段程序!!
/*********************************************************************
** 功能描述:模数转换程序**
*********************************************************************/
#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);
};
} {:lol:}妹纸。。。上图啊,没图没程序咋看
页:
[1]