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

📄 ad9627_c控制代码.txt

📁 高速AD9627的c语言单片机控制代码
💻 TXT
字号:
#include "C8051F340.h"
#include <stdio.h>
#define     HIGH           2
#define     LOW            0
#define		SO             (P1&0x02)               		  //  P1.1端口 与 0000 0010
#define		SI_H           P1=P1|0x02 		              //  P1.1端口 或 0000 0010
#define 	SI_L           P1=P1&0xFD                     //  P1.1端口 与 1111 1101
#define 	SCK_H          P1=P1|0x01                     //  P1.0端口 或 0000 0001
#define 	SCK_L          P1=P1&0xFE                    //   P1.0端口 与 1111 1110
#define     CS_9517_L	   P1=P1&0xFB                     //  P1.2端口 与 1111 1011
#define     CS_9517_H      P1=P1|0x04					  //  P1.2端口 或 1111 0100
#define     CS_9627_L	   P1=P1&0xEF                    //	  P1.4端口 与 1110 1111
#define     CS_9627_H      P1=P1|0x10                    //	  P1.4端口 与 0001 0000

/*---------------------------------------------------------------------------------------------------------------*/
 //*********************************************************************************************************
    //                       AD9627函数
//*********************************************************************************************************
void  AD_write(unsigned int addr ,unsigned char data_1)	      //AD9627 写1Byte
{
    
	 unsigned char mark,i;
	 unsigned char command_1=0x00;
	 unsigned char mark1;								   //addr 后3字节有效
	 unsigned int mark2;
	 mark1=0x80;
	 mark2=0x0800;
	 mark=0x80;
	  
	  CS_9627_L;
  for(i=0;i<4;i++)   //
	  {
		 
		  if((command_1&mark)==0)  
              SI_L;
		  else
              SI_H;         
		  mark=mark>>1;
		                   
            SCK_H; 
            wait();      
		    SCK_L;
	}  
	  for(i=0;i<12;i++)   //
	  {
		 
		  if((addr&mark2)==0)  
              SI_L;
		  else
              SI_H;          
		  mark2=mark2>>1;
		                   
            SCK_H; 
            wait();       //时钟
		    SCK_L;
	 }  
	 for(i=0;i<8;i++)   
	  {
		 
		  if((data_1&mark1)==0)  
              SI_L;
		  else
              SI_H;          
		  mark1=mark1>>1;
		                   
            SCK_H; 
           wait();       //时钟
		    SCK_L;
	   }  
	  CS_9627_H;
}
 unsigned char read_AD(unsigned int addr)		//形参为地址	A11~A0 12bit   预读取1个字节	   9627读1Byte
{ 
   	   unsigned char return_data;					
       unsigned char mark2;		
	   unsigned int mark,i;
		unsigned int command=0x8000; 
	  CS_9627_L;
	 // CS_9627_L;
       return_data=0x00;
       mark=0x8000;
  	   mark2=0x80;
   for(i=0;i<4;i++)  
   {
         if((command&mark)==0)
           SI_L;
		 else
           SI_H; 
          mark=mark>>1;
		  SCK_H;         //时钟
		  wait();       
		  SCK_L;         
   }
   for(i=0;i<12;i++)	
   {
     	if((addr&mark)==0)	 
           SI_L;
		 else
           SI_H; 
          mark=mark>>1;
		  SCK_H;        
		  wait();      
		  SCK_L;         
   }

  	 P1 |= 0x02;	  
   
   for(i=0;i<8;i++)	    
   {	   
	   if(SO==HIGH)
	   {
		   return_data=return_data|mark2;
           mark2=mark2>>1;
	   }
	   else mark2=mark2>>1;
          SCK_H;         //时钟拉高
          wait();       //时钟
		  SCK_L;
   }
     CS_9627_H;
   return return_data;   //返回的数据为8bit

}
//*********************************************************************************************************
   //                        单片机初始化
//*********************************************************************************************************
void Oscillator_Init()
{
    int i = 0;
  //  OSCICN    = 0x00;
	OSCXCN = 0x67;
    for (i = 0;i<3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80)== 0);
	CLKSEL=0x01;    //如果要选择外部振荡器作为系统时钟,必须将CLKSL(CLKSEL的第0位)设为1
	 
}
 void Port_IO_Init()
{
    
   	P0MDIN    = 0x3F;
//	P2MDOUT   = 0xFF;
//	P2MDOUT=0x04;
     P1MDIN =0xFF;  //P1 端口全数字输入
     P1MDOUT=0x17;	 // 0001 0011  || P1.0  SCK ||	P1.1  DIO || P1.2  CS9517 || P1.4  CS9627
	// P1MDOUT=0xFF;    //for test
	XBR1      = 0x40;	 //
   // XBR2      = 0x40;  //交叉开关使能
}
 void Reset_Sources_Init()
{
    int i = 0;
   // PCA0MD=0x80;
    VDM0CN= 0x00;
    for (i =0; i <350;i++);  // Wait 100us for initialization
    RSTSRC=0x02;
}
void PCA_Init()
{
    PCA0MD    &= ~0x40;
   // PCA0MD    = 0x00;	   //Watchdog disenable
}
 //*********************************************************************************************************
void initial_9627()
{
  	 unsigned char da_1=0,da_2=0,da_3=0,da_4=0,da_5=0,da_6=0,da_7=0,da_8=0,da_9=0,da_10=0,da_11=0,da_12=0,da_13=0,da_14=0,da_15=0;
	 da_1=read_AD(0x0000);
	 wait();
	 da_2=read_AD(0x0001);
	 wait();
	 da_3=read_AD(0x0005);
	 wait();
	 da_4=read_AD(0x0008);
	 wait();
	 da_5=read_AD(0x0009);
	 wait();
	 da_6=read_AD(0x000B);
	 wait();
	 da_7=read_AD(0x000D);
	  wait();
	  da_8=read_AD(0x000E);
	 wait();
	 da_9=read_AD(0x0010);
	 wait();
	 da_10=read_AD(0x0014);
	 wait();
	 da_11=read_AD(0x0016);
	 wait();
	 da_12=read_AD(0x0017);
	 wait();
	 da_13=read_AD(0x0018);
	 wait();
     AD_write(0x0000,0x3C);//0011 1100
	 AD_write(0x00FF,0x01); //transfer
	 /*-----------------------output test-----------------------------*/
    // AD_write(0x000D,0x06); //0000 0110
    // AD_write(0x00FF,0x01); //transfer
      wait(); 
	 /*-----------------------output test-----------------------------*/
	 da_1=read_AD(0x0000);
	 wait();
	 AD_write(0x0000,0x18); //MSB first
	 AD_write(0x0005,0x03);	 // channel A&B
	 AD_write(0x0018,0x80);	 // VREF
    AD_write(0x0014,0x90);	 //output mode
	AD_write(0x00FF,0x01); //transfer
	 
	 AD_write(0x0005,0x03);	 // channel A&B
	 AD_write(0x0017,0x83);	  //output delay
	  AD_write(0x0008,0x20);
	 AD_write(0x00FF,0x01); //transfer
	 
	 
	  AD_write(0x0010,0x03);
	 AD_write(0x0005,0x02);
	 AD_write(0x00FF,0x01);
	 AD_write(0x0005,0x04);
     AD_write(0x0010,0x09);
     AD_write(0x00FF,0x01);
	 wait();   
}
void main()
 {
	int i,j;

   PCA_Init();
   
   for(i=0;i<1000;i++)
   {
      for(j=0;j<100;j++);
   }
  
   Reset_Sources_Init();
   Port_IO_Init();
   Oscillator_Init();
   
   
   initial_9517();
  //	initial_9627();
   wait();
  while(1)
   {;}
 }

⌨️ 快捷键说明

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