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

📄 dac.c

📁 采用两片凌阳61实现的建简易智能车程序
💻 C
字号:
#include "SPCE061V004.H"
#define	Set_IOA_Bit(x)		(*P_IOA_Data = *P_IOA_Buffer | x)
#define	Clear_IOA_Bit(x)	(*P_IOA_Data = *P_IOA_Buffer & ~x)
#define	DIN		0x0001         //串行数据输入   IOA0
#define	SCLK	0x0002         //串行时钟       IOA1
#define	CS		0x0004         //使能信号       IOA2
#define OUTB    0x0000         //OUTB and buffer
#define OUTA    0x0001         //OUTA
#define OUTAB   0x8000         //Write A and update OUTB with buffer
#define OUTBUF  0x0100         //BUFFER 
extern unsigned int   data_val,V_value;	
//*************************************************************
//函数名称:CtrlTLV5618()
//功能:向12位串行DA TLV5618置数
//参数:12位数据
//*************************************************************
void CtrlTLV5618(unsigned int OUTX,unsigned int dat)
{
	unsigned int order,value,mask,i;
	mask = 0x8000;
	order = OUTX;         //OUTA,OUTB,SLOW
	value = order | dat;
	Set_IOA_Bit(CS);
	Clear_IOA_Bit(CS);
	for(i=0;i<16;i++)
	{
		*P_Watchdog_Clear= 0x0001;
		Set_IOA_Bit(SCLK); 	
		if(mask & value)
		Set_IOA_Bit(DIN);
		else
		Clear_IOA_Bit(DIN);	
		Clear_IOA_Bit(SCLK);
		mask = mask>>1;
	}
	Set_IOA_Bit(SCLK);		
	Set_IOA_Bit(CS);	
}
//*********************************************************************
//WriteDAC(unsigned int PORT,unsigned int dat)
//*********************************************************************
void WriteDAC(unsigned int PORT,unsigned int dat)
{
	if(PORT == OUTB)
	CtrlTLV5618(OUTB,dat);
	else if(PORT == OUTA)
	{
		CtrlTLV5618(OUTBUF,data_val);
		CtrlTLV5618(OUTAB,dat);
		CtrlTLV5618(OUTB,data_val);
	}
}		
//**********************************************************************************//
//函数名称:AGC()
//函数功能:对系统进行自动增益控制
//参数:无
//**********************************************************************************//
void  AGC()
    {    
    	unsigned int sum,j;
    	*P_Watchdog_Clear=1;
    	sum = 0;
    	for(j=0;j<8;j++)
    	{
    		GetFudu();       //读取AD采样值
    		sum = sum + V_value;
    	}	
    	V_value = sum >> 3;                        //取平均值,相当于软件滤波	
    	
        if(V_value<1641)                           //幅度小于1V  ????????????
          {  
          	 if(data_val<4095) 
             { 
               data_val+=1;
               WriteDAC(OUTB,data_val);
             }
             else
             { 
               data_val=4095;
               WriteDAC(OUTB,data_val);
             }   
           }
        else if(V_value>1645)                      //幅度大于1V
           {  
           	  if(data_val>0)
              { 
                data_val-=1;
                WriteDAC(OUTB,data_val);
              }
              else
              {  
                 data_val=0;
                 WriteDAC(OUTB,data_val);
              }   
           }
        else
        WriteDAC(OUTB,data_val);
     } 

⌨️ 快捷键说明

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