已回答假定已回答

读写程序如下

shane 在 2013-1-11 詢問的問題

采用的是STC12C5A60S2单片机:

 

/**********************************************************************
*名称
: WriteData()
*功能 : 写数据到AD7190
*输入 : 无
*输出 :

***********************************************************************/
void
WriteData(uchar Data)
{
uchar i=0;
Sclk=1; /*时序*/
_nop_();
/*延时*/
Cs=1;
_nop_();
Cs=0; /*片选*/
for(i=0;i<8;i++)
/*24位数据分三个8位写入*/
{
Sclk=0;
if((Data&0x80)==0x80)
Din=1;
/*写1*/
else
Din=0; /*写0*/
_nop_();_nop_();_nop_();_nop_();
Sclk=1;
/*一个时钟的上升沿送走一位数据*/
_nop_();_nop_();_nop_();_nop_();
Data<<=1;
/*左移一位,进行第二位的写入*/
}
Cs=1;
/*关片选*/
}

 

/**********************************************************************
*名称
: ReadAdcData()
*功能 : 从AD7190读数据
*输入 : 无
*输出 :

***********************************************************************/
uchar
ReadAdcData()
{
uchar i=0;
uchar Data=0x00;
Sclk=1;
/*时序*/
_nop_(); /*延时*/
Cs=1;
_nop_();
Cs=0;
/*片选*/
for(i=0;i<8;i++)
{
Sclk=0;
Data=Data<<1;
_nop_();_nop_();
Sclk=1;
if(Dout==1)
Data=Data+0x01;
/*存1*/
}
Cs=1;
/*关片选*/
return(Data);
}
/**********************************************************************
*名称
: RstAd7190()
*功能 : AD7190软件复位程序程序
*输入 : 无
*输出 :

***********************************************************************/
void
RstAd7190()
{
uchar i;
for(i=0;i<5;i++)
{
WriteData(0xff);
/*连续写40个1*/
}
}
/**********************************************************************
*名称
: InitAdc()
*功能 : AD转换初始化程序
*输入 : 无
*输出 : 无

 

***********************************************************************/
void
InitAdc()
{
//(一).设置配置寄存器
WriteData(0x10); /*通信寄存器R/W(Bit) 0-写 1-读 .Rs2
Rs1 Rs0(Bit5-Bit3) 0 1 0-配置寄存器*/
WriteData(0x80);
/*Chop=1.斩波使能.*/
WriteData(0x01); /*CH0=1.AIN1+.AIN1-*/
WriteData(0x10);
/*B/U=0.双极性 1.单极性*/
while(Rdy);
//(二).设置模式寄存器(内部零点校准)
WriteData(0x08); /*通信寄存器R/W(Bit) 0-写 1-读 .Rs2 Rs1 Rs0(Bit5-Bit3) 0 0 1-模式寄存器*/
WriteData(0x80);
WriteData(0x00);
WriteData(0x60);
while(Rdy);
//(三).设置模式寄存器(内部满量程校准)
WriteData(0x08);
/*通信寄存器R/W(Bit) 0-写 1-读 .Rs2 Rs1 Rs0(Bit5-Bit3) 0 0
1-模式寄存器*/
WriteData(0xa0);
WriteData(0x00);
WriteData(0x60);
while(Rdy);
//(四).设置模式寄存器
WriteData(0x08); /*通信寄存器R/W(Bit) 0-写 1-读 .Rs2 Rs1 Rs0(Bit5-Bit3) 0 0 1-模式寄存器*/
WriteData(0x00); /*Md2 Md0=0 0 0.连续转换模式.Clk1 Clk0= 0
0.外部时钟*/
WriteData(0x00); /*Sinc3=1.Sin4斩波使能*/
WriteData(0x60);
/*Fs9-Fs0=96.Fout=12.5Hz*/
while(Rdy);
}

結果