#include "c8051F410.h"
#define AD421_CLOCK 0x10 // P1.4串行输出时钟
#define AD421_DATA 0x20 // P1.5数据
#define AD421_LTACH 0x08 // P1.3保持
#define AD421_PORT P1 // AD421输出口
/*******************************************************************************************************/
/*函数名称:Output_Current
/*函数功能:输出4-20ma数据
/*入口参数:当前值,上限,下限
/*根据输入的上下限值决定4-20ma的输出范围.
/*出口参数:无
/*备 注:完善
/*******************************************************************************************************/
void Output_Current(uint open,uint mx,uint mn)
{
uint idata i,j;
uint idata k="0x8000";
uint idata DA_code;
AD421_PORT &= 0xd7; //清输出,也可用AD421_PORT&= ~(AD421_DATA+AD421_LTACH)
DA_code=65535/(mx-mn); //比例值
DA_code=65535-(open-mn)*DA_code;//由于通过光耦后,波形相反,所以用65536减去而使波形相反.
for(i=0;i<16;i++) //输出16位,从最高位开始输出
{
k=0x8000;
AD421_PORT|=AD421_CLOCK;
k&=DA_code;
DA_code=DA_code<<1;
if(k!=0)
{
AD421_PORT|=AD421_DATA;
}
else { AD421_PORT&=~AD421_DATA;}
for(j=0;j<80;j++);
AD421_PORT&=~AD421_CLOCK;
for(j=0;j<120;j++);
k=0x8000;
}
DA_code=0;
AD421_PORT|=AD421_LTACH;
AD421_PORT &=0xCF;
}
文章评论(0条评论)
登录后参与讨论