++ /****************************************************
子程序名:DAC7611
程序功能:控制数/模转换器DAC7611的工作
程序出口:引脚P1.0(输出片选信号)
引脚P1.1(输出时钟)
引脚P1.2(输出数据)
引脚P1.3(输出数/模转换过程启动信号)
整理时间:2008-7
*******************************************************/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
sbit CS =P1^0; //输出片选信号
sbit CLK="P1"^1; //输出时钟
sbit SDI="P1"^2; //输出数据
sbit LD="P1"^3; //输出数/模转换过程启动信号
/******初始化DAC7611******************/
void init_da(void)
{
LD="0"; // 装载引脚置低
CS="1"; //片选置高
CLK="1"; //时钟置高
SDI="0";
}
/*****时钟脉冲子函数***********/
void clock(void)
{
CLK="0";
_nop_();
CLK="1"; //产生一个时钟脉冲
_nop_();
}
/******DAC7611转换***************/
void DAC_7611(uint vol)
{
uint i,j;
vol<<=4;
LD="1"; //装载引脚置高
_nop_();
CS="0"; //片选拉低,准备转换
for(i=0;i<12;i++)
{
j="vol";
SDI="j"&0x8000;
clock();
vol<<=1;
}
CLK="1"; // 输出时钟置高
_nop_();
CS="1"; //DAC7611片选引脚CS置高
_nop_();
LD="0"; //装载引脚LD置低以启动数模转换
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); //延时一会,使输出模拟电压达到稳定
LD="1"; //LD置高
}
/**********主程序*****************/
void main()
{
init_da();
DAC_7611();
}
文章评论(0条评论)
登录后参与讨论