原创 C8051F410读取AD421程序

2010-6-24 10:45 4165 7 7 分类: MCU/ 嵌入式

#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条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条