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

📄 cs5520.c

📁 介绍了使用CS5520进行mV信号采集的源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	CL1=CL0;
}

/*************************************************************************************************************************
*子程序名  :SendData
*输入	   :无
*输出	   :无
*该子程序将发送缓冲区的数据按约定的通信协议发往上位机.
*************************************************************************************************************************/
void SendData()
{	sendic=0;
	while(buffer1[sendic]!=0x0d)
	{	SBUF=buffer1[sendic];
		while(TI!=1);TI=0;
		sendic=sendic+1;
	}
	SBUF=0x0d;
	while(TI!=1);TI=0;
}

/*************************************************************************************************************************
*子程序名  :acquire_conversion
*输入	   :无
*输出	   :无
*该子程序命令CS5520进行单次或连续AD转换操作(只执行一次该子程序,且在DRDY引脚变低之前无新的命令给CS5520).
*************************************************************************************************************************/
void acquire_conversion()
{
	CS=0x00;
	SID=0x00;
	SOD=0x01;
	SCLK=0x00;
	transfer_byte(0x88);			/* 命令CS5520进行AD转换 */
	SID=0x00;
	SOD=0x01;
	SCLK=0x00;
	CS=0x01;
}

/*************************************************************************************************************************
*子程序名  :write_to_register
*输入	   :command,low_byte,mid_byte,high_byte
*输出	   :无
*该子程序命令CS5520对内部寄存器进行写操作.
*************************************************************************************************************************/
void write_to_register(char command,char low_byte,char mid_byte,char high_byte)
{
	CS=0x00;
	SID=0x00;
	SOD=0x01;
	SCLK=0x00;
	transfer_byte(command);
	transfer_byte(high_byte);
	transfer_byte(mid_byte);
	transfer_byte(low_byte);
	SID=0x00;
	SOD=0x01;
	SCLK=0x00;
	CS=0x01;
}

/*************************************************************************************************************************
*子程序名  :read_register
*输入	   :command
*输出	   :low_byte,mid_byte,high_byte
*该子程序读取CS5520内部寄存器的值.
*************************************************************************************************************************/
void read_register(char command)
{
	CS=0x00;
	SID=0x00;
	SOD=0x01;
	SCLK=0x00;
	transfer_byte(command);
	high_byte=receive_byte();
	mid_byte=receive_byte();
	low_byte=receive_byte();
	SID=0x00;
	SOD=0x01;
	SCLK=0x00;
	CS=0x01;
}

/*************************************************************************************************************************
*子程序名  :AD_get
*输入	   :无
*输出	   :high_byte,mid_byte,low_byte
*该中断服务子程序读取CS5520 AD转换的数据.
*************************************************************************************************************************/
void AD_get() interrupt 2 using 2
{	EA=0;
	CS=0x00;
	SID=0x00;
	SCLK=0x00;
	high_byte=receive_byte();
	mid_byte=receive_byte();
	low_byte=receive_byte();
	verin=high_byte;
	HtoASCII();
	buffer1[4]=verout1;
	buffer1[5]=verout2;		
	verin=mid_byte;
	HtoASCII();
	buffer1[6]=verout1;
	buffer1[7]=verout2;
	verin=low_byte;
	HtoASCII();
	buffer1[8]=verout1;
	buffer1[9]=verout2;
	SCLK=0x00;
	CS=0x01;
	EA=1;
}

/*************************************************************************************************************************
*子程序名  :Communication
*输入	   :无
*输出	   :无
*该中断服务子程序与上位计算机进行串行通信.
*************************************************************************************************************************/
void Communication() interrupt 4 using 1
{	RI=0;
	EA=0;
	Comin=SBUF;
	switch(Comin)
	{	case 0x40:
			{	chct=0x01;
				repm=0x01;
				pointer=0;
				buffer[pointer]=Comin;
			}break;
		case 0x0d:
			{	if(repm)
				{	buffer[++pointer]=Comin;
					pointer=pointer-4;
					verout1=buffer[pointer];
					verout2=buffer[pointer+1];
					ASCIItoH();
					buffer[pointer]=verin;
					verout1=buffer[pointer+2];
					verout2=buffer[pointer+3];
					ASCIItoH();
					buffer[pointer+1]=verin;
					buffer[pointer+2]=0x0d;
					CRC(&buffer[1]);
					if((CH1==0)&&(CL1==0))
					{	buffer1[0]=0x40;
						buffer1[1]=N;
						buffer1[2]=0x52;
						buffer1[3]=0x44;
						buffer1[10]=0x0d;
						CRC(&buffer1[1]);
						verin=CH1;
						HtoASCII();
						buffer1[10]=verout1;
						buffer1[11]=verout2;
						verin=CL1;
						HtoASCII();
						buffer1[12]=verout1;
						buffer1[13]=verout2;
						buffer1[14]=0x0d;
						SendData();
					}
				}
			}break;
		default:
			{	if(repm)
				{	if(chct)
					{	if(Comin!=N)	repm=0;
						chct=0;
					}
					buffer[++pointer]=Comin;
				}
			}
	}
	EA=1;
}

/**************************************************************************************************************************
*子程序名  :receive_byte
*输入	   :无
*输出	   :rdata
*该子程序从CS5520读取一个字节的数据.
**************************************************************************************************************************/
uchar receive_byte(void)
{	uchar data i=8,rdata=0;
	while(i--)
	{	rdata=(rdata<<1)|SOD;		//rdata<<=1;
						//rdata|=SOD;
		SCLK=0x01;
		SCLK=0x00;
	}
	return rdata;
}

/**************************************************************************************************************************
*子程序名  :transfer_byte
*输入	   :var
*输出	   :无
*该子程序将一个字节的数据向CS5520传送.
**************************************************************************************************************************/
void transfer_byte(uchar var)
{	uchar data i=8;
	SCLK=0x00;
	while(i--)
	{	var<<=1;			//SID=(bit)(var&0x80);
		SID=CY;				//var<<=1;
		SCLK=0x01;
		SCLK=0x00;
	}
	SID=0x00;
}

/*************************************************************************************************************************
*子程序名  :chnl_change
*输入	   :no
*输出	   :无
*该子程序控制CD4052切换到所要求的模拟输入通道.
*************************************************************************************************************************/
void chnl_change(char no)
{	EA=0;
	switch(no)
	{	case 0x01:{	CS2=1;
				CS1=0;
				CA=0;
				CB=0;}break;
		case 0x02:{	CS2=1;
				CS1=0;
				CA=1;
				CB=0;}break;
		case 0x03:{	CS2=1;
				CS1=0;
				CA=0;
				CB=1;}break;
		case 0x04:{	CS2=1;
				CS1=0;
				CA=1;
				CB=1;}break;
		case 0x05:{	CS1=1;
				CS2=0;
				CA=0;
				CB=0;}break;
		case 0x06:{	CS1=1;
				CS2=0;
				CA=1;
				CB=0;}break;
		case 0x07:{	CS1=1;
				CS2=0;
				CA=0;
				CB=1;}break;
		case 0x08:{	CS1=1;
				CS2=0;
				CA=1;
				CB=1;}break;
		default:	break;
	}
	delay();
	EA=1;
}

⌨️ 快捷键说明

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