tlc1549.c

来自「采用1*4,4*4键盘同时控制,带有8位数码显示的数控直流电源驱动及应用程序(K」· C语言 代码 · 共 125 行

C
125
字号
//ADC
//--------------------------------------------------------------------------------------------------
//tlc1549控制引脚宏定义
//--------------------------------------------------------------------------------------------------
sbit AD_CS1 = P1^2;  //CS3电压反馈           // 将p1.2口模拟片选
sbit AD_CS2 = P1^3;  //CS4电流反馈		     // 将p1.2口模拟片选
sbit AD_CLK = P1^7;                          // 将p1.7口模拟时钟输出
sbit AD_DOUT = P1^5;                         // 将p1.6口模拟主机输出

//---------------------------------------------------------------------------------
//读取电压反馈AD转换值
//---------------------------------------------------------------------------------

unsigned int Read1549_U(void)
{
	unsigned char n;
	unsigned int AD_Val=0;
	AD_CS1 = 1;
	AD_CS2 = 1;
	Delay(1);

	AD_CLK = 0;
	AD_DOUT = 1;
	Delay(1);

	AD_CS1 = 0;	
	Delay(1);

	for( n = 0; n < 10; n++ )
	{
		AD_CLK = 0;
		AD_CLK = 1;        
		_nop_();
	}
  
    AD_CLK = 0;
 	Delay(2);

	AD_CS1 = 1;
	AD_DOUT = 1;
	Delay(2);

	AD_CLK = 0;
	AD_CS1 = 0;
	Delay(1);

	for( n = 0; n < 10; n++ )
	{

		if(AD_DOUT == 1)  
		{
			 AD_Val = AD_Val | 0x0001; 
		}                  //===从高位开始接收===//
		else if(AD_DOUT == 0)              
		{
			 AD_Val = AD_Val & 0xFFFE; 
		}
		if(n != 9)  
		{
			AD_Val = AD_Val << 1;
		}                  //===接收的数据左移一位===//

		AD_CLK = 1; 
		AD_CLK = 0;
		
	}
	AD_CLK = 0;
	AD_CS1 = 1;

	return AD_Val;    //===返回值===//
}
//---------------------------------------------------------------------
//读取电流反馈AD转换值
//----------------------------------------------------------------------
unsigned int Read1549_I(void)
{
	unsigned char n;
	unsigned int AD_Val=0;

	AD_CLK = 0;

	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	AD_CS2 = 1;
	AD_DOUT = 1;

	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	AD_CS2 = 0;
	Delay(3);
	
	for( n = 0; n < 10; n++ )
	{
		AD_CLK = 0; 
		AD_CLK = 1;        //===时钟置高===//

		if(AD_DOUT == 1)  
		{
			 AD_Val = AD_Val | 0x0001; 
		}                  //===从高位开始接收===//
		else               
		{
			 AD_Val = AD_Val & 0xFFFE; 
		}
		if(n < 9)  
		{
			AD_Val = AD_Val << 1;
		}                  //===接收的数据左移一位===//
		
		AD_CLK = 0;
	}

	AD_CLK = 0; 
	AD_CS2 = 0;
	AD_CS2 = 1;
	Delay(10);
	return AD_Val;    //===返回值===//
}

⌨️ 快捷键说明

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