本帖最后由 xyz549040622 于 2013-1-22 22:27 编辑
单片机用的STC12C5A60S2,1T的单片机,现已验证5532复位成功,但是读取AD值时都为ff?
现在有几个疑问
1.5532只有一个数据存储寄存器,可是有两个通道,如何确定所读数值是哪一通道的呢?
2.通道设置寄存器setup的作用,如何对应物理通道呢?
3.数据存储寄存器是否有8bit的读命令,如何读取呢?
如果有哪位前辈用过5532,求指教,下面附上程序。。。
/**************************************
;WWW.**.COM
;Mobile:13922805190
;0755-82948412
AT24C04测试程序
主芯片 : STC12C5A60S2 (1T)
工作频率: 12.000MHz
**************************************/
#include "cs5532.h"
mtb_1[5]={0x03,0x22,0x00,0x00,0x00};//0x03写配置寄存器 0x20选择复位,参考电压选择2.5~VA+,其余默认 复位AD,并配置功能
unsigned char xdata tep5[4]={0};
unsigned char xdata tep4[4]={0};
//////写一个字节数据到5532
void WriteCs5532(unsigned char da)
{
unsigned char loop;
ad_sck=0;
delay_1us();
for(loop=0;loop<8;loop++)
{
da=da<<1;
ad_di=CY;
ad_sck=1;
delay_1us();
ad_sck=0;
delay_1us();
}
}
/////从cs5532内部单元读出一个字节
unsigned char ReadCs5532(void) ///读a/d
{
unsigned char loop,da;
ad_sck=0;
delay_1us();
for(loop=0;loop<8;loop++)
{
da=da<<1;
da=da|ad_do;
ad_sck=1;
delay_1us();
ad_sck=0;
delay_1us();
}
return(da);
}
unsigned long ReadCs5532_ADvalue(void) ///读a/d转换寄存器中的值 ***此段即读AD值得程序,有疑问?
{
unsigned char i;
unsigned long temp0=0,temp1=0,temp2=0,temp3=0,reg=0;
for(i=0;i<8;i++)
{
WriteCs5532(0xff);
}
temp0=ReadCs5532();
temp1=ReadCs5532();
temp2=ReadCs5532();
temp3=ReadCs5532();
reg=temp0<<24|temp1<<16|temp2<<8|temp3;
return reg>>11;
}
unsigned long ReadCs5532_Reg(void) ///读a/d转换寄存器中的值
{
unsigned long temp;//返回值
tep5[0]=ReadCs5532();
tep5[1]=ReadCs5532();
tep5[2]=ReadCs5532();
tep5[3]=ReadCs5532();
temp=((unsigned long)tep5[0])<<24|((unsigned long)tep5[1])<<16|((unsigned long)tep5[2])<<8|((unsigned long)tep5[3]);
return temp;
}
void InitCs5532(void) ///a/d初始化
{
unsigned char loop;//配置寄存器中的32位数据
ad_do=1;
ad_di=0;
ad_sck=0;
delay_10ms(2);
for (loop=0;loop<31;loop++)//初始化,写15个字节SYNC1
{
WriteCs5532(0xff);
}
WriteCs5532(0xfe); //写一个字节的SYNC0
for (loop=0;loop<5;loop++) //写入复位命令
{
WriteCs5532(mtb_1[loop]);
}
WriteCs5532(0x0b); //读配置寄存器
if(ReadCs5532_Reg()==0x10000000)//验证是否复位成功
{
PutString(0,18,"rest is ok!");
}
else
{
PutString(0,18,"rest is wrong!");
}
WriteCs5532(0x03);//写配置寄存器
WriteCs5532(0x00);//
WriteCs5532(0x08);
WriteCs5532(0x00);
WriteCs5532(0x00);
WriteCs5532(0x05);// 写通道设置寄存器 **通道设置寄存器,有疑问?
WriteCs5532(0x40);//物理通道2,增益1
WriteCs5532(0x80);//通道2的偏移和增益
WriteCs5532(0x40);
WriteCs5532(0x80);
WriteCs5532(0xc0); //执行转换命令 向CS5532中写入启动A/D连续转换 (8位串口命令)
}
|