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

📄 ad5934.c

📁 用51单片机实现的AD5934(网络分析仪)
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint  unsigned int
sbit SCL=P2^0;
sbit SDA=P2^1;


void delay(uchar d)
{
    while(--d);
}

//================IIC总线的操作子程序====================
/*****************启动总线**********************/
void IICStart(void)
{
    SCL=0;                 
    SDA=1;SCL=1;SCL=1;SCL=1;SCL=1;
 	SDA=0;SDA=0;SDA=0;SDA=0;SDA=0;
    SCL=0;SCL=0;SCL=0;
    SDA=1;                  
}

/*****************停止IIC总线****************/
void IICStop(void)
{
    SCL=0;SDA=0;
    SCL=1;SCL=1;SCL=1;SCL=1;
    SDA=1;SDA=1;SDA=1;SDA=1;
    SCL=0;
}

/**************检查应答位*******************/
bit IICRecAck(void)
{
    SCL=0;
    SDA=1;
    SCL=1;SCL=1;SCL=1;SCL=1;SCL=1;
    CY=SDA;          //因为返回值总是放在CY中的
    SCL=0;
    return(CY);
}

/*****************不对IIC总线产生应答***************/
void IICNoAck(void)
{
    SDA=1;
    SCL=1;SCL=1;SCL=1;SCL=1;SCL=1;SCL=0;
}

/*******************向IIC总线写数据*********************/
void IICSendByte(uchar sendbyte)
{
    uchar j;
    for(j=8;j>0;j--)
   {
       SCL=0;
       sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
       SDA=CY;
       SCL=1;
   }
   SCL=0;
}

/**********************从IIC总线上读数据子程序**********/
uchar IICReceiveByte(void)
{
    uchar receivebyte,ii;
    SCL=0;
    ii=8;
    while(ii--)
   {
       SCL=1;
       receivebyte=(receivebyte<<1)|SDA;
       SCL=0;
   }
   return(receivebyte);
}

bit IICWrite(uchar address,uchar buf)
{
    bit flag=0;
	flag=1;
	IICStart();						  //开始IIC
    IICSendByte(0x1a);				  //发送从器件地址(R/W=0)   0001 1010
    if(IICRecAck())
    flag=0;
    IICSendByte(address);			  //Send Register Address
    if(IICRecAck())
    flag=0;
    IICSendByte(buf);
    if(IICRecAck())					  //Send Register Data
       flag=0;						  //停止IIC
    IICStop();
    delay(255);
    delay(255);
    delay(255);
    delay(255);
	return flag;
}

/*
uchar IICRead(uint address)
{      uchar buf;
       IICStart();
       IICSendByte(0xa0);
       if(IICRecAck())
       buf=0xff;
       IICSendByte((uchar)(address>>8));
       if(IICRecAck())
       buf=0xff;
       IICSendByte((uchar)address);
       if(IICRecAck())
       buf=0xff;
       IICStart();
       IICSendByte(0xa1);
       if(IICRecAck())
       buf=0xff;
       buf=IICReceiveByte();
                               //read last byte data
       IICNoAck();      
       IICStop();
       return(buf);
}
*/
main()
{
    IICWrite(0x82,0x3d);  //Start frequency:     Fs=0x3d70a3*Fmclk/(2^27*16)
	IICWrite(0x83,0x70);  //
	IICWrite(0x84,0xa3);


	IICWrite(0x85,0x00);  //Frequency increment     Finc=10/8=1.25HZ
	IICWrite(0x86,0x05);
	IICWrite(0x87,0x3e);

	IICWrite(0x88,0x00);  //Number of increments(N<<512)  N=150
	IICWrite(0x89,0x96);

	IICWrite(0x80,0xb0);  //Standby Mode  0x80: 1011 0000
	IICWrite(0x81,0x18);
	IICWrite(0x81,0x08);



	IICWrite(0x80,0x10);  //Initialize with Start Frequency 
	IICWrite(0x80,0x20);
	while(1)
	{
	    IICWrite(0x80,0x30);  //Increment frequency
	}

}



⌨️ 快捷键说明

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