/*CS5532函数*/
//////写一个字节数据到5532
void WriteCs5532(unsigned char dat)
{
unsigned char i;
SCLK=0; //时钟拉低
for(i=0;i<8;i++)
{
if(dat&0x80)
{
SDI = 1;
}
else
{
SDI = 0;
}
dat = dat<<1;
Delay(40);
SCLK = 1;
Delay(40);
SCLK = 0;
Delay(40); //下降沿,写入数据
}
}
/////从cs5532内部单元读出一个字节
unsigned char ReadCs5532(void)
{
unsigned char i,dat=0x00;
SCLK = 0;
Delay(40);
for(i=0;i<8;i++)
{
dat = dat<<1;
dat = dat|SDO;
SCLK = 1;
Delay(40);
SCLK = 0;
Delay(40);
}
return(dat);
}
void ReadCs5532_Value(void) ///读a/d转换寄存器中的值
{
unsigned char i;
CS = 0;
SCLK = 0;
SDI = 0;
while(SDO);LED = ~LED;
for(i=0;i<8;i++)
{
WriteCs5532(0x00);
}
DataTemp[0]=ReadCs5532();
DataTemp[1]=ReadCs5532();
DataTemp[2]=ReadCs5532();
DataTemp[3]=ReadCs5532();
}
void ReadCs5532_Reg(void) ///读a/d转换寄存器中的值
{
RegTemp[0]=ReadCs5532();
RegTemp[1]=ReadCs5532();
RegTemp[2]=ReadCs5532();
RegTemp[3]=ReadCs5532();
}
void InitCs5532(void)
{
unsigned char i;
CS = 0;
SDO = 1;
SDI = 0;
SCLK = 0;
Delay_ms(50);
do
{
for(i=0;i<31;i++)
{
WriteCs5532(0xff);
}
WriteCs5532(0xfe); //软件复位串口为命令模式
Delay(40);
WriteCs5532(0x03); //指令:写配置寄存器
WriteCs5532(0x20); //RS = 1,激活一个复位周期
WriteCs5532(0x00); //
WriteCs5532(0x00); //
WriteCs5532(0x00); //
Delay(40);
WriteCs5532(0x0b); //指令:读取配置寄存
ReadCs5532_Reg(); //该函数将读取的数据放入了 RegTemp[]中
}
while(!(RegTemp[0]&0x10)); //激活一个复位周期,等待复位完成
WriteCs5532(0x03); //写配置寄存器
WriteCs5532(0x00); // 电压参考为2.5V <VREF<VA+
WriteCs5532(0x00);
WriteCs5532(0x00);
WriteCs5532(0x00);
Delay(40);
WriteCs5532(0x05); // 写通道设置寄存器 **通道设置寄存器,有疑问?
WriteCs5532(0x31); //物理通道1,增益64
WriteCs5532(0xc0); //通道1的偏移和增益
WriteCs5532(0x00);
WriteCs5532(0x00);
Delay(40);
WriteCs5532(0xC0); //执行转换命令 向CS5532中写入启动A/D连续转换 (8位串口命令)
}
|