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

📄 max5533.c

📁 (个人原创)这个是我在Keil下写的MAX5532--MAX5535通用的驱动代码
💻 C
字号:
//完成时间: 2008/08/21
//作者:ppt1845
//测试:ppt1845(以下全部模块通过硬件测试)

//--------我手上得到的是5532芯片,必须要提供外部参考电压,并不是5533--------//
/** MCU为51单片机,主频12M,根据IC手册和Keil指令周期,不需要加必要延时,就能
满足所有操作时序要求 **/

#include "MAX5533.h"

//---------------写控制位和DAC数据函数--------------------//
/*********************************************************
函数形参:
  control_bits: 为需要写入的控制位.
  DAC_dat: 为需要写入的数据,并可根据在函数调用时,可以写入
           有效数据,也可以写入无效数据.
函数功能:
  一个16位数据的完整写入.   
*********************************************************/
void Write_MAX5533(uint8 control_bits, uint16 DAC_dat)
{
  uint8 i;
  MAX5533_SCLK=0;
  MAX5533_CS=0;		       //使能
  DAC_dat=((uint16)control_bits<<12)|DAC_dat;
  for(i=0;i<16;i++)
  {
    if(DAC_dat&0x8000)
	  MAX5533_DIN=1;
	else
	  MAX5533_DIN=0;
	MAX5533_SCLK=1;		   //写入数据
	DAC_dat<<=1;
	MAX5533_SCLK=0;
  }
  MAX5533_CS=1;			   //禁止
  MAX5533_SCLK=1;		   //为减少电源功耗
}
//--------------------------------------------------------//


/*********************************************************
函数形参:
  Ref_Volt: 为在进入空闲模式后,内部参考电压的输出选择值
    Ref_Volt = Ref_1v214 时,内部参考电压的输出为 1.214 v
	Ref_Volt = Ref_1v940 时,内部参考电压的输出为 1.940 v
 	Ref_Volt = Ref_2v425 时,内部参考电压的输出为 2.425 v
	Ref_Volt = Ref_3v885 时,内部参考电压的输出为 3.885 v
注意:
  StandBy模式只针对MAX5533和MAX5535,参考电压输出有效,如果
  将此函数用于MAX5532和MAX5534的话,那MAX5532和MAX5534将直
  接进入掉电模式。
函数功能:
  使所选器件进入空闲模式,DAC输出呈高阻抗,使之功耗更低
**********************************************************/
void Enter_StandBy_Mode(uint8 Ref_Volt)
{
  Write_MAX5533(StandBy_Mode,Ref_Volt);
}
//----------------------------------------------------------------------------//


/*********************************************************
函数形参:
  Ref_Volt: 与Enter_StandBy_Mode()函数中的说明一样。
注意:
  1、Normal模式对于MAX5532--MAX5535全部适用。
  2、但是对于内部参考电压输出,只对MAX5533和MAX5535有效。
函数功能:
  使器件进入工作模式后,DAC输出DAC寄存器中的转换值。
**********************************************************/
void Enter_Normal_Mode(uint8 Ref_Volt)
{
  Write_MAX5533(Normal_Mode,Ref_Volt);
}
//---------------------------------------------------------------------------//


/*********************************************************
函数形参:
  Ref_Volt: 与Enter_StandBy_Mode()函数中的说明一样。
            此函数中的Ref_Volt其实是个无效值
注意:
  1、ShutDwon模式对于MAX5532--MAX5535全部适用。
  2、只对MAX5533和MAX5535有效内部参考电压在掉电模式中,也被
     关闭。
函数功能:
  使器件进入掉电模式,DAC输出呈高阻抗,使之功耗更低
**********************************************************/
void Enter_ShutDwon_Mode(uint8 Ref_Volt)
{
  Write_MAX5533(Shutdown_Mode,Ref_Volt);
}
//--------------------------------------------------------------------------//


/*********************************************************
函数形参:
  Ref_Volt: 与Enter_StandBy_Mode()函数中的说明一样。
            此函数中的Ref_Volt其实是个无效值
函数功能:
  使器件进入掉电模式,DAC输出呈高阻抗,使之功耗更低
**********************************************************/
void Change_StandBy_to_ShutDown(uint8 Ref_Volt)
{
  Enter_Normal_Mode(Ref_Volt);
  Enter_ShutDwon_Mode(Ref_Volt);
}
//--------------------------------------------------------------------------//
 

//双通道DAC输出----方案1
/*********************************************************
函数形参:
  Ch_A_dat: 向通道A写入的数据.
  Ch_B_dat:向通道B写入的数据.
函数功能:
  实现双通道同时输出DAC不同的有效数据.
**********************************************************/
void Double_Channle_DACOUT_Method_1(uint16 Ch_A_dat,uint16 Ch_B_dat)
{
  Write_MAX5533(Shift_to_Input_A, Ch_A_dat);	//仅是把输出的数据写入输入寄存器A中,此时的DAC_A为无效输出
  Write_MAX5533(Shift_to_Input_B, Ch_B_dat);	//仅是把输出的数据写入输入寄存器B中,此时的DAC_B为无效输出
  Write_MAX5533(InputAB_to_DACRegAB,0x0000);	/*把输入输入寄存器AB写入DAC寄存器中,并更新两路输出DAC,
                                                      此时的0x0000位无效值,可以任意(超过0x1000的未测试)*/                                                
}
//----------------------------------------------------------------------------//


//双通道DAC输出----方案2
/*********************************************************
函数形参:
  Ch_A_dat: 向通道A写入的数据.
  Ch_B_dat:向通道B写入的数据.
函数功能:
  实现双通道同时输出DAC不同的有效数据.
**********************************************************/
void Double_Channle_DACOUT_Method_2(uint16 Ch_A_dat,uint16 Ch_B_dat)
{
  Write_MAX5533(Shift_to_Input_B, Ch_B_dat);	//写把数据写入到输入寄存器B中,此时的DAC_B为无效输出
  Write_MAX5533(SFTtoInADA_InBtoDACB,Ch_A_dat);	//此时的CH_A_dat为A通道的有效数据
}
//----------------------------------------------------------------------------//


//双通道DAC输出----方案3
//双通道输出相同的DAC值
void Double_Channle_DACOUT_Method_3(uint16 Ch_AB_dat)
{
  Write_MAX5533(ShiftAB_to_DACAB,Ch_AB_dat);
}
//----------------------------------------------------------------------------//


/********************************************************
方案比较:
    双通道DAC输出3中方案中,在实际使用中,当需要两路输出
	各自需要的DAC时,一般选用方案2,因为它比方案1的完成时
	间更短,效率更高。
	方案3并不是没有用处,可以作为单通道DAC输出使用。
*********************************************************/


//---------------------test main()-----------------------//
void main(void)
{
   //演示测试全部OK
   Double_Channle_DACOUT_Method_1(0x0400,0x0800);
   Double_Channle_DACOUT_Method_2(0x0a00,0x0635);
   Double_Channle_DACOUT_Method_3(0x0754);
//如果是MAX5533或者是MAX5535 =========================================================
   Enter_StandBy_Mode(Ref_2v425);	        // 此时的Ref_Out = 2.425 v,为有效值
   Change_StandBy_to_ShutDown(Ref_1v940);	// 此时的Ref_1v940为无效值
   Enter_Normal_Mode(Ref_3v885);			/* 此时的Ref_3v885为有效值,一般在想从其他模式
                                                   回到工作模式时,想改变之前设置的内部参考
												   电压的话,可用到此函数
                                            */
//====================================================================================
   Double_Channle_DACOUT_Method_2(0x0d45,0x0435);
   while(1);
}

⌨️ 快捷键说明

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