本帖最后由 biao0422 于 2010-6-11 14:17 编辑
我现在用的cs5463这款芯片,现在遇到的问题是读取寄存器里的数据只能读出高八位的数据,我让显示只显示后面16位的数据有时会闪的很厉害,也根本不稳定,希望前辈们给小弟一点指点,先谢谢啦
下面是我写的程序,请高手们帮忙看一下
void delay() //延时程序
{
uint i; //定义整形变量
for(i=0x100;i--;); //延时
}
void spiinit()
{
TRISD=0X00;
TRISA=0X00;
TRISC=0X10;
SSPSTAT=0X82;
SSPCON=0X30;
INTCON=0X00;
PIR1=0X00;
}
void spi_comm(unsigned char x)
{
SSPBUF=x;
while(!SSPIF);
SSPIF=0;
}
uchar spi_in()
{
uchar y;
SSPBUF=0;
while(!SSPIF);
SSPIF=0;
y=SSPBUF;
return(y);
}
void csinit()
{
reset=0;
delay();
reset=1;
din=0;
sclk=0;
cs=1;
nop();
cs=0;
din=1;
spi_comm(0xff);
spi_comm(0xff);
spi_comm(0xff);
spi_comm(0xfe);
nop();
din=0;
}
void cs_write(uchar add,uchar a1,uchar a2,uchar a3)
{
cs=0;
spi_comm(add);
spi_comm(a1);
spi_comm(a2);
spi_comm(a3);
cs=1;
}
uchar cs_read(uchar add)
{
uchar temp0,temp1,temp2;
unsigned long temp;
cs=0;
spi_comm(add);
temp0=spi_in();
temp1=spi_in();
temp2=spi_in();
cs=1;
// temp=temp0+temp1+temp2;
temp=temp1; //想显示后8位看看能不能读出数据
return(temp);
}
void cs_config()
{
cs_write(94,128,0,0); //status 状态寄存器 0x800000
cs_write(64,0,0,16); //config 配置寄存器 0x00000f k=1
cs_write(74,0,15,160); //cycle count 计算周期数 0x000fa0 n=4000
cs_write(116,0,0,0); //mask 中断屏蔽寄存器 0x000000 不激活INT
cs_write(100,0,0,97); //made 操作模式 0x000061 开启HPF滤波器
// ac_cs5463(); //校准
// cs_write(32,iac1,iac2,iac3); //写校准值
// cs_write(34,vac1,vac2,vac3);
cs=0;
spi_comm(0xe8);
cs=1;
}
void display(uint x)
{
uint qian,bai,shi,ge,temp;
temp=x;
qian=temp/1000;
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;
PORTA=0x1f;
PORTD=table[qian];
delay();
PORTA=0x2f;
PORTD=table[bai];
delay();
PORTA=0x37;
PORTD=table[shi];
delay();
PORTA=0x3b;
PORTD=table[ge];
delay();
}
void main()
{
uint a=0;
spiinit();
csinit();
cs_config();
while(1)
{
a=cs_read(0x16);
display(a); //显示
delay();
delay();
}
} |