找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

《求助》大家帮忙看下我这个DAC7614的程序,目前芯片还没正常工

[复制链接]
admin 发表于 2012-9-2 09:02:53 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
5_160589_0d3cf79ed39b46f.jpg
前些天淘了一个别人制作的DAC7614的模块。最近这几天要用,所以就在调试,但是无论我怎么调,输出就是不正常。DAC7614是U封装的,用的是上面的单电源电路。复位引脚已经接了高电平。

#include<reg51.h>
#include<intrins.h>
#include"rest.h"
#define uchar unsigned char
#define uint unsigned int
sbit SDI=P2^0; //数据线
#define SDI_SET() SDI = 1
#define SDI_CLR() SDI = 0
sbit CLK=P2^1; //时钟线
#define CLK_SET() CLK = 1
#define CLK_CLR() CLK = 0
sbit CS1=P2^2; //片选
#define CS1_SET() CS1 = 1
#define CS1_CLR() CS1 = 0
sbit LOAD=P2^3; //控制加载
#define LOAD_SET() SDI = 1
#define LOAD_CLR() SDI = 0
uint Output;
sbit Key_plus=P1^7;
sbit LED=P1^6;
/**********************************************************
函数名称:void delay_us(void)
函数功能:延时4us
入口参数:无
出口参数:无
备 注: 示波器实测延时3.5us
***********************************************************/
void delay_4us(uint n)
{
for(;n>0;n--)
_nop_();
}
/***********************************************************
函数名称:delay_ms(uint ms)
函数功能:延时1ms的整数倍
入口参数:ms——延时的毫秒数
出口参数:无
备 注:示波器实测1ms,误差1us内
***********************************************************/
void delay_ms(uint ms)
{
uint a;
for(;ms>0;ms--)
for(a=920;a>0;a--);
}
/***********************************************************
函数名称:void DAC7614_init(void)
函数功能:对DAC7614端口进行初始化
入口参数:无
出口参数:无
备 注:
***********************************************************/
void DAC7614_init(void) //初始化
{
CS1_SET(); //片选置高,芯片不工作
SDI_SET(); //数据管脚置高
CLK_SET(); //时钟线置高
LOAD_CLR(); //数据加载引脚拉低
}
/***********************************************************
函数名称:DAC7614_Wite(uint Word)
函数功能:向DAC7614写入一个16位的数据
入口参数:Word-----要写入的16位数据
出口参数:无
备 注:
***********************************************************/
void DAC7614_Wite(uint Word)
{
uchar i;
LOAD_SET(); //数据加载线置高
delay_4us(1);
CS1_CLR(); //片选拉低选中芯片工作
delay_4us(1);
for (i=0;i<16;i++) //16位数据
{

if((Word<<i)&0x8000)
SDI_SET();
else
SDI_CLR();
CLK_CLR(); //时钟线拉低
delay_4us(1);
CLK_SET(); //产生上升沿载入数据
}
LOAD_CLR(); //数据加载引脚置低
delay_4us(1);
CS1_SET(); //片选拉高

}
/***********************************************************
函数名称:void DAC7614_Output(uchar Channel,uint Voltage)
函数功能:选择DAC输出通道和输出电压
入口参数:Channel---电压输出的通道(1——4)Voltage——输出电压除以基准电压后乘4096的值
出口参数:无
备 注:
***********************************************************/
void DAC7614_Output(uchar Channel,uint Voltage) //输入通道号,电压值
{
uint dat;
uint V;
dat=0;
switch (Channel)
{
case 1:
dat=0x00; //通道A
break;
case 2:
dat=0x04; //通道B
break;
case 3:
dat=0x08; //通道C
break;
case 4:
dat=0x0c; //通道D
break;
default:
break;
}
V=dat<<12; //先写入通道控制字
V|=Voltage;
DAC7614_Wite(V);
delay_ms(1);
}
/***************键盘扫描程序,为调试时改变输出电压大小所用********/
void keyscan()
{
if(Key_plus==0)
{
delay_ms(50);
if(Key_plus==0)
Output+=64;
LED=0;
while(!Key_plus);
LED=1;
}
}

/***********************主函数********************/
void main()
{

rest(); //软复位下载函数
DAC7614_init();
while(1)
{
keyscan();
DAC7614_Output(1,Output);
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 12:21 , Processed in 0.054941 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表