单片机课程设计
实验报告
实验题目: 频率可控的正弦波信号发生器
专 业: 计算机科学与技术
分组成员:
指导教师:
2014 年 12月 31日
《单片机原理与应用》课程设计
一.设计时间
20##年12月29日-------12月31日
二.设计地点
三.设计目的
1.巩固学习《单片机原理与运用》课程知识
2.熟练掌握Keil uVision4和ISIS 7 Professional的安装与应用
3.熟练掌握C语言的知识,巩固A/D,D/A模块的学习
4.培养查阅资料,独立思考问题的能力
四.设计小组成员
五.指导老师
六.设计课题
频率可控的正弦波信号发生器
七.实验内容
表1.实验元件清单
l CPU芯片—AT89C51
1.AT89C51概述
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
2. AT89C51引脚说明
AT89C51单片机引脚图如图3-2所示。它有40个引脚,其中包含2个专用于主电源的引脚,2个外接晶体的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。
l D/A转换器
DAC0832当今世界在以电子信是8位分辨率的D/A转换集成芯片,与微处理器完全兼容,这个系列的芯片 以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到了广泛的应用。这类D/A转换器由8位输入锁存器,8位DAC寄存器,8位DA转换电路及转换控制电路构成。
1、DAC0832的引脚及功能:
DAC0832是8分辨率的D/A转换集成芯片。与微处理器兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
图1:DAC0832管脚图
u 应用特性:
DAC0832是微处理器兼容型D/A转换器,可以充分利用微处理器的控制能力实现对D/A转换的控制。这种芯片有许多控制引脚,可以和微处理器控制线相连,接受微处理器的控制,如ILE、/CS、/WR1、/WR2、/XFER端。
有两级锁存控制功能,能够实现多通道D/A的同步转换输出。
DAC0832内部无参考电压源;须外接参考电压源。
DAC0832为电流输入型D/A转换器,要获得模拟电压输出时,需要外加转换电路。
u 各引脚功能说明:
D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:数据锁存允许控制信号输入线,高电平有效;
CS:片选信号输入线(选通数据锁存器),低电平有效;
WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;
IOUT2:电流输出端2,其值与IOUT1值之和为一常数;
Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:电源输入端,Vcc的范围为+5V~+15V;
VREF:基准电压输入线,VREF的范围为-10V~+10V;
AGND:模拟信号地;
DGND:数字信号地;
u DAC0832三种数据输入方式:
(1)双缓冲方式:即数据经过双重缓冲后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。
(2)单缓冲方式:不需要多个模拟量同时输出时,可采用此种方式。
(3)直通方式:此时两个寄存器均处于直通状态,因此要将、、和端都接数字地,ILE接高电平,使LE1、LE2均为高电平,致使两个锁存寄存器同时处于放行直通状态,数据直接送入D/A转换电路进行D/A转换。
八.实验设备,流程图,实验原理
1.实验设备
湖南城市学院实验楼401机房电脑
2.流程图
图2:实验流程图
3.实验原理
D/A转换器产生各种波形的原理:利用D/A转换器输出的模拟量与输入数字量成正比关系这一特点,将D/A转换器作为微机输出接口,CPU通过程序向D/A转换器输出随时间呈现不同变化规律的数字量,则D/A转换器就可输出各种各样的模拟量,如正弦波。
九.实验步骤及结果
1. 分析课题,按要求确定设计方案
2. 经讨论确定D/A转换器采用单缓冲方式
图3:DAC0832单缓冲方式连接图
3. 按照方案用ISIS 7 Professional画出实验图
图4:正弦波发生器电路图
4.根据实验图用写出正弦波发生程序
5.结果
图5:正弦波
十.实验设计心得体会
通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
这次课程设计,给我很多专业知识以及专业技能上的提升,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
十一.源程序
#include<reg51.h>
#define DAC0832 0x7fff //定义DAC0832端口地址
sbit cs=P3^7; //采用单缓冲方式,cs=0时启动转换
sbit k1=P1^0; //开关1控制输出100hz正弦波
sbit k2=P1^1; //开关2控制输出5hz正弦波
sbit k3=P1^2; //开关3控制输出3hz正弦波
unsigned char num=0;
bit flag=0;
//正弦表;每半个周期256个取值,最大限度保证波形不失真。
unsigned char code sin_num[]={
0,0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2,
2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
10, 10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21,
22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37,
38, 39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56,
57, 59, 60, 61, 63, 64, 66, 67, 68, 70, 71, 73, 74, 75, 77, 78,
80, 81, 83, 84, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101,102,
104, 106, 107, 109, 110, 112, 113, 115, 116, 118, 120, 121, 123, 124, 126, 128,
129, 131, 132, 134, 135, 137, 139, 140, 142, 143, 145, 146, 148, 149, 151, 153,
154, 156, 157, 159, 160, 162, 163, 165, 166, 168, 169, 171, 172, 174, 175, 177,
178, 180, 181, 182, 184, 185, 187, 188, 189, 191, 192, 194, 195, 196, 198, 199,
200, 201, 203, 204, 205, 206, 208, 209, 210, 211, 213, 214, 215, 216, 217, 218,
219, 220, 221, 223, 224, 225, 226, 227, 228, 229, 230, 230, 231, 232, 233, 234,
235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 243, 243, 244, 245, 245, 246,
246, 247, 247, 248, 248, 249, 249, 250, 250, 251, 251, 251, 252, 252, 253, 253,
253, 253, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255
};
unsigned int t;
void main()
{
if(k1==0)t=2500; //给t赋值定义正弦波的1/(4*256)周期
else if(k2==0)t=5000; //给t赋值定义正弦波的1/(4*256)周期
else if(k3==0)t=8333; //给t赋值定义正弦波的1/(4*256)周期
else t;
TMOD=0X01; //设置定时器0工作方式为1
TH0=(65536-t)/256; //定时
TL0=(65536-t)%256; //定时
EA=1; //开关中断
ET0=1; //允许T0中断
TR0=1; //启动定时器
while(1) //等待中断产生
{
//空语句
}
}
void timer0() interrupt 1
{
TH0=(65536-t)/256; //定时
TL0=(65536-t)%256; //定时
if(!flag)
{
cs=0;P2=sin_num[num++];cs=1; //cs=0启动转换产生正弦波上半周
if(num==255){num=255;flag=1;}
}
else if(flag)
{
cs=0;P2=sin_num[num--];cs=1; //cs=0启动转换产生正弦波下半周
if(num==0){num=0;flag=0;}
}
}
参考文献
[1]夏士兵,钱江.构建基于COM+的分布式Web应用[J].微型机与应用,2001.20(6):8-9.
[2][美]Richard Anderson, Chris Blexrud著.ASP3高级编程[M].刘福太,张立民,金慧琴,梁发麦等译.北京:机械工业出版社,2000:408-458.
[3]闫玉德等编。MCS-51单片机原理与应用[M].北京:机械工业出版社,2002
[4]梁合庆等编。从C到嵌入式C编程语言[M].北京:北京航空航天大学出版社,2000
[5]潘永雄. 新编单片机原理与应用(第二版)[M].西安:西安电子科技大学出版社,2007
[6]李华主编。MCS-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,2000
[7]郭天翔主编。新概念51单片机C语言教程[M].北京:电子工业出版社,2008
[8]飞思科技产品研发中心MATLAB7辅助信号处理技术与应用 北京:电子工业出版社,2005
[9]陈希林,肖明清. 一种LabWindows/CVI与MATLAB混合编程的实现方法[J].微计算机信息,2005
[10]飞思科技产品研发中心MATLAB7辅助信号处理技术与应用 北京:电子工业出版社,2005
第二篇:单片机课程设计报告(简易计算机)
专业综合课程设计
任务书
班 级:
学 号:
姓 名:
成 绩:
电子与信息工程学院
计算机科学系