微机原理课程设计信号发生器的设计.docx

上传人:b****8 文档编号:11294835 上传时间:2023-02-26 格式:DOCX 页数:21 大小:134.33KB
下载 相关 举报
微机原理课程设计信号发生器的设计.docx_第1页
第1页 / 共21页
微机原理课程设计信号发生器的设计.docx_第2页
第2页 / 共21页
微机原理课程设计信号发生器的设计.docx_第3页
第3页 / 共21页
微机原理课程设计信号发生器的设计.docx_第4页
第4页 / 共21页
微机原理课程设计信号发生器的设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

微机原理课程设计信号发生器的设计.docx

《微机原理课程设计信号发生器的设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计信号发生器的设计.docx(21页珍藏版)》请在冰豆网上搜索。

微机原理课程设计信号发生器的设计.docx

微机原理课程设计信号发生器的设计

 

微机原理课程设计

信号发生器的设计

 

第一章课程设计的目的意义

1.1课程设计的目的

微机应用系统设计与综合实验是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。

根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。

课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。

通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。

1.2设计的意义

通过课程设计要进一步锻炼同学们在微型计算机应用方面的实际工作能力。

计算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧密联系实际:

掌握这方面的知识更要强调解决实际问题的能力。

同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地去分析和解决前进道路上的一切问题,最终到达胜利的彼岸。

第二章设计任务

2.1课程设计的题目

信号发生器软硬件设计:

以8088CPU为核心设计一个信号发生器,系统可产生正弦波和三角波信号。

2.2设计的要求

该设计由一个人选做并独自完成,要求画出电路原理图,说明工作原理,编写程序及程序流程图。

2.3设计的时间、地点

时间:

2006年7月3日-7月14日地点:

11112

第三章总体设计方案

3.1对信号发生器的认识

在我们日常生活中,以及一些科学研究中,锯齿波和正弦波、矩形波、三角波是常用的基本测试信号。

此外,如在示波器、电视机等仪器中,为了使电子按照一定规律运动,以利用荧光屏显示图像,常用到锯齿波产生器作为时基电路。

例如,要在示波器荧光屏上不失真地观察到被测信号波形,要求在水平偏转板加上随时间作线性变化的电压——锯齿波电压,使电子束沿水平方向匀速搜索荧光屏。

而电视机中显像管荧光屏上的光点,是靠磁场变化进行偏转的,所以需要要用锯齿波电流来控制,对于三角波,方波同样有这不可忽视的作用而函数发生器是指一般能自动产生方波正弦波三角波以及锯齿波阶梯波等电压波形的电路或仪器。

因此信号发生器是我们在学习,科学研究等方面不可缺少的工具。

此外,信号发生器在教学、试验、测控等各个领域有十分广泛的应用,其输出信号的频率范围覆盖了各个频段,从甚低频到甚高频,操作方式也从手动旋钮到程控,产生的波形从传统的正(余)弦波和脉冲波形,发展到现在能产生各种任意波形。

以前的信号发生器往往独占一个机箱,而现在的一些应用中,它只是一块插在计算机中的扩展卡,还有一些信号发生器设计成一个独立的小模块,通过RS-232C或RS-422,RS-485等串行总线和计算机连接。

今天我们要设计一种能产生正弦波和三角波的信号发生器。

3.2总体设计思路

该设计包括硬件设计和软件设计两部分。

1.硬件是基于PC机的设计,设计要求以8088CPU为核心,通常采用8284时钟产生器为CPU提供时钟信号。

由于计算机产生的是数字信号,而信号发生器产生的是模拟量,所以必须把数字量转化成模拟量,因此设计中用到的一个主要硬件便是D/A转换器。

信号发生器产生的信号又要经过示波器显示才能让我们知道产生的是什么波形,所以经D/A转换器转换后的电量要经运算放大电路放大后才能在示波器上显示连续的波形,因此运算放大电路便成为连接D/A转换器和示波器的桥梁。

D/A转换器的端口地址由片选端CS决定,因此,还需要译码器和一些逻辑门将D/A转换器的片选段和8088CPU连接起来。

2.至于PC机何时要它产生三角波,何时产生正弦波,何时退出,这就属于软件方面的设计了,通过编程产生三角波和正弦波,并控制波形的幅值和频率。

三角波要分两段来产生,但因它的上升斜坡和下降斜坡都是线性关系,所以只要由数字量的增减来控制就可以了,产生上升斜坡时让输出值从零开始逐渐递增,其上升的最大值是从键盘输入的幅值,其频率是由输出点之间的延时来控制的;相反,产生下降斜坡时,让输出值从最大幅值逐渐递减到零。

而正弦波是三角函数关系,通常可以用以下两种方法产生:

(1)查表法:

该方法的优点是速度快,但在精度高的情况下要求的存储器容量也要增大。

此种方法应用在对精度要求不高的场合。

(2)泰勒级数展开法:

在某些时候这是一种比查表法更为有效的方法。

与查表法相比,这种方法需要的存储单元很少,而且精度高。

其泰勒级数展开式如下:

sin(x)=x(1-(1/6)*x^2*(1-(1/20)*x^2*(1-(1/42)*x^2*(1-(1/72)*x^2))))

由于时间的原因,本实验中采用查表法,造一张正弦数字量表,即查函数表得到的值转换成十六进制数填表。

D/A转换取值范围为一个周期,采样点越多,精度越高,本实验中采样点为256点/周期。

正弦数字量表中的值为参考值,对于不同幅值的正弦波可以通过把表中的每个值乘以相同的倍数得到,其频率由改变输出点之间的延时来实现。

3.原理框图

信号发生器的原理框图如图3.1所示

 

时钟发生器

8088

CPU

D/A

转换器

运算放大电路

图3.1信号发生器原理框图

3.3总体设计流程图

1.总体设计流程图如图3.2所示

2.关于流程图的说明:

程序从初始化开始,首先让指针指向提示信息一,即在屏幕上显示:

PLEASEENTER1TOFORMSJB

PLEASEENTER2TOFORMZXB

PLEASEENTER3TOEXIT!

当有键按下后,如果键是1,则转向执行产生三角波的程序;如果键不是1,则看键是否为2。

如果键是2,则转向执行产生正弦波的程序;如果键也不是2,则看是否为3。

如果是3,则退出;如果也不是3,则让指针指向信息2,即显示信息提示所输入的键为无效键,并回到显示提示信息1的地方,重新执行上述过程。

产生三角波的过程:

首先调用AMPLITUDE子程序提示输入幅值,并把值转换为二进制值,然后调用CHANGE子程序判断输入的值是否为规定范围内的值,并把满足条件的值转换为十六进制的值;接下来提示输入频率的过程与输入幅值的过程类似。

图3.2总体设计流程图

指针指端口地址后,将AL的值从零开始依次增加并从端口输出,各输出点之间的延时便实现了对频率的控制,这是产生上升斜坡的过程。

如果还没到最大幅值,则循环产生上升斜坡的过程;当AL等于最大幅值时,程序往下执行产生下降斜坡。

产生下降斜坡的过程与上升斜坡类似,只是让AL从最大值依次递减并从端口输出,如果AL

不等于零,则循环产生下降斜坡,如果AL等于零,则返回到产生上升斜坡处循环,直到有键按下才结束。

产生正弦波的过程:

开始提示要求输入幅值和频率的过程和产生三角波的相同,这里就不再赘述了。

接着是查表法产生正弦波,让BX指表首址,AL清零,取采样点数256作为计数初值,通过XLAT指令将BX+AL的值送给AL,这就是查表转换的过程,由于表中给出的是固定的幅值,只要在表中各值得基础上乘以相应的倍数,便能得到需要的幅值的波形,计数小于256时,则在一个周期内循环查表,计数等于256次后,则从表首重新开始查表产生正弦波,直到有键按下才结束。

第四章硬件设计

4.1选用的芯片及其工作原理

4.1.1选用的芯片

D/A转换器是把数字量变换成模拟量的线性电路器件,一做成集成芯片。

由于实现这种转换的原理和电路结构及工艺技术有所不同,因而出现上百种D/A转换器,它们在转换速度、转换精度、分辨率以及使用价值上都具有特色。

在分辨率上,14、16、18位的D\A转换器已投入市场,20位的D\A转换器已研制成功。

在速度上,16位几百KHz,8位100MHz以上的产品都已成为商品。

在各种各样的D\A转换芯片中我们选用8位的DAC0832芯片作为接口芯片。

4.1.2选用芯片的工作原理

DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。

它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。

输出的模拟量与输入的数字量成正比,这就实现了从数字量到模拟量的转换。

一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。

输入可有256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。

DAC0832有单缓冲,双缓冲,直通三种工作方式。

在应用系统中只有一路D/A转换,即不要求多个模拟输出通道同时刷新模拟输出时,通常采用单缓冲方式。

本实验便采用了此工作方式。

DAC0832的内部包括两个8位寄存器、1个8位转换器和相应辅助电路。

8位输入寄存器为第一级锁存器,它的锁存信号为ILE。

当ILE为高电平、CS和WR1为低电平时,LE1为1,这种情况下,输入寄存器的输出随输入而变化。

此后,WR1由低变高时,ILE变为低电平,此时,数据被锁存到输入寄存器中。

8位DAC寄存器为第二级锁存器,它的锁存信号也称为通道控制信号。

WR2和XFEB同时为低电平时,LE2为高电平,这时,8位的DAC寄存器的输出随输入而变化,此后,当WR2由低变高时,LE2变为低电平,将输入寄存器的信息锁存到DAC寄存器。

正是由于DAC0832内部的这两种锁存器,故它可直接挂接在总线上,在需要进行D/A转换时,CPU通过片选信号和写控制信号将数据写至D/A变换器。

4.2电路图及说明

4.2.1电路图

设计的电路图如图4.1所示

图4.1信号发生器电路原理图

4.2.2关于电路图的说明

1.8088CPU与8284的连接:

8088CPU由外界的时钟发生器8284提供时钟信号,在时钟控制下,一步步顺序的执行指令。

8284是用石英晶体或某一TTL脉冲发生器作为振荡源,除提供频率恒定的时钟信号外,还要对外界输入的“准备就绪”信号RDY和复位信号RES进行同步。

外界的RDY输入8284,经时钟的下降沿同步后,输出READY信号作为8088的“准备就绪”信号;同样,外界的复位信号RES输入8284,经整形并由时钟的下降沿同步后,输出RESET信号作为8088的复位信号。

本设计中采用晶体振荡器作为振荡源,这时,需将晶体振荡器的两端接到8284的X1和X2上,而F/C接地。

2.8088CPU与DAC0832的连接:

(1)由于8088CPU只有8位数据总线,因此8088CPU每次访问存储器或I/O端口只能读/写一个字节,通过8位的地址/数据复用线AD7-AD0传送,A15-A8不是复用线,始终是地址线,根据前面的说明,DAC0832可直接挂接在总线上,因此应将8088CPU的AD7-AD0与DAC0832的DI7-DI0相连。

(2)外设端口地址实际上是控制选通某一个外设或接口芯片的地址,一般通过译码电路及逻辑门电路来实现。

在具体实现方案中,常见的是全译码和部分译码法,作为译码电路的输入,PC机只使用16根中的低10根地址(A9-A0),全译码方法中A9-A0均参与地址译码,相应的端口地址是唯一的。

对接口芯片,地址译码的某一输出端一般直接连到芯片的片选端,以74LS138为译码器的全译码电路,欲使Y0输出低电平,EN2B、EN2A、EN1、C、B、A引脚分别为1、0、0、0、0、0,A9-A0的组合应为1100000000。

因而DAC0832的CS端接Y0时,其端口地址被唯一确定为300H。

(3)8088CPU的PC/XT微机的控制信号AEN,经反相后作为译码电路的一个控制输入信号,这是任何I/O端口地址译码电路必须采用的,所以把AEN接到G1端。

3.DAC0832与运算放大电路的连接:

通过D/A转换芯片输出的是电流,而我们需要的是模拟电压,因此,要把D/A转换芯片输出的电流转换成电压,这就是在0832的输出端接运算放大电路的原因。

如图4.1所示,运算放大电路A1的作用是把电流输出转换为电压输出,运算放大电路A2的作用是把运算放大电路A1的单极性输出转变为双极性输出。

A2的反相输入端经电阻R1与参考电压Vref相连,Vref经电阻R1向A2提供一个电流I1,运放A1的输出Vout1经电阻R3向A2提供一个电流I2.由于Vout1与Vout2的极性相反,所以I1,I2的方向相反,而运放A2实际上是一个反向加法器,即:

Vout=-((R2/R3)*Vout1+(R2/R1)*Vref)

因为R1:

R2:

R3=2:

2:

1,则有Vout=-2Vout1-Vref。

当Vref=5V时,Vout在-5到5V范围内变化。

第五章软件设计

5.1程序的各功能模块流程图及其文字说明

1.各个子程序的流程图如下

程序中用到的子程序主要有DELAY子程序,CHANGE子程序,AMPLITUDE子程序,FREQUENCY子程序,其流程图分别如图5.1,5.2,5.3,5.4所示。

2.关于流程图的说明

(1)AMPLITUDE子程序是通过屏幕显示提示信息输入小于四位数的幅值,并把输入的字符逐个转换为二进制的代码,结果暂存入BX中。

该子程序的目的是为了排除数字以外的字符的干扰,如a,它不是数字,但其ASCII值为97,且在范围内,经过AMPLITUDE子程序转换后就可知道它不是有效字符。

(2)FREQUENCY子程序是通过屏幕显示提示信息输入频率,其它的功能和AMPLITUDE子程序相同。

(3)CHANGE子程序是把AMPLITUDE或FREQUENCY子程序转换后的二进制数进一步转换成十六进制数,当输入值不为0-9的数字时显示出错信息,并且指定输入的数值以数字9作为结束,转向执行下面的语句。

(4)DELAY子程序是用来控制输出点之间的延时的,因为波形的频率是由改变输出点之间的延时来实现的,所以DELAY子程序的延时的时间也是随输入的频率而变化的。

5.2源程序

DATASEGMENT

TABLEDB80H,83H,86H,89H,8DH,90H,93H,96H;选取256个点,定义

DB99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH;正弦表

DB0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H

DB0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H

DB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H

DB0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H

DB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH

DB0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH

DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH

DB0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H

DB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH

DB0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH

DB0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H

DB0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H

DB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H

DB96H,93H,90H,8DH,89H,86H,83H,80H

DB80H,7CH,79H,78H,72H,6FH,6CH,69H

DB66H,63H,60H,5DH,5AH,57H,55H,51H

DB4EH,4CH,48H,45H,43H,40H,3DH,3AH

DB38H,35H,33H,30H,2EH,2BH,29H,27H

DB25H,22H,20H,1EH,1CH,1AH,18H,16H

DB15H,13H,11H,10H,0EH,0DH,0BH,0AH

DB09H,08H,07H,06H,05H,04H,03H,02H

DB02H,01H,00H,00H,00H,00H,00H,00H

DB00H,00H,00H,00H,00H,00H,01H,02H

DB02H,03H,04H,05H,06H,07H,08H,09H

DB0AH,0BH,0DH,0EH,10H,11H,13H,15H

DB16H,18H,1AH,1CH,1EH,20H,22H,25H

DB27H,29H,2BH,2EH,30H,33H,35H,38H

DB3AH,3DH,40H,43H,45H,48H,4CH,4EH

DB51H,55H,57H,5AH,5DH,60H,63H,66H

DB69H,6CH,6FH,72H,76H,79H,7CH,80H

SEN1DB'PLEASEENTER1TOFORMSJB',0DH,0AH

DB'PLEASEENTER2TOFORMZXB',0DH,0AH

DB'PLEASEENTER3TOEXIT',0DH,0AH,'$'

SEN2DB'YOUDIDNOTENTERTHERIGHTKEY,ENTERAGAIN!

',0DH,0AH,'$'

ADB'INPUTAMPLITUDEVALUE:

',0DH,0AH,'$'

RESULT1DB4DUP(?

FDB'INPUTFREQUENCYVALU:

',0DH,0AH,'$'

RESULT2DB4DUP(?

WRONGDB'SORRY!

THISVALUEISOUTOFRANGE!

',0DH,0AH,'$'

DATAENDS

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

AMPLITUDEPROCNEAR;转化为机器识别码

LEADX,A;显示提示信息输入幅值

MOVAH,09H

INT21H

MOVCX,3

MOVBX,0;BX清零

KEYIN:

MOVAH,01H;输入十进制数

INT21H

SUBAL,30H;转化为二进制数

JLEXIT;若小于零,则退出

CMPAL,09H;是否大于9?

JGEXIT;是,退出

ADDBX,AX;AX与BX相加,结果存入BX

LOOPKEYIN;获得下一个十进制数

RET

EXIT:

RET;返回

AMPLITUDEENDP

CHANGEPROCNEAR

MOVCH,3;设十进制位数为计数初值

ROTATE:

MOVCL,4;设位循环制

ROLBX,CL;左右字节交换

MOVAL,BL

ANDAL,0FH;屏蔽高4位

ADDAL,30H;转变成ASCII码

CMPDL,3AH;〉9?

JGJOP;是,转JOP

CMPDL,30H;〈0?

JLJOP;是,转JOP

MOVDL,AL;将结果存入DL

DECCH

JNZROTATE;计数不为零则循环

MOVAH,08H

INT21H

CMPAL,'9'

JET

T:

RET;返回

JOP:

CALLNEWLINE

LEADX,WRONG;显示信息提示溢出

MOVAH,09H

INT21H

JMPQIT

CHANGEENDP

FREQUENCYPROCNEAR

LEADX,F;显示信息提示输入频率

MOVAH,09H

INT21H

MOVCX,3

MOVBX,0;BX清零

REPEAT:

MOVAH,01H

INT21H

SUBAL,30H

JLEXIT1

CMPAL,9

JGEXIT1

ADDBX,AX

LOOPREPEAT

EXIT1:

RET

FREQUENCYENDP

NEWLINEPROCNEAR;回车换行

PUSHAX;AX入栈

PUSHDX

MOVDL,0DH;显示回车符

MOVAH,2

INT21H

MOVDL,0AH;换行

MOVAH,2

INT21H

POPDX;DX出栈

POPAX

RET

NEWLINEENDP

DELAYPROCNEAR;延时子程序

MOVCL,[RESULT2];设输入的频率为计数初值

WAT:

LOOPWAT;不为零,循环

RET

DELAYENDP

START:

MOVAX,DATA;初始化DS

MOVDS,AX

MOVAX,STACK;初始化SS

MOVSS,AX

MOVAX,TOP;初始化SP

MOVSP,AX

BG:

LEADX,SEN1;显示基本信息

MOVAH,09H

INT21H

MOVAH,01H;等待有键按下

INT21H

CMPAL,'1';是否为1?

JESJB;是,转入产生三角波

CMPAL,'2';是否为2?

JEZXB;是,转入产生正弦波

CMPAL,'3';是否为3?

JNEWX;否,转入WX

JMPQIT;无条件转向QIT

WX:

LEADX,SEN2;显示无效信息

MOVAH,09H

INT21H

JMPBG;转向BG

SJB:

;产生三角波

CALLAMPLITUDE;调用AMPLITUDE子程序

;输入幅值

CALLCHANGE;调用CHANGE子程序转化

;为十六进制

MOV[RESULT1],DL;将幅值存入[RESULT1]单元

CALLNEWLINE;回车换行

CALLFREQUENCY;调用FREQUENCY子程序

;输入频率

CALLCHANGE

MOV[RESULT2],DL;将频率值存入[RESULT2]单元

TR0:

MOVDX,300H;DX指端口地址

MOVAL,0;AL赋初值零

TR1:

OUTDX,AL;将AL值从端口输出

INCDX;端口值增加1

OUTDX,AL;将AL的值再一次输出

DECDX

CALLDELAY;延时

ADDAL,01H;AL加1

CMPAL,[RESULT1];AL是否等于指定的幅值?

JNETR1;否,循环

TR2:

OUTDX,AL

INCDX

OUTDX,AL

DECDX

CALLDELAY

SUBAL,01H;AL减1

CMPAL,00H;AL是否等于0?

JNETR2;否,循环

LOOPTR1;循环产生三角波

PUSHAX

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1