IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【51单片机】DAC0832制作信号发生器(方波,三角波,锯齿波) -> 正文阅读

[嵌入式]【51单片机】DAC0832制作信号发生器(方波,三角波,锯齿波)

1 A/D与D/A

将模拟量转换为数字量称为模数转换(A/D转换),模拟量是连续的,比如电压、电流等,可以连续变化的量;数字量是离散的,对应于计算机中的位,每一个位只能是0或1,是不存在中间状态的。通过模数转换原件将模拟量转化为数字量输入计算机,以便计算机进行计算、存储等(这里说的计算机指具有cpu芯片的计算系统)。

模数转换中运用到了微分思想。如下图所示:
请添加图片描述

将连续的信号转换成一系列接近的离散的值,分割的越窄,就能表现得越精确。

数模转换(D/A转换)与模数转换的效果相反,是输入控制的数字量,经过D/A转换器输出模拟量。

2 电路与元器件

  1. 80C51芯片是intel公司开发的MCS-51系列单片机中的经典的一种。
  2. DAC0832是D/A转换芯片,是专门用于数模转换的的芯片。
  3. 电路图如图:

请添加图片描述

3 源代码

3.1 程序开始

org   0000h
      jmp   Start
;====================================================================
; CODE SEGMENT
;====================================================================
      org   0100h

3.2 监视按钮操作

watchKey:;//监控按钮的操作
      jnb p1.0,squareWave;//p1.0口,方波
      jnb p1.1,sawtoothWave;//p1.1口,锯齿波
      jnb p1.2,triangleWave;//p1.2口,三角波
      ret

根据电路图,三个按钮接地,即按钮按下会产生低电平,所以检测三个口接受到的信号,出现低电平时跳转到波形的发生函数部分。

3.3 按钮控制显示波形

Start:
      mov A,#0FFh
      mov p1,A;//给p1口送高电平,按键按下为低电平
      call watchKey
      jmp start;

先给p1端口送高电平,然后调用按钮监控函数,没有键按下则一直在Start部分循环。

3.4 方波产生的方法

方波信号是有一段时间输出稳定的高电平,一段时间输出稳定的低电平。要实现这个功能,需要保持端口的输出值稳定,并启用延时或循环。

squareWave:
      mov R0,#0FFh;//存电位初值
      mov R1,#0F0h;//存高电平循环次数
      mov R2,#40h;//存低电平循环次数。调整R1和R2可以调整占空比
positive:
      mov A,R0;//取电位值
      mov p3,A;//输出数据电位,DA输出模拟电位
      call watchKey;//监控按钮的动作(可以用开中断代替),下同
      djnz R1,positive;//剩余的循环次数不为零,继续输出高电平,剩余循环次数为零则进入低电平
      mov R0,#00h;//存低电平
negative:
      mov A,R0;
      mov p3,A;
      call watchKey;
      djnz R2,negative;//循判断循环结束,往下执行。
      jmp squareWave;//进行下一周期

这里没有用延时,而是用循环代替,二者的区别在于延时中不会监控按钮动作,循环时每一次循环都会监控按钮。当延时短时二者效果没有太大区别,所以这里用那种都可以。

3.5 锯齿波产生的方法

锯齿波是在一个周期内逐渐增大,在下一周期开始时又会跳回零点。代码实现如下:

sawtoothWave:
      mov R0,#00h;//初值
      mov R1,#80h;//上升沿循环次数
sawup:
      mov A,R0;
      mov p3,A;
      inc A;//每次增加1,在下一次循环输出,出现逐渐增大的效果。
      mov R0,A;
      call watchKey;
      cjne R0,#0FFh,sawup;//循环未结束则继续增加,结束则跳回低电平
      jmp sawtoothWave;//下一周期

3.6 三角波产生的方法

三角波的一个周期分为上升沿和下降沿,都是线性变化的,可以利用锯齿波的方法做一个上升沿和一个下降沿。

triangleWave:
      mov R0,#00h;//初值
      mov R1,#80h;//上升沿循环次数,反映为上升沿宽度
      mov R2,#80h;//下降沿循环次数,反映为下降沿宽度
up:;//上升沿
      mov A,R0;
      mov p3,A;
      inc A;
      mov R0,A;
      call watchKey;
      cjne R0,#80h,up;
down:;//下降沿
      mov A,R0;
      mov p3,A;
      dec A;
      mov R0,A;
      call watchKey;
      cjne R0,#00h,down;
      jmp triangleWave;  

3.7 程序结束

Loop:	
      jmp Loop
;====================================================================
      END

4 效果

4.1 方波

请添加图片描述

4.2 锯齿波

请添加图片描述

4.3 三角波

请添加图片描述

5 参考资料

[1] 80c51_百度百科 (baidu.com)

[2] DAC0832_百度百科 (baidu.com)

[3] 51单片机汇编指令集_宇宙379的博客-CSDN博客_51单片机指令集

[4] 【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤_cumt等等的博客-CSDN博客_矩阵键盘键码扫描程序设计实验

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:23:18  更:2022-05-24 18:23:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:57:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码