信号发生器程序设计.docx

上传人:b****6 文档编号:16076737 上传时间:2023-07-10 格式:DOCX 页数:51 大小:289.61KB
下载 相关 举报
信号发生器程序设计.docx_第1页
第1页 / 共51页
信号发生器程序设计.docx_第2页
第2页 / 共51页
信号发生器程序设计.docx_第3页
第3页 / 共51页
信号发生器程序设计.docx_第4页
第4页 / 共51页
信号发生器程序设计.docx_第5页
第5页 / 共51页
信号发生器程序设计.docx_第6页
第6页 / 共51页
信号发生器程序设计.docx_第7页
第7页 / 共51页
信号发生器程序设计.docx_第8页
第8页 / 共51页
信号发生器程序设计.docx_第9页
第9页 / 共51页
信号发生器程序设计.docx_第10页
第10页 / 共51页
信号发生器程序设计.docx_第11页
第11页 / 共51页
信号发生器程序设计.docx_第12页
第12页 / 共51页
信号发生器程序设计.docx_第13页
第13页 / 共51页
信号发生器程序设计.docx_第14页
第14页 / 共51页
信号发生器程序设计.docx_第15页
第15页 / 共51页
信号发生器程序设计.docx_第16页
第16页 / 共51页
信号发生器程序设计.docx_第17页
第17页 / 共51页
信号发生器程序设计.docx_第18页
第18页 / 共51页
信号发生器程序设计.docx_第19页
第19页 / 共51页
信号发生器程序设计.docx_第20页
第20页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

信号发生器程序设计.docx

《信号发生器程序设计.docx》由会员分享,可在线阅读,更多相关《信号发生器程序设计.docx(51页珍藏版)》请在冰点文库上搜索。

信号发生器程序设计.docx

信号发生器程序设计

微机应用系统设计与综合实验

——微机原理课程设计报告

课题名称:

信号发生器功能程序设计

学院:

姓名:

指导老师:

日期:

目录1

第一章概要2

1.1设计目的2

1.2课程设计内容及要求2

1.3所需芯片及硬件简介2

1.3.18255A特性简介2

1.3.2D/A0832功能简介3

1.3.3A/D0809功能简介3

1.3.4唐都小键盘简介4

第二章总体设计方案5

2.1设计思想论述5

2.2程序流程图6

2.3电路原理图7

第三章典型模块分析8

3.1波形产生模块8

3.1.1方波9

3.1.2三角波9

3.1.3锯齿波10

3.1.4正弦波12

3.2小键盘模块13

3.3调幅调频模块14

第四章系统调试过程及结果16

第五章收获与体会17

参考文献18

附录1汇编语言源程序代码19

附录2C语言源程序代码33

第一章

概要

1.1设计目的

信号发生器的功能设计结合了软硬件的知识,这样的一个课程设计促使我们主动去找寻资料,自主学习更多的知识。

尤其重要的是设计本身是一种实践,将课本知识应用到设计中,验证并且进一步熟悉它从而获得新的领悟,这是只啃书本所不能达成的好处。

信号发生器的设计尤其加深我们对信号发生的理解,对以8086cpu为中心的各芯片功能的了解以及对微机原理和汇编语言编程有了更深的体会。

1.2课程设计内容及要求

(1)、分别用C语言和汇编语言编程完成硬件接口功能设计;

(2)、硬件电路基于80x86微机的接口电路;

(3)、程序功能要求:

小键盘给定、数码管或屏幕显示,并产生对应信号波形(D/A)输出(信号波形包括正弦波、三角波、方波、锯齿波)、输出信号波形幅度、频率可调。

(按键数量尽量少)。

1.3所需芯片及硬件简介

1.3.18255A特性简介

(1)具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。

它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。

8255A的通用性强,使用灵活,通过它CPU可直接与外设相连

(2)8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种。

方式0:

基本的输入输出方式,即无须联络就可以直接进行的I/O方式。

其中A、B、C口的高四位或低四位可分别设置成输入或输出;方式1:

选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0;方式2:

双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。

本次设计只用到了三个端口的方式0。

1.3.2D/A0832功能简介

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

DAC0832的引脚功能说明如下:

D0-D7:

数字信号输入端

CS:

片选信号,低电平有效

WR:

写信号1,低电平有效

OUT:

DAC电流输出端

图1.1唐都实验箱D/A0832接线图

1.3.3A/D0809功能简介

ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

当地址ABC=000时,IN0通道被选通。

图1.2唐都实验箱A/D0809接线图

1.3.4唐都小键盘简介

唐都实验箱中提供了4行×4列16个按键,列选择信号X1-X4,行扫描信号Y1-Y4。

图1.3唐都实验箱小键盘接线图

第二章

总体设计方案

2.1设计思想论述

(1).波形产生:

通过汇编语言编写各个波形子程序,其中方波和三角波参考了唐都的参考程序。

锯齿波由三角波修改而来,正弦波事先用MATLAB仿真存入各点数据,产生波形时依次输出各个数据即可。

波形子程序中主要是各个波形一个周期的代码,循环执行,由此产生连续波形并通过D/A0832将数字量转换成模拟量输出,即可得各种波形。

具体方案见第三章3.1节。

(2).波形切换:

用小键盘输入进行波形的选择,按键0~3分别对应方波、三角波、锯齿波和正弦波。

每个波形周期输出后,调用键盘查询子程序,判断有无按键按下,没有则继续输出下一周期,否则转到相应的波行子程序上。

可随时进行波形间的切换。

具体方案见第三章3.2节。

(3).无极调频:

改变波形子程序中的各个数据输出延时时间,就可改变整个波形的频率,延时越短频率越高。

而延时时间长短可由外部输入决定,通过A/D0809将电位计(0~5V)的模拟量转化成数字量(00~FF)作为延时时间长短。

调节电位器即可调节延时,进而调节频率。

ADC0809芯片分辨率为8位,即可将延时分为256个等级,实现无极调频。

具体方案见第三章3.3、3.4节。

(4).无极调幅:

改变波形子程序中DA输出值的大小即可改变幅值,可以在原数据基础上乘以一个增益。

而增益可由外部输入,原理与调频相似,通过A/D0809输入一个数字量(00~FF)。

按键4用于调频/调幅的切换。

当判断当前为调幅状态时就将这个数字量存入幅值增益变量中,如果判断是调频状态则存入频率延时变量中。

从而实现只用一个电位器分别调节频率和幅度的功能。

具体方案见第三章3.3、3.4节。

(5).开始结束:

通过扫描小键盘,按下5键则退出。

2.2程序流程图

2.3电路原理图

图2.2硬件连接电路图

第三章典型模块分析

3.1波形产生模块

四个波形子程序结构类似,当子程序被调用后,进行以下步骤:

(1)通过8255的C7位输出一个低电平来启动AD0809,并从8255的B口读入AD输入的数字量(00H~FFH)。

(2)判断幅频标志位FLAG_FUPIN,为0则把AD输入的数字量存入频率值空间FRE,否则存入幅值空间AMP。

(3)输出波形的一个周期。

(4)调用子程序CCSCAN,判断小键盘有无按键按下,无则继续步骤

(1),有则返回主程序。

流程图如图3.1所示。

图3.1波形子程序流程图

3.1.1方波

方波的产生先向DA0832输出一个低电平(00H),并延时一段时间。

再输出一个高电平(此处直接用AMP的值作为高电平,AMP是外部AD输入的幅值增益),延时一段相同时间,就是矩形波的一个周期。

(1)一个周期波形的代码:

NEXT1_1:

MOVDX,DA0832;写00H,输出低电平

MOVAL,00H

OUTDX,AL

CALLDELAY1;延时

MOVDX,DA0832;写AMP,输出高电平

MOVAL,AMP;AMP=00H~FFH,默认值7FH

OUTDX,AL

CALLDELAY1;延时

(2)延时子程序代码:

DELAY1PROCNEAR;软件延时子程序

PUSHCX

PUSHAX

MOVCH,FRE;读取频率值,FRE=00H~FFH

ANDCH,0F0H

ADDCH,0FH;CH的值受FRE的控制,改变FRE则改变延时时间

MOVCL,0FFH

DD1:

MOVAX,0FF00H

DD2:

DECAX

JNZDD2

LOOPDD1

POPAX

POPCX

RET

DELAY1ENDP

3.1.2三角波

三角波从最小值开始逐渐上升,到达最大值之后再逐渐减小到最小。

因此先将最小值(00H)放到BL,输出并延时,对BL加一,再输出并延时,达到最大值后就对BL依次减一,输出并延时,直到BL=00H,则为一个周期波形。

因此三角波有两个过程。

一个周期波形的代码如下:

NEXT1_2:

MOVBL,00H;BL赋最小值00H

UP1:

MOVAL,AMP;AL幅值增益AMP,AMP=00H~FFH

ANDAL,0F0H

SHRAL,4;AL=00H~0FH

MULBL;ALBL*AL

MOVDX,DA0832;启动D/A转换

OUTDX,AL;输出AL

CALLDELAY2

INCBL;BL加一

CMPBL,25H;判断BL是否加到最大值了

JNEUP1

DOWN:

MOVAL,AMP;AL幅值增益AMP,AMP=00H~FFH

ANDAL,0F0H

SHRAL,4;AL=00H~0FH

MULBL;ALBL*AL

MOVDX,DA0832

OUTDX,AL

CALLDELAY2

DECBL;BL减一

CMPBL,00H;判断BL是否减到最小值了

JNEDOWN

延时子程序与方波类似,此处不再赘述。

局部流程图如图3.2所示。

3.1.3锯齿波

锯齿波与三角波类似,只是锯齿波到达最大值之后,直接跳到最小值。

因此锯齿波只有对BL依次加一的过程。

一个周期波形的代码如下:

NEXT1_3:

MOVBL,00H;BL赋最小值00H

UP2:

MOVAL,AMP;AL幅值增益AMP,AMP=00H~FFH

ANDAL,0F0H

SHRAL,4;AL=00H~0FH

MULBL;ALBL*AL

MOVDX,DA0832;启动D/A转换

OUTDX,AL;输出AL

CALLDELAY2

INCBL;BL加一

CMPBL,25H;判断BL是否加到最大值了

JNEUP2

MOVBL,00H;BL加到最大之后直接赋给最小值00H

MOVAL,AMP

ANDAL,0F0H

SHRAL,4

MULBL;ALBL*AL

MOVDX,DA0832

OUTDX,AL

CALLDELAY2

延时子程序与方波类似,此处不再赘述。

局部流程图如图3.3所示。

3.1.4正弦波

正弦波是利用正弦表(见附录代码段)输出的,即将正弦表中的数值一一输出并延时。

一个周期波形的代码:

NEXT1_4:

LEASI,SIN;指向正弦表中的第一个数据

MOVCX,255

UP:

MOVBL,AMP;BL幅值增益AMP,AMP=00H~FFH

ANDBL,0F0H

SHRBL,4;AMP=00H~FFH,BL=00H~0F

MOVAL,[SI];读取正弦表中的一个数据

SHRAL,2

MULBL;ALAL*BL

MOVDX,DA0832;启动D/A转换

OUTDX,AL;输出AL

CALLDELAY3

INCSI;指向表中的下一个数据

LOOPUP

延时子程序与方波类似,此处不再赘述。

局部流程图如图3.4所示。

3.2小键盘模块

小键盘用到两个子程序(ccscan和scan)。

(1)ccscan子程序只是一个辅助程序,用于判断当前小键盘是否有键按下,有则全零标志位ZF=0(运算结果不为0),无键按下则ZF=1(运算结果为0)。

子程序代码如下:

CCSCANPROCNEAR;扫描是否有按键闭合子程序

MOVAL,00H

MOVDX,MY8255_A;将4列全选通,X1~X4置0

OUTDX,AL

MOVDX,MY8255_C

INAL,DX;读Y1~Y4

NOTAL

ANDAL,0FH;取出Y1~Y4的反值

RET

CCSCANENDP

(2)scan功能为当确定小键盘有键按下则一列一列扫描键盘,判断是哪一列哪一行的键被按下了,并把键值保存到数据段的key空间去。

子程序代码如下:

SCANPROCNEAR

MOVCH,0FEH

MOVCL,00H;设置当前检测的是第几列

COLUM:

MOVAL,CH;选取一列,将X1~X4中一个置0

MOVDX,MY8255_A

OUTDX,AL

MOVDX,MY8255_C;读Y1~Y4,用于判断是哪一行按键闭合

INAL,DX

L1:

TESTAL,01H;是否为第1行

JNZL2;不是则继续判断

MOVAL,00H;设置第1行第1列的对应的键值

JMPKCODE

L2:

TESTAL,02H;是否为第2行

JNZL3;不是则继续判断

MOVAL,04H;设置第2行第1列的对应的键值

JMPKCODE

L3:

TESTAL,04H;是否为第3行

JNZL4;不是则继续判断

MOVAL,08H;设置第3行第1列的对应的键值

JMPKCODE

L4:

TESTAL,08H;是否为第4行

JNZNEXT;不是则继续判断

MOVAL,0CH;设置第4行第1列的对应的键值

JMPKCODE

NEXT:

INCCL;当前检测的列数递增

MOVAL,CH

TESTAL,08H;检测是否扫描到第4列

JZKERR;是则跳回到开始处

ROLAL,1;没检测到第4列则准备检测下一列

MOVCH,AL

JMPCOLUM

KCODE:

ADDAL,CL;将第1列的值加上当前列数,确定按键值

MOVKEY,AL;保存按键值到key空间

KERR:

RET

SCANENDP

3.3调幅调频模块

系统只使用了一个电位计可以分别调节频率和幅值。

波形子程序中每个循环周期启动一次A/D转换,启动信号由C7口输出,将读入的数据放到特定的存储单元FRE(或AMP)中,供延时(或幅值输出)时使用。

本次实验ADC0809芯片的输出八位数据线连到了8255端口B,通过端口B读入。

模拟输入量Vin通过电位计从0~5V无极可调,对应的数字输出量N从00H~FFH变化。

调频:

改变波形子程序中的各个数据输出延时时间,就可改变整个波形的频率。

延时时间由AD0809读入的数据控制。

调幅:

在波形子程序中给DA输出值乘以一个增益,改变增益的大小即可改变幅值。

增益由AD0809读入的数据控制。

调频/调幅切换:

主程序设了一个幅频标志位FLAG_FUPIN,当小键盘的4键按下时,使FLAG_FUPIN取反(默认标志位=0)。

波形子程序中通过判断幅频标志位FLAG_FUPIN的状态,可以选择是调频还是调幅。

部分代码如下:

(1)主程序中的切换部分

GETKEY3:

CALLSCAN;有键按下,调用键盘扫描子程序

MOVAL,KEY

CMPAL,08H;判断是否为调幅/调频键

JNELOOP1;不是则返回判断波形或退出

NOTBYTEPTR[FLAG_FUPIN];是,则将幅频标志位取反

CMPFLAG_FUPIN,0

JNETIAOFU

MOVDX,OFFSETMES5;屏幕显示切换到调频状态

MOVAH,09H

INT21H

JMPJIXU

TIAOFU:

MOVDX,OFFSETMES6;屏幕显示切换到调幅状态

MOVAH,09H

INT21H

JIXU:

MOVBL,FLAG_BOXING

MOVKEY,BL;将波形对应的键值存回KEY中

JMPLOOP1;返回判断波形

(2)波形子程序部分

MOVDX,MY8255_MODE;通过8255的C7口发出一个低电平

MOVAL,00001110B

OUTDX,AL;启动AD0809

MOVDX,MY8255_B;读8255B口数据

INAL,DX

MOVBL,FLAG_FUPIN;判断幅频标志位,默认为0

CMPBL,0

JEPIN_1;为0则跳转到PIN_1

MOVAMP,AL;不为0则存为振幅值

JMPNEXT1_1

PIN_1:

MOVFRE,AL;为0则存为频率值

流程图见图2.1和图3.1

第四章系统调试过程及结果

此次设计波形发生器是我们在学习汇编以来接触到的比较大的程序。

无论用何种程序书写,理清思路是关键。

因此,从拿到题目开始,我们花了很多时间来对设计波形发生器的硬件和软件进行了分析与思考,从中选出最好的解决方法。

在系统调试的过程中,我们用到的一个很重要的分析过程就是先易后难,先局部后整体,先将各个波形的子程序写出来,一一进行测试。

无误后再写主程序将各个子程序整合起来。

设计的过程是由易到难的,我们从实现最简单的波形产生功能开始,逐步添加波形切换功能、小键盘输入功能、无极调频功能、无极调幅功能,整个系统由简至繁逐步完善。

最先遇到的比较大的困难是小键盘的输入,前后试过两个方案,最终以唐都提供的参考程序为基础,进过修改得到了现在使用的键盘扫描子程序,效果很好。

整个过程中最难的是实现无级调频和无极调幅,开始时一直无法调频,经过对各个部位的仔细调试分析,是0809模数转换的问题。

0809需要一个启动信号,且转换需要一定时间。

于是我们用C口每周期输出一启动信号进行转换。

最终达到理想效果。

实现了调频之后,对整个程序的结构稍加改进,引入了幅频标志位,实现了小键盘控制调频/调幅的切换,从而只用一个电位计和一个小键盘按键实现了无极调频和无极调幅的功能。

 

不足和改进:

1.所产生的频率范围较窄。

应尽量减少延时拓宽频率。

2.幅值调节范围不够大。

3.产生的波形不是理想状态。

特别是方波,上下跳变时,总会有断点。

波形有噪声,不是理想的波形。

4.由于波形每周期之后要读端口,与下一个周期之间有一定延时误差。

第五章收获与体会

本次课程设计的要求虽然不多,但整个设计过程是问题不断,一波三折。

整个课程设计完成之后,我在整体设计思路、硬件连结和汇编语言编程等方面得到了很大的收获。

设计的过程是由易到难的,我们从实现最简单的波形产生功能开始,逐步添加波形切换功能、小键盘输入功能、无极调频功能、无极调幅功能,整个系统由简至繁逐步完善。

而程序总体流程也是三易其稿,其中有借鉴了别人的一些设计思路。

第一个方案实在缺乏设计的智慧,在得到正确的指标后就被抛弃了。

第二个方案时,我们把控制波形转换的功能寄希望于用中断实现,而调频变化在延时子程序中进行,最后证实这样子的程序流程图将很复杂冗长,条理不清晰,而且用中断实现时缺乏所需的硬件。

最后一个方案即为当前选择的方案,条理清晰,程序简单,代码也短,但是能很好实现所有功能。

硬件连结的问题主要在使用第二个方案时出现的。

第二个方案的中断控制需要手动输入一个中断脉冲,然后结果总是有差,最后讨论得出结论是我们很难保证这个手动输入脉冲的合格,这个脉冲可能不够标准。

后面做最终方案时,波形发生颤抖,检查发现是控制波形选择的开关处不稳定,也算是硬件连结的问题。

而波形特别是矩形波输出时,在中间总是一个断痕,反复检查软件设计后也归结为硬件内部延时所产生误差。

做软件设计时遇到的关键点也是难点集中到了调频电路的选择。

第二方案时,我们把调频参数的读取放置在延时程序,主程序不循环,每一个波形都是无限循环的波形。

后来得到高人指点,我们忽略了主程序循环所会带来的延时对波形的影响,以主程序无限循环,每输出一个周期波形读一次调频参数的方式进行调频。

结果很完美。

实现了调频之后,对整个程序的结构稍加改进,引入了幅频标志位,实现了小键盘控制调频/调幅的切换,从而只用一个电位计和一个小键盘按键实现了无极调频和无极调幅的功能。

参考文献

[1]周荷琴,吴秀清.微型计算机原理与接口技术.合肥:

中国科学技术大学出版社,2008.6

[2]唐都科教仪器开发有限公司.32位微机原理与接口技术实验教程.

[3]陈明义.数字电子技术基础.长沙.中南大学出版社,2008.9

附录1汇编语言源程序代码

;****************根据查看端口资源修改下列符号值*******************

IOY0EQU0E400H;片选IOY0对应的端口始地址

IOY1EQU0E440H;片选IOY1对应的端口始地址

;*****************************************************************

DA0832EQUIOY0+00H*4;DA0832的端口地址

MY8255_AEQUIOY1+00H*4;8255的A口地址

MY8255_BEQUIOY1+01H*4;8255的B口地址

MY8255_CEQUIOY1+02H*4;8255的C口地址

MY8255_MODEEQUIOY1+03H*4;8255的控制寄存器地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

STR1DB'DA0832:

PleasechooseWave',0AH,0DH,'$';定义显示的字符串

MES1DB'SHOWASQUARE',0AH,0DH,'$'

MES2DB'SHOWASANJIAO',0AH,0DH,'$'

MES3DB'SHOWAJUCHI',0AH,0DH,'$'

MES4DB'SHOWASINE',0AH,0DH,'$'

MES5DB'CHANGETHEFrequence',0AH,0DH,'$'

MES6DB'CHANGETHEAmplitude',0AH,0DH,'$'

KEYDB'?

'

FLAG_BOXINGDB'?

'

FLAG_FUPINDB0

FREDB7FH

AMPDB7FH

SINDB100,102,105,107,110,112,115,117,120,122

DB124,127,129,132,134,136,139,141,143,145

DB147,150,152,154,156,158,160,162,164,166

DB168,169,171,173,175,176,178,179,181,182

DB184,185,186,187,189,190,191,192,193,194

DB194,195,196,197,197,198,198,199,199,199

DB200,200,200,200,200,200,200,200,199,199

DB199,198,198,197,197,196,195,194,194,193

DB192,191,190,189,187,186,185,184,182,181

DB

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2