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

📄 ad421.txt

📁 一款在仪表和总线行业应用广泛的芯片 有D/A变换和I/V变换的芯片 该芯片应用非常方便和稳定
💻 TXT
字号:
仅供参考, x为要输出的电流数!#$%^&Amp;*

void Output_Current(floAt x)
{
#define AD421_CLOCK 0x04 // P6.2
#define AD421_DATA 0x02 // P6.1
#define AD421_LTACH 0x01 // P6.0
#define AD421_DIR P6DIR // AD421定义为P6口
#define AD421_PORT P6OUT // AD421得输出口


unsigned int i;
unsigned int k=0x8000;
unsigned int DA_code;


AD421_DIR|=AD421_LTACH+AD421_DATA+AD421_CLOCK; 
AD421_PORT&Amp;=~AD421_LTACH;
AD421_PORT&Amp;=~AD421_CLOCK;

if(x>=16)
{
x=x-16;
AD421_PORT|=AD421_DATA; 
}
else AD421_PORT&Amp;=~AD421_DATA;
DA_code=4096*x;

AD421_PORT|=AD421_CLOCK;

for(i=0;i<16;i++)
{
AD421_PORT&Amp;=~AD421_CLOCK;
k&Amp;=DA_code;
DA_code=DA_code<<1;
if(k!=0)
{
AD421_PORT|=AD421_DATA; 
}
else
AD421_PORT&Amp;=~AD421_DATA;
AD421_PORT|=AD421_CLOCK;
k=0x8000;
}

AD421_PORT|=AD421_LTACH;
} 





另外一个参考程序:

#define Latch_Down P3OUT&=~BIT0        /*将AD421芯片的Latch线置低*/
#define Latch_Up  P3OUT|=BIT0          /*将Latch线置高*/
#define Clock_Down P3OUT&=~BIT2        /*将AD421芯片的Clock线置低*///modi
#define Clock_Up  P3OUT|=BIT2          /*将Clock线置高*/              //modi
#define Data_Down P3OUT&=~BIT1         /*将AD421芯片的Data线置低*/      
#define Data_Up   P3OUT|=BIT1          /*将Data线置高*/

unsigned char DA_Data_Ok=0;
unsigned char DA_Finish=1;
int DA_i=-1;
int DA_j=-1;
unsigned char Value1;
unsigned int Value;

/*
************************************************************************************************************************
                                                                  void DA_Convert(void)
Send the Data to the DA chip bit by bit

************************************************************************************************************************
*/                              
//DA_Finish 17位数据传完标志。在DA_Convert()里清0,数据传输结束置1
//DA_Data_Ok 单位传输结束标志,在开始传输
void DA_Convert(void)
{  
   if(DA_Finish==0)//DA 数据已经转换完毕
   {
     if(DA_i<0&&DA_j<0)  //本次全部传输完毕
       {
           // Latch_Down;  
            if(DA_Data_Ok==0)//最后一位还未发送结束
            {
            	Clock_Up;
                DA_Data_Ok=1;
                Latch_Up;     
            }
           else                        //本次传输完毕    
           {
              Clock_Down;
              Data_Down;
              DA_Finish=1;//置完成标志位
              Latch_Up;     
              
           }
       }  
     else if(DA_Data_Ok==0){Clock_Up;DA_Data_Ok=1;} //clk上升沿,置本位传完标志
     else if(DA_i>=0)//高8位没传输完   
       {
         Clock_Down;
         if((Value1>>DA_i)&BIT0) Data_Up;//传送本位数据
         else                    Data_Down;
         DA_Data_Ok=0;//置1位下降沿传完标志
         DA_i--;
       }
     else           //高8位已经传输完,开始传输低16位
       {
         Clock_Down;
         if((Value>>DA_j)&BIT0) Data_Up;//传送本位数据
         else                   Data_Down;
         DA_Data_Ok=0;//置1位下降沿传完标志
         DA_j--;
       }
   }
}

/*---------------------------DA输出函数------------------------------*/
void DA_Send(void)
{
    int i;
    
    if(DA_Finish==1)
    {
      if(RAM_Run.PV<0.75)
      {
        Value=(unsigned int)(65534.67*RAM_Run.PV)+16384;
        if (Value<0x4000)Value=0x4000;//<4mA =4mA
        Value1=0;
      }
      else
      {
        Value=(unsigned int)(65536*RAM_Run.PV)-49152;
        if (Value>0x4000)Value=0x4000;
        Value1=0x01;
      }
      Clock_Down;    
      DA_Data_Ok=1;
      DA_i=7;
      DA_j=15;
      Latch_Down;
      Data_Down;
      for(i=0;i<4096;i++);
      DA_Finish=0;
    }  
}

⌨️ 快捷键说明

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