⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cc1160.c

📁 电子称重的程序
💻 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 + -