📄 cc1160.c
字号:
#include<config.h>
#include<head.h>
#pragma OPTIMIZE(8,size)
#define ADBUFEN 0 //cs1160的输入buf是否开启,开启后噪音较大,但输入阻抗可达10m
long pdata adreadtemp[3];
union LongData
{
unsigned long word ;
unsigned char byte[4];
};
//
void delay_50us(void)
{
unsigned char i;
for (i=0; i<16; i++)
;
}
void SPI_clock(void)
{
SCLK = LOW;
_nop_();_nop_();
SCLK = HIGH;
_nop_();_nop_();
}
/**************************************************************************************
*函数原型: 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 *= 2;
SCLK = HIGH;
_nop_();_nop_();
SCLK = LOW;
_nop_();_nop_();
if (SDO)
{
SPI_data++;
}
}
return (SPI_data);
}
/**************************************************************************
* 函数原型:void EXT0_INT(void);
* 功 能:外部中断读AD中断!
**************************************************************************/
void exit_int0() interrupt 0
{
unsigned char i;
union LongData a;
while (DRDY) //当drdy 为高时,不读取数据
;
a.byte[0] = 0;
CS = LOW;
_nop_();_nop_();
SPI_send(COMM_RDATA);
delay_50us();
for (i=1;i<4;i++)
{
a.byte[i] = SPI_receive();
}
CS = HIGH;
adreadtemp[0]=adreadtemp[1];
adreadtemp[1]=adreadtemp[2];
adreadtemp[2]=(a.word>>8);
PostMessageOne(M_ADHAD,0);
}
/**************************************************************************
* 函数原型: ulong CS1160read();
* 功 能:读AD功能函数
**************************************************************************/
long CS1160read()
{
return adreadtemp[0]+adreadtemp[1]+adreadtemp[2];
}
/******************************************************
*函数原型: void InitCS1160(void)
*功能 : 初始化CS1160
**************************************************************************************/
void InitCS1160(uchar gain,uchar adzero)
{
SCLK = HIGH;
SDI = HIGH ;
SDO = HIGH ;
_nop_();_nop_();
CS = LOW;
_nop_();_nop_();
SPI_send(COMM_RESET); //rst 1240
_nop_();_nop_();
CS = HIGH;
delay_50us();
CS = LOW;
_nop_();_nop_();
SPI_send(0x50);
SPI_send(0x02); // 发送3个指令
if(gain==64)
SPI_send(0x06); // 0x00 pga =64
else
SPI_send(0x07); // 0x00 pga =128
SPI_send(0x01); // 0x01 设置ad 通道
#if ADBUFEN
SPI_send(0x70); // 0x02 输出频率 15hz,参考电压2.5V
#else
SPI_send(0x60); // 0x02 输出频率 15hz,参考电压2.5V
#endif
_nop_();_nop_();
CS = HIGH;
delay_50us();
CS = LOW;
_nop_();_nop_();
SPI_send(COMM_CALSELF);
_nop_();_nop_();
CS = HIGH;
while (DRDY)
;
while (!DRDY)
;
delayms(10);
while (DRDY) //扔调一次 数据
;
IT0=1;
EX0=1;
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -