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

📄 cs5460a.c

📁 本人写的测试CS5530芯片代码,大部分功能和CS5532相同
💻 C
字号:
#include "CS5460A.h"
#include "STC89C51RC_RD_PLUS.H"
#include "intrins.h"

sbit SK=P2^2;           /* SPI时钟 */
sbit SO=P2^0;           /*  SDO    */ 
sbit SI=P2^4;           /*  SDI    */ 
sbit RST = P2^3;

//sbit CS5532_CS=P1^2;
//sbit CS5532_SDI=P2^4;
//sbit CS5532_SCLK=P2^2;
//sbit CS5532_SDO=P2^0;

uchar Read8(void);          //SPI 读一个字节的 程序
void Write8(uchar cData);   //SPI 写一个字节的 程序
void initspi(void);         // 复位CS5460A的SPI模式  程序
void Write_CS5460A(uchar *p,uchar len);// 写 CS5460A 的状态寄存器
void Read_CS5460A(uchar *p,uchar CommData );// 读 CS5460A 的状态寄存器

xdata uchar buf5460[5];
code long *lbuf = (long *)&buf5460;
//-------------------------------------------------
//SPI 读一个字节的 程序
uchar Read8(void) 
{ 
	bit bData; uchar cLoop; uchar cData; 
	//P2_6 = 0;
	SI=0;
	cData=0x00;
	for(cLoop = 0; cLoop < 8; cLoop++) 
	{ 
		SK=1; 
		SK=0;        //下降沿输出
	    cData<<=1; 
		bData=SO; 
		if(bData) { cData|=0x01; } 
  	}	
  	return cData;
}

//SPI 写一个字节的 程序
void Write8(uchar cData) 
{
	xdata uchar cLoop; 
	//P2_6 = 0;
	SO = 1;
	for(cLoop = 0; cLoop < 8; cLoop++) 
	{
		if((cData&0x80)==0) { SI=0; } 
			else { SI=1; }
		SK=0;      //上升沿写入 
		_nop_();_nop_();_nop_();_nop_();
		SK=1; 
		_nop_();_nop_();_nop_();_nop_();
		cData <<= 1; 
	}
	SI = 0;
}

// 写 CS5460A 的状态寄存器
void Write_CS5460A(uchar *p,uchar len)
{
   xdata uchar i;
   //initspi();
   for(i=0;i<len;i++)
    { Write8(p[i]);}
}


// 读 CS5460A 的状态寄存器
void Read_CS5460A(uchar *p,uchar CommData )
{
   xdata uchar i;
   //initspi();
   Write8(CommData);
   for(i = 0; i < 4; i++)
	{
      p[i] = Read8();
    }
}

void initspi(void)
{
	Write8(SYNC1);
	Write8(SYNC1);
	Write8(SYNC1);
	Write8(SYNC0);
}

void Clear_DRDY()
 {
 	code uchar tBuf[] = {0x5E,0xFF,0xFF,0xFF};
 	initspi();
	Write_CS5460A(tBuf,4);
}

bit Waite_DRDY_High()
{
	xdata uchar i;
	while(i < 250)
	{
		initspi();
		Read_CS5460A(buf5460,0x1E);
		if(buf5460[1]&0x80)
			return 1;
		i++;
		//delay(1000);
	}
	return 0;
}

void Reset5460A()
{
	RST = 0;
//	delay(100);
	RST = 1;
}

//获得当前重量数据
long GetWeight(void)
{
	xdata long tWeight;
	Read_CS5460A(buf5460,0x16);   //读状态寄存器
	buf5460[0] = 0;
	tWeight = *lbuf;
	/*for(;;)
	{
		Read_CS5460A(buf5460,0x16);   //读状态寄存器
		buf5460[0] = 0;
		if(tWeight == *lbuf)
		{
			Read_CS5460A(buf5460,0x16);   //读状态寄存器
			buf5460[0] = 0;
			if(tWeight == *lbuf)
			{
				break;
			}else tWeight = *lbuf;
		}else tWeight = *lbuf;
	}*/
	{
		code uchar buf[] = {0x5E, 0xFF,0xFF,0xFF};
		Write_CS5460A(buf,4);    //写状态寄存器,对应位产生的标志清除
	}
	return tWeight;
}

long Get5460Reg(uchar uReg)
{
	Read_CS5460A(buf5460,uReg);   //读状态寄存器
	buf5460[0] = 0;
	if(buf5460[1]&0x80)
	{
		buf5460[0] = 0xFF;
	}
	return *lbuf;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -