📄 dac7612.c
字号:
#include <reg52.h>
#include "include/DAC7612.h"
#include "include/time.h"
#include "include/DataProces.h"
/*========================================================/
/ /
/ Copyright (C), 2001-2005, Pangu Automation. Co., Ltd. /
/ FileName: DAC7612.c /
/ Author: Zheng M.D. /
/ Version: 1.0 /
/ Date: 2005.11.12 /
/ Description: DAC7612驱动程序 /
/ Modify: /
/ /
/========================================================*/
extern CALIPARAM idata pHCaliParam;
extern TRANSMISSION idata TransData;
/*************************************************
//函 数 名:DAC7612_Write
//功 能:ADC7612输出数据
//输入参数:channel(unsigned char)通道号(0为pH,1为pt1000)
outdata(unsigned short) 数据
//返 回 值:无
//备 注:所有输出位均反向输出
*************************************************/
void DAC7612_Write(unsigned char channel,unsigned short outdata)
{
unsigned char i;
outdata &= 0x0fff;
// outdata = 0x7ff;
if(channel==1)
{
outdata |= 0x3000; //pt1000
}else{
outdata |= 0x2000; //pH
}
__DAC7612_CS = 1; //Chip Select
__DAC7612_SCLK = 1;
__DAC7612_LOAD = 0; //停止加载
//传入码值
for(i = 0; i < 14; i++)
{
if(outdata & 0x2000)
{
__DAC7612_SDI = 0;
}
else
{
__DAC7612_SDI = 1;
}
__DAC7612_SCLK = 1; //时钟低电平时放数据,实际输出取反
delay_us(DAC7612_DELAY);
//加入延时(注:光耦521传输速度10K)
__DAC7612_SCLK = 0;
delay_us(DAC7612_DELAY);
outdata <<= 1;
}
__DAC7612_CS = 0;
delay_us(DAC7612_DELAY);
__DAC7612_LOAD = 1; //加载DA值
delay_us(DAC7612_DELAY);
__DAC7612_LOAD = 0;
delay_us(DAC7612_DELAY);
__DAC7612_LOAD = 1;
}
/*************************************************
//函 数 名:ProcessDAOutput()
//功 能:输出对应的4~20mA
//输入参数:无
//返 回 值:无
//备 注:
*************************************************/
void ProcessDAOutput(void)
{
short outdata;
float temp;
//pH->mA
temp=(float)(TransData.pHPercent-pHCaliParam.pHto4mA)*30000.0/
(pHCaliParam.pHto20mA-pHCaliParam.pHto4mA);
if(temp<0.0)
{
temp=0.0;
}
if(temp>30000.0)
{
temp=30000.0;
}
temp =(float)(pHCaliParam.pHDAUpper - pHCaliParam.pHDALower) * temp/
30000.0 + pHCaliParam.pHDALower;
outdata = (short)temp;
DAC7612_Write(0,outdata);
//pt1000->mA
//temp=(float)(TransData.pHPercent-pHCaliParam.pt1000to4mA)*30000.0/
// (pHCaliParam.pt1000to20mA-pHCaliParam.pt1000to4mA);
//if(temp<0.0)
//{
// temp=0.0;
// }
//if(temp>30000.0)
//{
// temp=30000.0;
//}
temp = (float) (pHCaliParam.pt1000DAUpper - pHCaliParam.pt1000DALower) * TransData.Pt1000Percent
/30000.0 + pHCaliParam.pt1000DALower;
outdata = (short)temp;
DAC7612_Write(1,outdata);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -