不知到底是转换速率不对,还是时钟不对,还是别的什么问题。都改过N次了还不行。只能改的更差。顺便贴上程序。使用的是STC 1T的单片机
void delay()
{ unsigned char i;
for (i=0; i<10; i++)
;
}
//延时子程序
void delay_ms(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<200;j++)
{ _nop_(); _nop_();
}
}
/*********************************************************************************************************
** function name :
** description :
** Arguments :
** Returns :
** global varible :
** call module :
**
** Author :
** Date :
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void delay_50us(void)
{
unsigned char i;
for (i=0; i<120; i++)
;
} //
void SPI_clock(void)
{
SCLK = LOW;
delay();
SCLK = HIGH;
delay();
}
/***************************************************************************************
函数原型: void SPI_send(unsigned char SPI_data) *功能 : 向spi总线上发送8位数据信号
*************************************************************************************/
void SPI_send(unsigned char SPI_data)
{
unsigned char bitCount;
for (bitCount=0; bitCount<8; bitCount++)
{
SDI = (bit)(SPI_data & 0x80);
SPI_data <<= 1;
SPI_clock();
}
}
/***************************************************************************************
函数原型: unsigned char SPI_receive(void) *功能 : 从spi总线上接受8位数据信号,并将接收到的数据作为一个字节返回
**************************************************************************************/
unsigned char SPI_receive(void)
{
unsigned char bitCount;
unsigned char SPI_data=0;
SDO = 1;
for (bitCount=0; bitCount<8; bitCount++)
{ SPI_data <<= 1;
SCLK = HIGH;
delay();
SCLK = LOW;
delay();
if (SDO) { SPI_data++; }
}
return (SPI_data);
}
/***************************************************************************************
函数原型: unsigned long ReadAdData(void) *功能 : 从CS1180中读取AD转换结果,并将结果以长整型数据返回
**************************************************************************************/
unsigned int ReadAdData(void)
{ unsigned char i; union LongData a;
unsigned int k;
CS = LOW; delay();
a.byte[0] = 0;
while (DRDY) ; //当DRDY为高时,不读取数据
SPI_send(COMM_RDATA);
delay_50us();
for (i=1;i<4;i++)
{
a.byte = SPI_receive();
shuju=a.byte;
}
k=a.word>>8;
CS = HIGH;
return k; //在发送读指令后,延时100us才能接收数据
}
/*******************************************************
函数原型: void IniCS1180(void) *功能 : 初始化cs1180
**************************************************************************************/
void IniCS1180(void)
{
unsigned char m; SCLK = HIGH;
SDI = HIGH ;
SDO = HIGH ;
delay();
CS = LOW;
delay();
SPI_send(COMM_RESET); //rst 1180
delay();
CS = HIGH;
delay_50us();
CS = LOW;
delay();
SPI_send(0x50); //写寄存器命令
SPI_send(0x02); //写寄存器命令
SPI_send(0x00); //写入00H 内容,-SETUP寄存器
SPI_send(0x01);//写入01H内容,MUX寄存器
SPI_send(0x40); //写入02H内容,ACR寄存器
CS = HIGH;
delay_50us();
CS = LOW;
delay_ms(2);
SPI_send(COMM_CALSELF); //用片内信号校准失调误差和增益误差
delay();
CS = HIGH;
while (DRDY) ;
while (!DRDY) ; //发送3个指令 //0x00 pga = 7 //0x01 此处必须为01 //0x02 输出频率 15hz,参考电压5V
delay_ms(10);
while (DRDY) ;
CS = LOW;
delay();
SPI_send(0x10);
delay();
SPI_send(15);
delay_50us();
for (m=0; m <16; m++) { buf[m] = SPI_receive(); }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
您好,您在用这个芯片做什么啊?我也刚好用它,请教你个问题:您怎样处理转换好的数据啊?谢谢。
一周热门 更多>