📄 ad421.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 + -