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

📄 ad9510.c

📁 基于单片机Aduc841的调试程序
💻 C
字号:
#include<aduc841.h>
#include "MacroDef.h"

sbit AD9510_CSB = P3^3;
sbit AD9510_DATA = P3^4	;
sbit AD9510_CLK = P3^5	;

static unsigned char ucInstrWord[2];//AD9510读写控制字
static unsigned char ucData[4];//保存所发数据
/**********************************************************************
* 函数名称:   SetADRegister
* 功能描述:   设置寄存器
* 访问的表:																																				  
* 修改的表: 
* 输入参数:
* 输出参数: 
* 返回值  :
* 其它说明:
* 修改日期        版本号     修改人          修改内容
* -----------------------------------------------
* 2006/04/04    	V1.0        
***********************************************************************/
void SetADRegister(unsigned int uiAddr,unsigned long ulData,unsigned int length)
{
 SetRWCtrlWord(uiAddr,length,AD9510_WRITE);//设置AD9510读写控制字
 SetTrsfData(ulData);					         //设置AD9510发送的数据
	SendAD9510Command(ucInstrWord,2); //发送控制字
	SendAD9510Command(ucData,length); //发送数据

	//将数据从缓冲区写入实际的寄存器中,向5A<0>写1
	ucInstrWord[0] = 0x5A;
	ucInstrWord[1]	= 0x00;
	SendAD9510Command(ucInstrWord,2); //发送控制字
	ucData[0] = 0x01;
	SendAD9510Command(ucData,1);		   	//	向5A<0>写1
}
/**********************************************************************
* 函数名称:   ReadADRegister
* 功能描述:   设置寄存器 
* 访问的表:
* 修改的表: 
* 输入参数:
* 输出参数: 
* 返回值  :
* 其它说明:
* 修改日期        版本号     修改人          修改内容
* -----------------------------------------------
* 2006/04/04    	V1.0        
***********************************************************************/
unsigned long ReadADRegister(unsigned int uiAddr,unsigned int length)
{
 unsigned long ReturnValue;
	int i;
 for(i=0;i<4;i++)
	{
		ucData[i] = 0x00;
	}
 SetRWCtrlWord(uiAddr,length,AD9510_READ);//设置AD9510读写控制字
	SendAD9510Command(ucInstrWord,2); //发送控制字
	ReadAD9510Command(length);								//读数据
	ReturnValue = (unsigned long)ucData[3];
	ReturnValue = (ReturnValue << 8) | ucData[2];
	ReturnValue = (ReturnValue << 8) | ucData[1]; 
	ReturnValue = (ReturnValue << 8) | ucData[0];
	return ReturnValue;
}

/**********************************************************************
* 函数名称:   SetRWCtrlWord
* 功能描述:   设置AD9510读写控制字
* 访问的表:
* 修改的表: 
* 输入参数:
* 输出参数: 
* 返回值  :
* 其它说明:
* 修改日期        版本号     修改人          修改内容
* -----------------------------------------------
* 2006/04/04   	V1.0        
***********************************************************************/
void SetRWCtrlWord(unsigned int uiAddr,unsigned int length,unsigned int ucRWFlag)
{
 unsigned char tmp;
 //AD9510读写控制字初始化为0
 ucInstrWord[0] = 0x00;
 ucInstrWord[1] = 0x00;
 //根据读写标志设置最高位,读:I15 = 1 ,写:I15 = 0
 if(ucRWFlag == AD9510_WRITE )
 {
  ucInstrWord[1] &= 0x7F;
 }
 else
 {
  ucInstrWord[1] |= 0x80;
 }
 //根据数据长度设置I14和I13
 switch(length)
 {
   case 1:
     //长度为1
     ucInstrWord[1] &= 0x9F;
     break;
   case 2:
     //长度为2
     ucInstrWord[1] &= 0xBF;
	    ucInstrWord[1] |= 0x20;
     break;
   case 3:
     //长度为3
     ucInstrWord[1] &= 0xDF;
	    ucInstrWord[1] |= 0x40;
     break;
   case 4:
     //长度为4
     ucInstrWord[1] |= 0x60;
     break;
   default:
     break;

 }
 //根据地址设置I12-I0
 ucInstrWord[0] = uiAddr & 0xFF;//设置地址低8位
 tmp = (uiAddr >> 8) & 0x1F;
 ucInstrWord[1]	|= tmp;			//设置地址高5位

}
/**********************************************************************
* 函数名称:   SetTrsfData
* 功能描述:   设置AD9510发送的数据																		
* 访问的表:
* 修改的表: 
* 输入参数:
* 输出参数: 
* 返回值  :
* 其它说明:
* 修改日期        版本号     修改人          修改内容
* -----------------------------------------------
* 2006/04/04    	V1.0        
***********************************************************************/
void SetTrsfData(unsigned long ulData)
{
 //设置发送数据
 ucData[0] = (unsigned char)(ulData & 0xFF);
 ucData[1] = (unsigned char)((ulData >> 8) & 0xFF);
 ucData[2] = (unsigned char)((ulData >> 16) & 0xFF);
 ucData[3] = (unsigned char)((ulData >> 24) & 0xFF);
}
/**********************************************************************
* 函数名称:   SendAD9510Command
* 功能描述:   发送AD9510寄存器的函数
* 访问的表:
* 修改的表: 
* 输入参数:
* 输出参数: 																																																															
* 返回值  :		 void
* 其它说明:
* 修改日期        版本号     修改人          修改内容
* -----------------------------------------------
* 2006/04/04    	V1.0        
***********************************************************************/
void SendAD9510Command(unsigned char byteNumber[4],int byteSelect)								
{
	int i,j;
	
	for (j=byteSelect-1;j>=0;j--)
	{
	  AD9510_CSB = 0;
			for (i=7;i>=0;i--)
			{
				AD9510_CLK = 0;
				switch (i)
				{
					case 0:
						if((byteNumber[j]&0x01) == 0x01)
							AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					case 1:
						if((byteNumber[j]&0x02) == 0x02)
							AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					case 2:
						if((byteNumber[j]&0x04) == 0x04)
							AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					case 3:
						if((byteNumber[j]&0x08) == 0x08)
					 	AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					case 4:
						if((byteNumber[j]&0x10) == 0x10)
							AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					case 5:
						if((byteNumber[j]&0x20) == 0x20)
				 		AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					case 6:
						if((byteNumber[j]&0x40) == 0x40)
					 	AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					case 7:
						if((byteNumber[j]&0x80) == 0x80)
							AD9510_DATA = 1;
						else
							AD9510_DATA = 0;
						break;
					default:
						break;
				}
				AD9510_CLK = 1;
		}
		AD9510_CSB = 1;	
	}
}
/**********************************************************************
* 函数名称:   ReadAD9510Command
* 功能描述:   读取AD9510寄存器数据的函数
* 访问的表:
* 修改的表: 
* 输入参数:
* 输出参数: 
* 返回值  :
* 其它说明:
* 修改日期        版本号     修改人          修改内容
* -----------------------------------------------
* 2006/04/04    	V1.0        
***********************************************************************/
void  ReadAD9510Command(int byteSelect)								
{
	int i,j;
	int tmp;
	for (j=byteSelect-1;j>=0;j--)
	{
	  AD9510_CSB = 0;
			for (i=7;i>=0;i--)
			{
				AD9510_CLK = 1;
				tmp = AD9510_DATA;
				if(1 == tmp)
				{
					ucData[j] |= 0x01;
					ucData[j]	<<= 1;
				}
				else
				{
					ucData[j] &= 0xFE;
					ucData[j]	<<= 1;
				}
				AD9510_CLK = 0;
		 }
		AD9510_CSB = 1;
			
	}

}




⌨️ 快捷键说明

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