导航:首页 > 操作系统 > 51单片机dac0832

51单片机dac0832

发布时间:2022-09-27 19:23:42

‘壹’ 51单片机和DAC0832制作可调频的信号发生器

你的问题很好解释啊!
256个点,DAC0832速率为1us左右,理论上频率可以达到1M/256=3906HZ。
但实际上受器件影响,不一定达到这么高的频率。
不过由于你用的是51单片机,12T的模式,执行指令的速率非常低,所以真正影响频率的首先不是DAC0832,而是单片机。因相对于DAC0832的速率,单片机的速率慢了很多,所以单片机的速率是跟不上DAC0832的。
像你程序中用了这么多if,各种判断,频率的运算,还要加上中断的耗时,必定会将频率降下来了。
12T模式的51,单周期时间为1M,加上这些if啊,运算啊,中断耗时啊,频率一下子就降下来了……
所以,要提高速度,取的波形点降低,没必要高这么多,256太高了。你DAC0832后级做出滤波即可。采样定理不是说了嘛,采样速率只要不小于2倍的信号频率,即可还原出原始波形。理论上波形点只要2点就够了…… 但实际应用中,取16个点,或者32个点,也是足够了…… 拿32个点来说,256/32=8,速度一下子就上升8倍……

‘贰’ 51单片机控制DAC0832产生正弦波,如何用定时器改变频率,求代码!

你确定是使用定时器改变频率??
下面的程序是使用定时器改变幅值的,你要是确定是定时器改变频率的话,把具体的要求贴出来
#include <reg51.h>
unsigned int i;
code unsigned char Sin[128]={
64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,
109,111,113,115,117,118,120,121,123,124,125,126,126,
127,127,127,127,127,127,127,126,126,125,124,123,121,
120,118,117,115,113,111,109,106,104,102,99,96,94,91,
88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39,
36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,
1,0,0,0,0,0,0,0,1,1,2,3,4,6,7,9,10,12,14,16,18,21,23,
25,28,31,33,36,39,42,45,48,51,54,57,60};
main()
{
TMOD=0X01;
EA=1;
ET0=1;
TR0=1;
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
while(1)
{
P1=Sin[i];
}
}
void timer0(void) interrupt 1
{
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
i=i+1;
if(i==128)i=0;
}

‘叁’ 51单片机与DAC0832有一句程序不理解 请大神赐教 如题

不是说地址了吗?DACR=0或者=1,都是两路DAC寄存器地址访问命令,只是输出的数据(通过数据总线送出)什么都可以。

‘肆’ 51单片机与DAC0832连接输出三角波

给你个参考

建三角波的斜线函数,设三角波的幅值=2V,采样10个点(红色斜线段),那么 K=2/10;

如此即可计算出Uo数列:0.2、0.4、0.6、。。。1.8、2.0,按顺序送到0832,下降线段就是反过来送。送数的快慢,反映在输出波形上的频率,采样点的多少,就决定了输出波形的相似度,也叫失真度;

正弦波的计算同理。

这里是交流平台,有问有答。你的问题没有唯一答案,也没有标准答案,我的回答算是一个思路,你有不同的想法可以提出来,才知道你想要什么;

你提出新要求并加分,可以,一声不吭直接加分的形式就不是个好方法

‘伍’ 利用MCS51单片机与DAC0832组成一个简易三角波发生器。

#include<reg52.h> //包含头文件
#include<intrins.h>
#define uchar unsigned char //宏定义
#define uint unsigned int
uchar pinlv=100;
uint a,b;
uchar code sanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
}; //三角波取码
void initclock() //定时器初始化函数
{
TMOD=0x01; //定时器的工作方式
TH0=a;
TL0=b; //定时器赋初值
EA=1; //打开中断总开关
ET0=1; //打开定时器允许中断开关
TR0=1; //打开定时器定时开关
}
void main() //主函数
{
m=65536-(15000/pinlv); //定时器初值
a=m/256;
b=m%256;
initclock(); //定时器初始化
while(1)
{
P1=sanjiao[u]; //三角波
}
}
void T0_time()interrupt 1 //定时器
{
TH0=a;
TL0=b;
u++; //变量加
if(u>=64) //一个周期采样64个点, 所以加到64就清零
u=0; //u清零
//根据不同的初值,定时器定时时间不同,达到不同频率的目的
}

‘陆’ 51单片机控制DAC0832产生正弦波,如何用定时器改变频率,求代码!

可以用一个定时器中断,在中断服务程序里面,直接把对应的正弦采样数据置入P1口,通过修改定时器的中断间隔,达到调整输出频率的目的;
假设你的采样数据的原始采样率为1KHz, 被采样正弦波频率为100Hz,当Timer中断间隔为1ms时,DAC那里输出处理后输出即为100Hz, 如果中断间隔为500us,输出就是200Hz

static unsigned char byIndex=0;
中断函数里面包含如下两句

P1 = Sin[byIndex++];
byIndex &= 0x7f;

‘柒’ 51单片机和DAC0832这样连接属于什么方式连接是单缓冲方式吗

1)单缓冲工作方式 :
一个寄存器工作于直通状态,
一个工作于受控锁存器状态
在不要求多相D/A同时输出时,可以采用单缓冲方式,
此时只需一次写操作,就开始转换,
可以提高D/A的数据吞吐量。
2) 双缓冲工作方式:
两个寄存器均工作于受控锁存器状态
当要求多个模拟量同时输出时,可采用双重缓冲方式。
你看你什么情况

阅读全文

与51单片机dac0832相关的资料

热点内容
永辉生活app如何使用手机闪付 浏览:177
吸奶的电影 浏览:985
对越自卫反击战电影大全集免费 浏览:565
一起看电影网站源码 浏览:909
阿甘正传阿甘的英文名 浏览:159
电影天名 浏览:626
弱视矫治系统源码 浏览:899
金融市场基础知识pdf 浏览:383
三没降头电影 浏览:586
黄色武侠小说txt下载 浏览:531
如何将服务器转移至阿里平台 浏览:744
哪个网站可以看岛国片 浏览:648
代驾app如何导航到起点 浏览:667
机器人穿越外国电影 浏览:681
赢在龙头主图指标源码 浏览:951
符号加在命令后面 浏览:271
沙漏验机宝检测安卓手机怎么样 浏览:369
非洲电影有哪些好看的 浏览:763
媒介学pdf 浏览:234
推荐一个在线观看 浏览:471