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

📄 main.c

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

sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
sbit P0_4 = P0^4;
sbit P0_5 = P0^5;
sbit P0_6 = P0^6;
sbit P0_7 = P0^7;

sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;


sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;


sbit P3_0 = P3^0;
sbit P3_1 = P3^1;
sbit P3_2 = P3^2;
sbit P3_3 = P3^3;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;
sbit P3_7 = P3^7;


sbit P4_0 = P4^0;
sbit P4_1 = P4^1;
sbit P4_2 = P4^2;
sbit P4_3 = P4^3;

#define uchar unsigned char

// Original design board
//sbit CS5532_CS=P1^2;
//sbit CS5532_SDI=P3^5;
//sbit CS5532_SCLK=P3^4;
//sbit CS5532_SDO=P3^2;
sbit CS5532_CS=P1^2;
sbit CS5532_SDI=P2^4;
sbit CS5532_SCLK=P2^2;
sbit CS5532_SDO=P2^0;

//#define DWORD unsigned long

xdata long m_TickCount = 0;
long GetTickCount(){return m_TickCount;}

void Sleep(long iMilliseconds)
{
	long TickCount = GetTickCount();
	while((GetTickCount() - TickCount) < iMilliseconds)
	{
		//WDT_CONTR = 0x3C; //复位看门狗
	}
}


  //中断
void time0() interrupt 1
{
	EA = 0;
	TR0 = 0;
	TH0 = 0xF8;
	TL0 = 0xCC;
	//TH0 = 0xFC;
	//TL0 = 0x66;
	//TL0 = 0x41;
	//TH0 = 0xFE;
	m_TickCount++;
	TR0 = 1;
	EA = 1;	
}

// PCB Version
//sbit CS5532_CS=P1^3;
//sbit CS5532_SDI=P1^2;
//sbit CS5532_SDO=P1^1;
//sbit CS5532_SCLK=P1^0;


// all  design board ?
sbit CS5532_A0=P1^6;
sbit CS5532_A1=P1^7;


#define  RxdTxd4b_0  DBYTE[0x20]
#define  RxdTxd4b_1  DBYTE[0x21]
#define  RxdTxd4b_2  DBYTE[0x22]
#define  RxdTxd4b_3  DBYTE[0x23]

#define uint unsigned int
#define delay(x) {uint dly = x;while(dly){dly--;}}
uchar idata RxdTxd4b[6];

void CS5532_Txd(uchar);
void CS5532_Txd_init(uchar);
void  read_reg(uchar address_pt);
void  read_data(uchar address_pt);
void  read_data1(uchar address_pt);
void  read_datax(uchar address_pt);
void  CS5532_init(void);

#define Refurbish(x) x = 1;x = 0;
#define ControlOut P2_7
 
void main(void)
{
	uchar uComRecv[5];
	uchar uComi = 0;
   long dPrvConversionTime = 0;
   uchar i,k,address_pt;
   uchar flag=0;
   address_pt  = 32;     // RAM 数据区起始地址
	TMOD = 0x1; //定时器T0模式1
	TL0  = 0x0f;//定时初值
	TH0  = 0x00;
	TR0  = 1;   //开始运行
	ET0  = 1;   //允许定时器T0中断
		  InitCom(5);
		  EA = 1;
		  for(k=0;k<20;k++)  _nop_();
  	delay(1000);
   CS5532_init();
 for(k=0;k<20;k++)  _nop_();
//Reset
// CS5532_Txd(0x03);
// CS5532_Txd(0x20);
// CS5532_Txd(0x00);
// CS5532_Txd(0x00);
// CS5532_Txd(0x00);

	CS5532_Txd(0x03);    // Soft Reset 
   CS5532_Txd(0x2A);
   CS5532_Txd(0x00);
   CS5532_Txd(0x04);
   CS5532_Txd(0x00);
	
	delay(1000);
    CS5532_init();
	  for(k=0;k<20;k++)  _nop_();
//************************************************
//  系统软复位( CS5532_init() 包含该部分)
 
// CS5532_Txd(0x05);
// CS5532_Txd(0x02);
// CS5532_Txd(0x00);
// CS5532_Txd(0x02);
// CS5532_Txd(0x00);

/*  CS5532_Txd(0x05);
 CS5532_Txd(0x32);
 CS5532_Txd(0x40);
 CS5532_Txd(0x32);
 CS5532_Txd(0x40);*/
//-----
/*  CS5532_Txd(0x85);    // 偏移校准
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();

 while(1)
 {
	  read_datax(address_pt);
    	  	P1 = 0x00; 
		//RxdTxd4b[3] = 0x0D;
	  for(k = 0; k < 4;k++)
	  {
		  Send(RxdTxd4b[k]);
	  }	
	  delay(50000);
 }*/
 //-------
 	CS5532_Txd(0x03);    // Soft Reset 
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);
   CS5532_Txd(0x18);
   CS5532_Txd(0x00);


  CS5532_Txd(0x85);    // 偏移校准
  while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();


  
  
/*CS5532_Txd(0x02);
CS5532_Txd(0x0F);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x00);*/
//Write_CS5460A(buf5460,5);


    CS5532_Txd(0xC0);//连续转换命令
  while(CS5532_SDO)
     _nop_();  _nop_(); _nop_(); _nop_();  	  

  while(1)
  		for(i=0;i<5;i++)
 {
	uchar uCheckSum = 0;
 	//while((GetTickCount() - dPrvConversionTime) <= (1000/15 - 1));
	//dPrvConversionTime = GetTickCount();
   //CS5532_CS=1;
	while(CS5532_SDO)
   _nop_(); _nop_(); _nop_(); _nop_();
   _nop_(); _nop_(); _nop_(); _nop_(); 
   _nop_(); _nop_(); _nop_(); _nop_(); 
//  address_pt = 48;
  //CS5532_Txd(0x80);
  //while(CS5532_SDO)
  _nop_();  _nop_(); _nop_(); _nop_();
//  DBYTE[address_pt++]=0x80;
  read_data1(address_pt);
    	  	P1 = 0x00; 
//	RxdTxd4b[3] = 0x0D;
	if(RxdTxd4b[0]&0x80)
	{
		RxdTxd4b[0] &= 0x7F;
		RxdTxd4b[3] |= 0x08;
	}
	uCheckSum += RxdTxd4b[0];
	Send(RxdTxd4b[0]);

	if(RxdTxd4b[1]&0x80)
	{
		RxdTxd4b[1] &= 0x7F;
		RxdTxd4b[3] |= 0x10;
	}
	uCheckSum += RxdTxd4b[1];
	Send(RxdTxd4b[1]);

	if(RxdTxd4b[2]&0x80)
	{
		RxdTxd4b[2] &= 0x7F;
		RxdTxd4b[3] |= 0x20;
	}
	uCheckSum += RxdTxd4b[2];
	Send(RxdTxd4b[2]);
	uCheckSum += RxdTxd4b[3];
	Send(RxdTxd4b[3]);		
	Send(uCheckSum&0x7F);
	Send(0xFF);
	
	while(SerialCheck())
	{
		uchar uGet = Getbyte();
		if(uGet == 0x0D)
		{
			uchar uCheckSum = 0;
			uCheckSum = uComRecv[0] + uComRecv[1];
			if(uComRecv[2] == uCheckSum)
			{
				if(uComRecv[0] == 0x01)
				{
					P0 = 0x00;
					 Refurbish(ControlOut);
					//P1 = 0xFF;
					Sleep(uComRecv[1]);
					P0 = 0xFF;
					 Refurbish(ControlOut);
					//P1 = 0x00;	
				}
			}
			uComi = 0;
		}else
		{
			uComRecv[uComi++] = 	uGet;
			if(uComi >= 5)uComi = 0;
		}
	}
  }

  CS5532_Txd(0xC0);//连续转换命令
  while(CS5532_SDO)
     _nop_();  _nop_(); _nop_(); _nop_();  


while(1)
{
	Read_CS5460A(buf5460, 0x0C);
	for(i = 0; i < 4; i++)
	{
		Send(buf5460[i]);
	}
	delay(60000);
	//delay(60000);
	//delay(60000);
}
/*buf5460[0] = 0x02;
buf5460[1] = 0x80;
buf5460[2] = 0xFF;
buf5460[3] = 0xF5;
buf5460[4] = 0xFF;
Write_CS5460A(buf5460,5);
//CS5532_init();
for(i = 0; i < 5; i++)
{
	buf5460[i] = 0;
}
for(k=0;k<180;k++)  _nop_();  

	Read_CS5460A(buf5460, 0x0A);
	for(i = 0; i < 4; i++)
	{
		Send(buf5460[i]);
	}*/

while(1);
   CS5532_Txd(0x03);    // Soft Reset 
   CS5532_Txd(0x2A);
   CS5532_Txd(0x00);
   CS5532_Txd(0x04);
   CS5532_Txd(0x00);

   CS5532_Txd(0x0B);    // Read Config Reg
   DBYTE[address_pt++]=0x0B;
   read_reg(address_pt);
	 	P1 = 0x00;
   address_pt = address_pt +4;
   CS5532_Txd(0x0B);    // Read Config Reg
   DBYTE[address_pt++]=0x0B;
   read_reg(address_pt);
   address_pt = address_pt +4;
//////////////////////////////////////////////

   CS5532_Txd(0x05);    // Setup REG 
   CS5532_Txd(0x32);
   CS5532_Txd(0x34);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);
  
   CS5532_Txd(0x03);    // Config ReG 
   CS5532_Txd(0x40);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);

   CS5532_Txd(0x03);    // Config ReG 
   CS5532_Txd(0xC0);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);

   CS5532_Txd(0x03);    // Config ReG 
   CS5532_Txd(0x01);
   CS5532_Txd(0x80);
   CS5532_Txd(0x00);
   CS5532_Txd(0x00);

   CS5532_Txd(0x0B);    // Read Config Reg
   DBYTE[address_pt++]=0x0B;
   read_reg(address_pt);
   address_pt = address_pt +4;

   CS5532_Txd(0x0D);    // Read Setup Reg

⌨️ 快捷键说明

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