波形发生器文档格式.docx
- 文档编号:3418840
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:17
- 大小:95.46KB
波形发生器文档格式.docx
《波形发生器文档格式.docx》由会员分享,可在线阅读,更多相关《波形发生器文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
通过函数对数组中的数附值之后不是一次就输出显示出来的,这要对51单片机编写控制字,使其开中断,再用计数器计数,当计数器溢出时便提出中断请求,这时调用中断函数,将数组中一个值送到ADC0832中。
这样连续不断的送值,最后在示波器上显示的就是一个连续的波形。
最后,把编写的8279程序和产生三个主要波形的程序还有89C51的中断计数器程序结合起来,通过判断键盘的输入值来选择调用不同的函数,产生不同的波形,再用键盘输入波形的不同频率,来控制波形的频率。
本次设计最终利用了一个时钟中断程序控制键盘和输出波形频率的选择,并在相应的LED中显示出来。
并可以通过操作来实现波形的重新选择。
设计以89C51单片机为应用核心,通过单片机控制各种外围芯片及电路构成的发生器,重点是8279控制的键盘显示、示波器、D/A转换器等应用。
波形的产生是通过89C51执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的波形,波形的频率可以用程序改变,加上键盘控制和LED显示器,则可通过键盘设定所需要的波形频率及波形类型,并在LED上显示。
第3章硬件系统
本次设计的题目由硬件系统和软件系统共同完成,其中硬件部分已给出,我们在本项设计中主要承担了软件部分的设计。
但是硬件部分的组成,我们还需要进一步的了解,这样对我们软件编程部分有一定的帮助。
波形发生器的原理接线图如图2.1所示。
波形的产生是通过80C51执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。
图3.1波形发生器的原理接线图
由89C51组成单片机的最小系统。
有三种联接方式。
一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送D/A转换电路。
第二种是单级缓冲器型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。
第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。
本电路直通联接方式,即WR1、WR2、CS和XFER接地,ILE和VCC接+5V电源,89C51的数据输出线直接与DAC0832的数字输入端相连。
D/A转换电路可采用单极性输出,也可采用双极性输出。
本线路采用单极性输出,即经过一个运算放大器F032后输出电压UOUT。
3.189C51单片机简介
89C51的硬件结构:
256字节*8bit内部RAM;
2个16位定时/计数器(T0、T1),具有四种工作方式;
5个中断源和2级中断优先权;
一个全双工的串行口,具有四种工作方式;
2个时钟引脚XTAL1、XTAL2外接晶体与片内的反相放大器构成了1个震荡器,它为单片机提供了时钟控制信号;
复位电路等。
3.1.1时钟电路
本次设计采用的是内部时钟方式,即C51内部有一个用于构成震荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体震荡器和微调电容,就构成一个稳定的自激震荡器,图3.2是C51内部时钟方式的震荡器电路。
图3.2C51内部时钟方式的震荡器电路
电路中电容C1和C2典型值通常选择为30pF左右,晶振的振荡频率的范围通常是在1.2MHz~12MHz之间,晶振的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。
3.1.2复位电路
89C51的复位是由外部的复位电路来实现的,复位结构如图3.3所示。
图3.3复位结构
复位引脚RST通过一个施密特触发器与复位电路相连,施密特触发器用来控制噪声,在每个机器周期的S5P2,施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
3.1.3中断系统
当CPU正在处理某事件的时候,外部发生的某一事件请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。
中断服务处理完该事件后,再返回到原来被中止的地方继续原来的工作,这样的过程称为中断。
实现中断功能的部件称为中断系统,又称中断机构。
89C51中断系统的结构示意图如图3.4所示。
图3.489C51中断系统的结构示意图
89C51单片机有5个中断源,分别为外部中断0INT0、外部中断1INT1、定时器0溢出中断请求TF0、定时器1溢出中断请求TF1和串行中断请求RI或TI,四个用于中断控制寄存器,分别为定时/计数器及外部中断控制寄存器TCON(用六位)、串行口控制寄存器SCON(用两位)、中断允许控制寄存器IE及中断优先级控制寄存器IP。
5个中断源有两个优先级,每个中断源可以由中断优先级控制寄存器IP编程设置为高优先级或低优先级中断,同级中断源的中断先后由顺序查询逻辑电路决定。
5个中断源分别对应5个固定的中断入口地址。
中断源是中断申请的来源。
89C51通过对4个特殊功能寄存器TCON,SCON,IE和IP的设置来进行中断允许、中断申请方式的控制。
1.定时器/计数器及外部中断控制寄存器TCON
字节地址为88H,每位名称,位地址及含义分述如下:
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
位地址
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
TF1:
定时器/计数器T1的溢出中断请求标志位。
当启动T1计数后,T1从预先设置的初值开始加1计数。
当计数器最高位产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。
当CPU响应中断时,由硬件使TF1清零。
TF0:
定时器/计数器T0的溢出中断请求标志位,含义与TF1相同。
IE1:
外部中断1的中断请求标志。
当检测到外部中断引脚P3.3上存在有效的中断请求信号时,由硬件使IE1置1。
当CPU响应该中断请求时,由硬件使IE1清零。
IE0:
外部中断0的中断请求标志位。
其含义与IE1类同。
IT1:
外部中断1的中断触发方式控制位。
IT1为0时,外部中断1为电平触发方式,若外部中断1的引脚P3.3为低电平,则使IE1置1,请求中断。
IT1为1时,外部中断1为边沿触发方式,若CPU检测到外部中断1的引脚P3.3有由高到低的负跳边沿时,则使IE1置1,请求中断。
IT0:
外部中断0的中断触发方式控制位。
其含义与IT1类同。
TR1:
为1时启动定时器/计数器T1,为0时停止定时器/计数器T1。
TR0:
为1时启动定时器/计数器T0,为0时停止定时器/计数器T0。
2.串行口控制寄存器SCON
字节地址为98H,每位名称、位地址及含义如下:
SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
只用了两位:
TI:
串行口发送中断请求标志。
当CPU发送完一串行数据后,此时SBUF寄存器为空,硬件使TI置1,请求中断。
CPU响应中断后,由软件对TI清零。
RI:
串行口接收中断请求标志。
当串行口接收完一帧串行数据时,此时SBUF寄存器为满,硬件使RI置1,请求中断。
CPU响应中断后,用软件对RI清零。
3.中断允许控制寄存器IE。
字节地址为A8H,每位名称、位地址及含义如下:
IE
EA
/
ES
ET1
EX1
ET0
EX0
AFH
ACH
ABH
AAH
A9H
A8H
EA:
中断允许总控制位。
EA=0,禁止所有中断;
EA=1,开放所有中断。
但是否允许各中断源的中断请求,还要取决于各中断源的中断允许控制位的状态。
ES:
串行口的中断允许位。
ET1:
定时器/计数器T1的中断允许位。
EX1:
外部中断1INT1的中断允许位。
ET0:
定时器/计数器T0的中断允许位。
EX0:
外部中断0INT0的中断允许位。
以上5个中断允许控制位为0时,禁止中断,为1时允许中断。
3.28279对键盘显示的控制
用8279完成键盘输入和LED显示控制两种功能,键盘按键设置:
按数字键0~9,LED显示0~9,同时数字键0~2也用于表示波形的类型,分别代表正弦波、三角波和方波;
A键用于对正弦波、方波和三角波切换键;
EXEC是回车键;
/NX作为重新输入频率键;
/LS作为同时显示波形类型和频率键。
采用外部译码方式,8279的SL0~SL2经74LS138输出接键盘,同时经74LS138输出驱动后送LED。
8279的显示输出B0~B3,A0~A3作8位数据输出,当键盘出现有效闭合键时,数据自动进入8279的RAM存储器,并向CPU申请中断。
3.3单片机对DAC0832的控制产生波形
单片机控制DAC0832,产生正弦波、三角波和方波。
由于D/A转换器与89C51接口时,89C51是靠指令输出数字量供数模转换之用,而指令送出的数据在数据总线上的时间是短暂的,所以在DAC和89C51之间,需要有数据寄存器来保持89C51计算机输出的数据,供DAC转换使用。
目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。
另一类芯片内部没有数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。
DAC0832X是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换。
故不需要外加电路。
正弦波产生原理8位D/A转换器对应0~5V的电压输出,其输入数字量应为00H~FFH。
在0~5V的电压范围内产生波形,正弦波一个周期分成256个点,一个时钟中断向89C51送一个点,经过D/A转换后输出就可以得到正弦波。
三角波产生原理8位D/A转换器对应0~5V的电压输出,其输入数字量应为00H~FFH。
在0~5V的电压范围内产生波形,三角波一个周期分成100个点,一个时钟中断向89C51送一个点,经过D/A转换后输出就可以得到三角波。
方波产生原理8位D/A转换器对应0~5V的电压输出,其输入数字量应为00H~FFH。
在0~5V的电压范围内产生波形,方波一个周期分成10个点,一个时钟中断向89C51送一个点,经过D/A转换后输出就可以得到方波。
第4章软件系统
软件系统主要由8279读键盘程序,产生波形程序和89C51的中断程序构成。
4.1程序模块
4.1.1键盘显示子程序模块
用8279完成键盘输入和LED显示控制两种功能。
首先我们要对8279进行初始化,其代码如下:
charxdata*constpCmd=0x7001;
charxdata*constpDat=0x7000;
voidInit8279()
{
*pCmd=0;
*pCmd=0x32;
*pCmd=0xdf;
while(*pCmd&
0x80);
*pCmd=0x90;
}
读键盘程序:
charreadkey()
if(*pCmd&
7)
return(*pDat);
return0;
显示键盘程序:
voidDisplay()
{
inti=0;
while(i<
r)
{
switch(keyword[i])
case0xc1:
*pDat=0x0c;
break;
case0xc8:
*pDat=0x9f;
case0xc9:
*pDat=0x4a;
case0xd0:
*pDat=0x0b;
case0xd8:
*pDat=0x99;
case0xe0:
*pDat=0x29;
case0xc2:
*pDat=0x28;
case0xca:
*pDat=0x8f;
case0xd1:
*pDat=0x08;
case0xd9:
*pDat=0x09;
}
i++;
}
4.1.2中断子程序模块
单片机中断系统初始化程序:
voidInit()
SCON=0x50;
TMOD=0x21;
TH1=0xFD;
TL1=0xFD;
PCON&
=0x7F;
TR1=1;
ET0=1;
TR0=1;
ES=1;
EA=1;
}
计数器中断程序:
voidtmo()interrupt1
TH0=v/256;
TL0=v%256;
if(v!
=0)
{
switch(boxing)
{
case0xc1:
zhengxian();
break;
case0xc8:
sanjiao();
case0xc9:
fangbo();
串口程序:
charxdatabuf[128];
charidx=0;
voidserial()interrupt4
charch;
if(RI)
RI=0;
if(idx<
sizeof(buf))
ch=SBUF;
buf[idx++]=ch;
*pDat=ch;
}
4.1.3正弦波形子程序模块
每次中断显示Sin[]数组中的一个数值,共有255个。
voidzhengxian()
count++;
*pDat0832=Sin[count];
if(count>
=255)
count=0;
4.1.4三角波程序子模块
每次中断显示Temp[]数组中的一个数值,共有100个。
voidsanjiao()
count++;
*pDat0832=temp[count];
=100)
4.1.5方波子程序模块
在FB[]中存放0X0F和0X00两个值
voidfangbo()
if(count<
5)
*pDat0832=FB[0];
else
*pDat0832=FB[1];
}
=10)
4.1.6主函数Main模块
主函数开始为SIN[]数组和TEMP[]数组附值,然后调用初使化函数对8279和单片机进行初始化,jianpan函数是一个不断扫描键盘的函数,当键入值时,它便会做出相应的操作。
V的值是为了给计数器的TH0和TL0附值,这样可以加快运算速度。
voidmain()
inti;
for(i=0;
i<
256;
i++)
Sin[i]=50*sin((2*pi/256)*i)+128;
100;
if(i<
50)
temp[i]=i;
temp[i]=100-i;
v=(65536-1000000/(sum*256*1.085));
Init();
Init8279();
JianPan();
}
结论
三两周的专业综合设计结束了,本次课程设计题目是波形发生器的设计,虽然设计的时间不是很长,但在这短短的三周时间里确实使我学到了很多东西,在幺老师的细心教导下,我学会了使用单片机进行编程,也知道了一个单片机的工作过程,与此同时,还在对一些硬件的使用上,电路板的设计上有了很大的进步,对今后的学习有很大的帮助。
设计刚开始时,我们通过幺老师给的教学讲义,学习了本次使用单片机系统的基本工作原理,了解它的强大功能,用了两天的时间学习用keil软件进行编程,首先是针对键盘硬件8279的编程,在幺老师的指导下,很顺利的完成了这个步骤。
其次,我们要进行的就是编写其它部分的程序,主要是按照设计的任务书来做,根据自己设计的实验步骤,一点点去实现各部分的功能。
在这个过程中,学到了很多我已前没有用到过的新知识,真正的了解了一个单片机的基本工作原理,在了解了之后,设计程序才得心应手,在这个过程当中,遇到了很多问题,经过幺老师的耐心教导,最终把程序都给实现了。
在此次综合设计的整个过程中,学习了使用ProtelDXP软件绘制原理图和进行了单片机编程,同时还复习了单片机的一系列内容,包括:
复位电路、时钟电路、数码管与单片机的接口、汇编指令系统。
对于一些器件的工作原理也有了进一步的了解,如:
LED显示器等。
而且软件程序和硬件电路的结合,更加深刻体会了单片机系统的妙处。
在本次设计中,让我学到了很多的知识也懂得了很多的道理,不管做什么工作前期准备工作是必不可少的,也要发挥自己的想象力。
三周的短暂设计时间不能使我们了解更多的硬件知识,不能使我们得到太多的经验,但它却让我知道在学习中要刻苦,在工作中要认真。
虽然在硬件的很多知识上知道的还很少,并且编写的程序实在是有一点点的乱,但是有了这次经验,下次在编写程序的过程中一定会注意这些问题。
通过这次综合设计,锻炼了我的动手实践能力,加强了我对单片机各个功能的了解,深刻地理解了keil编译器的优越性,也提高了单片机的编程能力,为今后从事电子线路设计,从事单片机开发等硬件领域的工作打下一定的基础。
最后,对我的指导老师幺连福老师表示最衷心的感谢,同时,对我组的组员给予我的帮助表示感谢。
参考文献
[1]张毅刚,彭喜圆,谭晓昀,曲春波.MCS-51单片机应用设计.哈尔滨:
哈尔滨工业大学出版社,2001.9
[2]康华光.电子技术基础.北京:
高等教育出版社,2000.8
[3]张洪润、易涛.单片机应用技术教程.北京:
清华大学出版社,2002.10
[4]刘乐善、欧阳星明、刘学清.微型计算机接口技术及应用.武汉:
华中科技大学出版社,2004.7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 波形 发生器