?? 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_();
}
/**************************************************************************************
*函數(shù)原型: void SPI_send(unsigned char SPI_data)
*功能 : 向spi總線上發(fā)送8位數(shù)據(jù)信號
**************************************************************************************/
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();
}
}
/**************************************************************************************
*函數(shù)原型: unsigned char SPI_receive(void)
*功能 : 從spi總線上接受8位數(shù)據(jù)信號,并將接收到的數(shù)據(jù)作為一個字節(jié)返回
**************************************************************************************/
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);
}
/**************************************************************************
* 函數(shù)原型:void EXT0_INT(void);
* 功 能:外部中斷讀AD中斷!
**************************************************************************/
void exit_int0() interrupt 0
{
unsigned char i;
union LongData a;
while (DRDY) //當drdy 為高時,不讀取數(shù)據(jù)
;
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);
}
/**************************************************************************
* 函數(shù)原型: ulong CS1160read();
* 功 能:讀AD功能函數(shù)
**************************************************************************/
long CS1160read()
{
return adreadtemp[0]+adreadtemp[1]+adreadtemp[2];
}
/******************************************************
*函數(shù)原型: 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); // 發(fā)送3個指令
if(gain==64)
SPI_send(0x06); // 0x00 pga =64
else
SPI_send(0x07); // 0x00 pga =128
SPI_send(0x01); // 0x01 設(shè)置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) //扔調(diào)一次 數(shù)據(jù)
;
IT0=1;
EX0=1;
EA=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -