89C51单片机与DAC0832

  1. DAC0832的介绍
  2. DAC0832与51单片机使用实例
  3. 实例proteus仿真
  4. 实例代码

1.DAC0832的介绍:

  主要特性:(1) 分辨率:8位

                    (2) 电流稳定时间1us

  芯片引脚:

                    

       

 \tiny \overline{CS}: 片选

ILE:输入寄存器允许,高电平有效

\tiny \overline{WR}1:写信号,当\tiny \overline{CS},\tiny \overline{WR}1,ILE同时有效时,D0~D7 >>> 输入寄存器

\tiny \overline{XFER}: 传送控制

Rfb:反馈电阻

Vref: 基准电压

2.DAC0832与51单片机使用实例

实例分析:片选连接到P27 所以DAC0832的端口地址为 0x7FFF;(P27为0,其它P20~P26,P00~P07为1) ,通过给端口地址不同的值,控制U0输出不同的电压值,通过51单片机自带的定时器达到周期性的电压输出;

3.实例proteus仿真: 

仿真中遇到困难:(1)LM324有些型号不能进行仿真 

                             (2)示波器关闭之后不知道打开

解决方法:(1)使用SPICE Library 为“NATOA”的LM324

                  (2)

仿真运行时点击解决;

4.实例代码

#include "reg51.h"
#include <absacc.h>

void T1_50ms_Init(void);
unsigned char N50ms=0,N=0; //N50ms多少个50ms, N多少个0.5s 范围(0-4)

void main()
{
	T1_50ms_Init();
	while(1)
	{
		;//等待中断函数执行
	}
}

//定时器1 50ms定时初始化
void T1_50ms_Init(void)//晶振12MHZ
{
	TMOD = 0x10;//方式选择定时器1 16位定时器
	TH1  = 0x3C; //65536-50000 = 15536  转化为16进制 3CB0
	TL1  = 0xB0;
	EA   = 1;  //开启总中断
	ET1  = 1;//开启定时器1中断
	TR1  = 1;//开启定时器1计数
}
//定时器1 中断函数
void T1_50ms(void) interrupt 3
{
	N50ms++;
	if(N50ms==10)//0.5s
	{
		N++;
		N50ms = 0;
		if(N==1)
		{
			XBYTE[0x7fff]=0x66;//输出2V  102/256 * 5V = 2V
		}
		else 
		{
			XBYTE[0x7fff]=0x00;//输出0V   0/256 * 5V = 2V
			if(N==4)//2s到 一个周期结束 N清零
			{
				N=0;
			}
		}
	}
}

 运行结果:

代码百度网盘下载   提取码:0411

仿真百度网盘下载   提取码:0411

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值