基于51单片机和DAC0832的信号源(proteus电路图加程序)
更新时间:2023-07-20 13:29:01 阅读量: 实用文档 文档下载
基于51单片机和DAC0832的信号源,proteus电路图,程序。
班 级 学 号
自动测试实验报告
学 院 机电工程学院
专 业 测控技术与仪器
导师姓名 吕晓洲
学生姓名 学 号
基于51单片机和DAC0832的信号源,proteus电路图,程序。
本文介绍了以
摘要
8051和DAC0832为核心的信号源,可以通过按键
选择正弦波、方波、三角波、锯齿波和梯形波,也可以通过按键选择798.6Hz、266.2Hz、88.7Hz、29.6Hz、9.85Hz、3.3Hz、1.1Hz共九档频率。波形和频率通过软件改变,幅值通过硬件放大的放大器改变。本信号源具有结构简单、功能丰富、使用方便另外价格实惠等特点。 【关键词】单片机, 8051,DAC0832,信号源,频率,波形
一. 实验要求以及方案选择 1.实验要求:
设计一个信号源,能产生正弦波、三角波、锯齿波、方波等简单的波形,能够方便改变波形和频率。 2.方案选择:
方案一:完全由硬件电路制作,使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。
方案二:直接利用波形产生芯片,例如,利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的锯齿波、三角波、方波和正弦波四种周期性波形。但此方案成本高,程序复杂度高。
基于51单片机和DAC0832的信号源,proteus电路图,程序。
方案三:通过单片机控制DAC,输出五种波形。此方案输出的波形分辨率不够高,频率有限。但此方案电路简单、成本低,波形和频率容易选择。
二. 实验元件及原理介绍 1. 80C51单片机
80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源。采用40引脚双列直插式DIP(Dual In Line Package),内有128个RAM单元及4K的ROM。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。
基于51单片机和DAC0832的信号源,proteus电路图,程序。
图1.80C51单片机及键盘电路
图1所示是80C51单片机以及接口电路,由于Proteus对单片机的VCC和GND是默认自动连接的,所以这里就不需要再连接电源和地了。本次试验使用80C51单片机内部晶振,所以也无需外接晶振。按键S1和S2分别连接到80C51的INT0(P3.2)和INT1(P3.3),按键S1控制波形选择,每按一次变换一次波形,分别为正弦波、方波、锯齿波、梯形波和三角波。按键S2控制频率,共七档,每按一次频率下降为上一次的1/3。 2. DAC0832数模转换器
DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA
芯片以其价格低廉、接口简单、转换控制容易等优点,
基于51单片机和DAC0832的信号源,proteus电路图,程序。
在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
图2.DAC0832器件以及I/V变换电路
图2所示是DAC0832器件以及I/V变换电路。DAC0832有两级缓冲,本次试验采用直通模式,即把ILE、CS、WR1、WR2、XFER都设置为有效,使两个寄存器都处于开放状态,无需控制信号,DAC0832的输出随时跟谁输入数字的变化而变化,这样只要输入的八位数字量变化,就直接进行DA转换。
图中的运算放大器是实现I/V变化功能,由于DAC0832输出的是电流信号,且Iout1和Iout2的电流之和为一常数,在DAC寄存器各位都是1时,Iout1输出最大,一般在单极性输出时把Iout2接地,双极性输出时接运放。如果要调整放大系数,只需要在运放输出端与反馈端串联一可调电阻即可。 三.系统软件介绍
基于51单片机和DAC0832的信号源,proteus电路图,程序。
本信号源主程序主要有三部分构成:主程序模块、外部中断一模块、外部中断2模块。 1. 主程序介绍
主程序开始后首先进行初始化,然后根据波形标志a,b,c,d,e的值进入相应的while 循环,这样写的好处是指令简洁,输出的波形频率可达近800Hz。在while循环中,单片机根据地址标志位不停低查表,然后把查得的值赋给DAC0832的数据口,然后地址标志位加一,并判断地址标志位是否等于64,如果是就置0再往下执行,如果不是直接往下执行。然后根据频率标志位进行相应的延时。
其中波形是取一个周期内的64个点进行描绘,波形ROM表是将信号一个周期等间距地分离成64个点,储存在单片机得RON内。具体ROM表是通过MATLAB生成的,例如正弦表,MATLAB生成的程序如下:x=0:2*pi/64:2*pi; y=round(sin(x)*127)+128
基于51单片机和DAC0832的信号源,proteus电路图,程序。
图3 主程序流程图 2.中断服务子程序
本程序有两个中断,中断1控制波形选择,中断2控制频率。
图4.中断程序框图
四.实验结果
用Proteus软件绘制好原理图,用Keil软件生产程序的Hex文件,导入到80C51单片机中,就可以仿真了。实现结果用一下图形表示。 1. 生成的正弦波
系统开机默认的是正弦波,通过按动S1按钮可以选择波形,按动S2可以调节频率。
基于51单片机和DAC0832的信号源,proteus电路图,程序。
图5 798.6Hz频率正弦波
按S2按钮,频率降低三倍后的正弦波
图6. 266.2Hz正弦波
基于51单片机和DAC0832的信号源,proteus电路图,程序。
2.生成方波
图7 .798.6Hz方波 调节S2按钮,生成88.7Hz的方波
图7 .88.7Hz方波
基于51单片机和DAC0832的信号源,proteus电路图,程序。
3.生成锯齿波
图8 .798.6Hz锯齿波 4.生成梯形波
图9.798.6Hz梯形波
基于51单片机和DAC0832的信号源,proteus电路图,程序。
5.生成三角波
图10.798.6Hz梯形波
按动S按钮,生成266.2Hz三角波
图11.266.2Hz三角波
基于51单片机和DAC0832的信号源,proteus电路图,程序。
五.实验总结
第一次使用Proteus软件,感觉这个软件使用非常方便,上手很快,仿真的时候还可以看到引脚上的电平变化,对于故障排除与实验分析非常方便。
本次实验产生的波形能够满足一般的要求,但是频率还是比较低,最大仅有798.6Hz,而且分辨率还不够高,把时间调小后还可以看到阶梯线,这个把函数表做的大一点,可以提高分辨率,但是那样又会影响频率。
这种单片机信号源,提高信号频率的最好方法是提高单片机的主频。 六.附录
1.实验硬件总体电路图
图12.实验总电路图
基于51单片机和DAC0832的信号源,proteus电路图,程序。
2.实验程序
#include<reg51.h>
#define uchar unsigned char #define uint unsigned int sbit csda=P2^2; //p2.2口作为0832的片选端 sbit wr=P2^1; //p2.1口作为0832的写信号控制端 sbit s1=P3^2; // 按键1的接口,选择波形 sbit s2=P3^3; // 按键2的接口,选择频率 uchar k=0,p=0,delay=0; //k是数组下标 p是频率标志 delay是延时时间 uchar bxxz=0;pinlv=0; //bxxz波形标志,pinlv是频率对应的延时
uchar a=1,b=0,c=0,d=0,e=0; // a,b,c,d,e分别对应正弦波,方波,锯齿波,梯形波,三角波
uchar code sin[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128 }; //正弦波函数表 uchar code juxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; //方波函数表 uchar code juchi[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255 }; //锯齿波函数表 uchar code tixing[64]={
0,13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,208,221,234,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
247,247,247,247,247,247,247,242,229,216,203,190,177,164,151,138,125,112,99,86,73,60,47,34,21,8
}; //梯形波函数表 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 delay1() //延时时间函数,延时一毫秒
基于51单片机和DAC0832的信号源,proteus电路图,程序。
{ int a,b; for(a=1;a>0;a--) for(b=122;b>0;b--); }
void int0() interrupt 0 ///中断1,选择波形 { EX0=0; //关中断 delay1(); if(s1==0) { bxxz++; if(bxxz==5) //波形标志为5后,重新置零 bxxz=0; switch(bxxz) //每按动一次S2,改变波形 { case 0 : {a=1,b=0,c=0,d=0,e=0;} break; case 1 : {a=0,b=1,c=0,d=0,e=0;} break; case 2 : {a=0,b=0,c=1,d=0,e=0;} break; case 3 : {a=0,b=0,c=0,d=1,e=0;} break; case 4 : {a=0,b=0,c=0,d=0,e=1;} break; } delay1(); while(!s1); } while(!s1); EX0=1; }
void int1() interrupt 2 //中断1,频率选择 { EX1=0; delay1(); if(s2==0) {
基于51单片机和DAC0832的信号源,proteus电路图,程序。
p++; if(p==8) p=0; switch(p)
//频率标志是8后,重新置零
//每按动一次,频率减为三分之一
{ case 1 : pinlv=3; break; case 2 : pinlv=6; break; case 3 : pinlv=9; break; case 4 : pinlv=12; break; case 5 : pinlv=15; break; case 6 : pinlv=18; break; case 7 : pinlv=21; break; default : pinlv=0; break; } delay1(); while(!s2); } while(!s2); EX1=1; }
void main() { csda=0; wr=0; EA=1; IT0=1; EX0=1; IT1=1;
//开中断
//按键没松开,不再重新执行中断,防止抖动//片选和WR端置零,0832直通模式 //开中断
基于51单片机和DAC0832的信号源,proteus电路图,程序。
EX1=1; while(1) {
while(a) {
delay=pinlv; P0=sin[k]; k++;
if(k==64) k=0;
while(delay) delay--; }
while(b) {
delay=pinlv; P0=juxing[k]; k++; if(k==64) k=0;
while(delay) delay--; }
while(c) {
delay=pinlv; P0=juchi[k]; k--; if(k==0) k=64; while(delay) delay--; }
while(d) {
delay=pinlv;
P0=(247-tixing[k]); k++;
if(k==64) k=0;
while(delay) delay--; }
//中断0和1开中断 //根据五种波形的标志位执行相应的循环 //把数组中的数值付给p0口 //查表下标为64后重新置零 //根据频率不同延时相应的时间
基于51单片机和DAC0832的信号源,proteus电路图,程序。
while(e) {
delay=pinlv; P0=sanjiao[k]; k++; if(k==64) k=0;
while(delay) delay--; } }
}
正在阅读:
基于51单片机和DAC0832的信号源(proteus电路图加程序)07-20
新华大宗商品之新华原油代理招商07-25
小学六年级地方课程教案08-24
ABS_Dynamic_Positioning_System06-02
大学生恋爱观论文 思修作业06-04
以勇气为话题的作文600字04-01
C图书管理系统课程设计报告08-13
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 图加
- 信号源
- 单片机
- 电路
- 基于
- DAC0832
- proteus
- 程序
- 初中语文古诗词精选
- 生猪标准化规模养殖场建设项目实施方案
- 2015陕西公务员考试时政热点:2015年7月份国内时政重点汇总(一)
- 一起工业锅炉氧腐蚀案例分析及防腐措施
- 数据结构实验 查找
- 函授《组织行为学》A卷
- 氧化还原滴定法1
- Double action Strike form歌词
- 第三章 物态变化第四节-升华凝华学案
- 小学四年级语文4字词语成语填空题
- 张文志汽车定速巡航系统
- 城市河道水位远程监测系统设计 外文翻译
- 让眼神充满魅力(二)
- Android应用开发_学习笔记
- 高血压是一种以体循环动脉压增高为主要特点的临床综合征
- 4.4 理想溶液和非理想溶液
- 第十三章 国家预算和预算管理体制(财政学,魏学辉)
- 牵手世园,伴美家园
- 人工种植铁皮石斛技术和病虫害防治
- 第五单元抽屉原理习题(附答案) (1)