中南大学微机原理实验报告信号发生器_第1页
中南大学微机原理实验报告信号发生器_第2页
中南大学微机原理实验报告信号发生器_第3页
中南大学微机原理实验报告信号发生器_第4页
中南大学微机原理实验报告信号发生器_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 微型计算机原理与接口技术 实验课程设计课程题目: 信号发生器 学院 : 信息科学与工程学院专业班级: 自动化1105学号 :0909112324姓名 : 樊文跃指导老师: 王击 李志明 目录一 、 课程设计概述二 、 设计思想与实施方案三 、 典型模块与编程分析四 、 系统调试五 、 课程设计收获与体会六 、 参考文件七 、 附录 一 、课程设计概述1.1 课程设计目的微型计算机原理与接口技术理论课程是一门专业基础课程,它的主要内容包括微型计算机体系结构、8086 微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等内容。要求学生对微机原理中的基本概念有较深入的了解,能够系统地掌

2、握微型计算机的结构、8086 微处理器和指令系统、汇编语言程序设计方法、微机系统的接口电路设计及编程方法等,并具有综合运用所学知识分析问题和解决问题的能力。本课程设计,旨在提高同学汇编语言的编程能力以及对外部硬件(8086,DC0832,74LS138,8255,数码管,矩阵键盘)的认识,掌握各芯片的用法,锻炼学生在微机应用方面的实际工作能力,将所学转化为所用。同学们应该充分利用实验室现有资源以及微机原理与接口技术中的相关实验资料,以试验箱或proteus仿真软件为工具,以汇编语言或C语言为开发语言,实现多个模块的结合及软硬结合,独立完成给定的任务。在完成任务的基础上,以提升能力为目标,各位同

3、学可以尝试用其他的编程语言实现给定要求,并开动自己的脑经,完善功能并尽可能多的做到以较简单的方法实现较为困难的问题,以较少的器件实现较多的功能,并琢磨模块间的配合实现。1.2 课程设计的要求(1)分别用C语言或汇编语言编程完成硬件接口功能设计; (2)硬件电路基于80x86微机的接口电路; (3)程序功能要求:小键盘给定、数码管(屏幕)显示,并产生对应信号 波形(D/A)输出(信号波形包括正弦波、三角波、方波、锯齿波)、输出信号波 形幅度、频率可调。(注意:按键数量应尽量少)。(4)实现远程控制 第二章 设计思想和实施方案2.1 功能分析2.1.1 波形产生结合微机原理实验中关于波形的显示,在

4、TDPID平台上,因为涉及数字量与模拟量之间的相互转化,所以DAC0832和ADC0809要相互配合使用。在本次课程设计中,由于在PROTEUS中仿真由数字信号转换为模拟信号来产生波形,所以结合一片DAC0832即可实现。通过汇编语言编写各个波形子程序,由于要显示波形,控制每输出一个值,都进行一定时间的延时,然后扫描没有按键按下后再输出下一个值,直到形成一个周期的代码。利用循环,就可产生连续波形代码,再通过8255输出给DAC0832,将数字量转换成模拟量输出,即可得各种波形。 2.1.2 波形的切换 由于设计要求上提出,小键盘给定,所以结合该题目我们可以通过4*4小键盘来实现波形的切换。第一

5、列从上到下编码为0,1,2,3,分别对应方波、三角波、锯齿波、正弦波。第二列第一个键的键值为4,对应退出波形,可以重新选择波形,实现波形切换。当没有输出波形的时候,也就是输出为零,选择0到3就会进入相应的波形子程序。进入波形子程序以后,每一个点输出之前都会调用扫描子程序,判断是否有键按下,有则跳转到相应的程序断去执行,无则继续。由于小键盘扫描在程序总是存在的,因此可随时进行波形间的切换。2.1.3 数码管显示数码管同步显示当前波形的幅值和频率。硬件上由8086将数据输出给8255,8255再将输出送给数码管的ADp,显示相应字符。写入8255的控制字,A,B端口输出,C端口输入,通过A和B端口

6、进行段码和位码的选择,同时软件上定义一个缓冲区存放波形的幅值和频率,显示数码管时,利用缓冲区的数值查找数码管键值表再输出对应数值。循环输出波形时也循环输出缓冲区内容对应的值,就可以同步显示波形的幅值和频率。利用小键盘扫描得到的键值进行判断,对缓冲区内的幅值频率进行相应的改变,使数码管能显示不同的幅值和频率。2.1.4 小键盘给定 使用实验箱上4×4键盘,可以实现切换波形,调频、调幅和退出波形的控制功能。在Protues输入keypad关键字,找到虚拟键盘。在扫描键盘时先在全部列通入低电平,扫描是否有行为低电平,若有,则表示有键按下,然后键盘矩阵扫描时轮流选通一行,然后从端口处读取列数

7、据,如果有按键则读取的数据肯定有一位为0,经过取反后,应有一位为1,然后再根据选取的列和读取的行值,确定按的是哪一个键,调用保存函数将键值编码保存在一个名为key的存储单元里。当有键按下时,从key内取出键值进行判断,就能转入相应的子程序进行控制,并且键盘扫描、获取键值等子程序也能够很好的嵌入在其他程序中,方便调用。既方便程序的编写,也提高了可读性。 2.1.5 有级调频改变波形子程序中的各个数据输出的延时时间,就可改变整个波形的频率。延时越短周期越长频率越高。定义三个缓冲区来存放延时,其中一个存放初始值4,一个存放当前波形的延时,还有一个作为中间暂存用。产生波形以后,取出延时初值存入中间暂存

8、缓冲区,再扫描键盘:0对应减小延时,1对应增大延时,无键则不改变延时。对暂存区的数值进行相应操作后,将最后的值存入名为tiaopin的缓冲区内作为当前波形的延时。也可利用ADC0809用定位器进行无级调节。 2.1.6 有级调幅 和有级调频类似,有极调幅也是定义三个缓冲区,功能和有极调频类似。幅值缓冲区存放的是输出点的值的放大倍数,调节放大倍数也就使幅值改变了。产生波形以后,取出倍数初值存入中间暂存缓冲区,再扫描键盘:2对应减小倍数,3对应增大倍数,无键则不改变倍数。对暂存区的数值进行相应操作后,将最后的值存入名为tiaofu的缓冲区内作为当前波形的幅值放大倍数。也可利用ADC0809用定位器

9、进行无级调节。2.1.7 结束退出当键盘扫描到的键值等于4时,无论在什么时候,它就会无条件跳出程序,返回起始状态,等待选择波形,同时数码管显示零。 2.2 所用芯片功能简介2.2.1 8086功能简介8086 CPU是由总线接口部件BIU和执行部件EU这两大部分构成。总线接口部件BIU是8086 CPU在存储器和I/O设备之间的接口部件,负责对全部引脚的操作,即8086对存储器和I/O设备的所有操作都是由BIU完成的。所有对外部总线的操作都必须有正确的地址和适当的控制信号,BIU中的各部件主要是围绕这个目标设计的。它提供了16位双向数据总线、20位地址总线和若干条控制总线。其具体任务是:负责从

10、内存单元中预取指令,并将它们送到指令队列缓冲器暂存。CPU执行指令时,总线接口单元要配合执行单元,从指定的内存单元或I/O端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存6 单元或I/O端口中。 执行单元EU中包含1个16位的运算器ALU、8个16位的寄存器、1个16位标志寄存器FR、1个运算暂存器和执行单元的控制电路。这个单元进行所有指令的解释和执行,同时管理上述有关的寄存器。EU对指令的执行是从取指令操作码开始的,它从总线接口单元的指令队列缓冲器中每次取一个字节。如果指令队列缓冲器中是空的,那么EU就要等待BIU通过外部总线从存储器中取得指令并送到EU,通过译码电路分

11、析,发出相应控制命令,控制ALU数据总线中数据的流向。 8086管脚图如下: 2.2.2 8255功能简介 8255A具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连。 8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种。方式0 :基本的输入输出方式,即无须联络就可以直接进行的 I/O方式。其中A、B、C口的高四位或低四位可分别设置成输入或输出;方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作

12、在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0;方式2: 双向I/O方式,只7 有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。8255 管脚分布如下: 2.2.3 DAC0832功能简介 DAC0832是采用CMOS工艺制成的单片电流输出型8位数 / 模转换器。它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。电路有极好的温度跟随性,使用了COMS电流开关和控制逻辑

13、而获得低功耗、低输出的泄漏电流误差。集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要. DAC0832有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。输入可有2的8次方,即256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。 D/A转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。DAC

14、0832管脚分布如下: 2.2.4 74LS273功能简介 地址锁存器就是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来。8086/8088数据和地址总线采用分时复用操作方法,即用同一总线既传输数据又传输地址。当微处理器与存储器交换信号时,首先由CPU发出存储器地址,同时发出允许锁存信号ALE给锁存器,当锁存器接到该信号后将地址/数据总线上的地址锁存在总线上,随后才能传输数据。 地址锁存器74LS273是带清除端的八D触发器,只有清除端为高电平时才具有锁存功能,锁存控制端为11脚CLK,在上升沿锁存。8086的ALE端输出的锁存控制信号必须经反相器后才能连到74LS273的CLK端

15、,以满足CLK在上升沿锁存的要求。74LS273的引脚1D8D为数据输入端,1Q8Q为数据输出端,WR:主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0。CP(CLK):触发端,上升沿触发,即当CP从低到高电平时,D0D7的数据通过芯片,为0时将数据锁存,D0D7的数据不变。由于8086有20位物理地址,所以需要用3片74LS273级联。 74LS273管脚分布如下图: 2.2.5 74LS138功能简介(1) 当一个选通端(E1)为高电平,另两个选通端((/E2)和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A2A

16、1A0=110时,则Y6输出端输出低电平信号。(2) (2)利用 E1、E2和E3可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。(3)若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。(4)可用在8086的译码电路中,扩展内存。 74LS138管脚如下: 2.3 实施方案2.3.1系统总体方案 该设计包括硬件设计和软件设计两部分。 1.硬件上要求以8086CPU为核心进行电路设计。完全用小键盘对波形进行控制。小键盘作为产生波形、波形切换、调节频率,调节幅值、退出波形的控制端口。8255A芯片完成对小键盘扫描,获取键值编码以及输出到数码管。通过D

17、AC0832将数字量转换成模拟量输出,再由转换电路将电流输出转换为电压输出产生各种波形,通过虚拟示波器显示出波形。由于8255A的A,B,C端口都已使用,所以采用键盘控制进行幅值和频率的有极调节。 2.软件方面要设计方波,三角波,锯齿波,正弦波何时产生,如何产生,何时退出,并且还要设计如何通过对按键的判断,对频率和幅值进行调节。 方波比较简单,先扫描键盘,无键按下时输出零,保持一个延时,再扫描键盘,无键按下时输出20H的倍数,该倍数就是我定义的幅值,再延时,循环该周期就可得到方波。如果有键按下就会转入相应子程序。 三角波分为两段,因它的上升斜坡和下降斜坡都是线性关系,所以只要由数字量的增减来控

18、制就可以了。产生上升斜坡时让输出值从零开始逐渐递增,其上升的最大值是30乘以放大倍数,相反,产生下降斜坡时,让输出值从最大值逐渐递减到零。为简单起见 ,这里采用的是查表法,在数据段定义了三角波函数表,规律如上。其幅值由放大倍数控制,频率是由输出点之间的延时来控制。 锯齿波截取三角波的上升斜坡部分,到达最大值后就跳回最低值0,方法与三角波相同,也采用查表法。先定义了锯齿波的函数表,输出时只要按着函数表一个一个往下输出,当显示到最大值即一个周期内的最后一个值再将指针指向表的首地址就开始了新的周期。其幅值由放大倍数控制,频率是由输出点之间的延时来控制。 正弦波也是用的查表法。该方法的优点是速度快,但

19、在精度高的情况下要求的存储器容量也要增大,所以此种方法应用在对精度要求不高的场合。本程序中制造了一张正弦数字量表,即查函数表得到的值转换成十进制数填表。一个周期10 内,采样点越多,精度越高,本实验中采样点为40点/周期。正弦数字量表中的值为参考值,对于不同幅值的正弦波可以通过把表中的每个值乘以相同的倍数得到,其频率由改变输出点之间的延时来实现。 频率和幅值的调节由每个点的延时和幅值的放大倍数决定。在各个波形输出之前,先读取频率和幅值的初值,若要增加(减小)频率,则使延时减(加)1;若要增大(减小)幅值,则使原幅值基础值得放大倍数加(减)1。然后再将改变后的幅值频率送给原波形进行输出,同时,幅

20、值和频率的值作为偏移量查找数码管显示表,然后送给对应的数码管显示。2.3.2 系统流程图 开始 读取波形选择值 减小幅值 增加幅值减小频率增加频率 正弦波 锯齿波 三角波 方波键盘按键? 初始化8255A N40123 键盘按键?N Y 读取频率幅度选择值12401 23 N 第三章 典型模块与编程分析3.1键盘扫描模块 小键盘工作原理:(1) 初始化8255的工作方式:A,B口作为输出,C口低四位作为输入。矩阵的X1X4接到输出端口PA0PA3上,用程序控制4条行线的输出。4条列线Y1Y4连接到输入端口C的PC0PC3。用读指令读取C口状态时,可读取键盘的列号。 (2) 在无键按下的时候,由

21、于接到+5V上的上拉电阻的作用,列线被置成高电平。压下某一个键所在的行线和列线接通。这时,如果向被压下的键所在的行线上输出一个低电平信号,则对应的列线也呈现低电平。当从C口读取列线信号时,便能检测到该列线上的低电平。(3) 扫描键盘时,A口输出全0,读C口,取低四位再取反,若为0则无键输入,若不为零则转获取键值子程序。获取键值时,对X1到X4轮流选中,即轮流输出0。先把第一行赋0,读C口检测是不是第一行,不是再继续第二行,没有的话总共循环4次跳出循环,这样根据选中的行和读入的列状态中低电平的位置,便能确定哪个键被按下了。检测到按键后,对压下的键进行编码,将该键的行列信号转化成16进制码,将键值

22、存入缓冲区,以便以后利用进行判断比较。接着继续扫描按键,等待按键释放。CCSCAN扫描是否有按键按下: CCSCAN PROC NEAR 扫描是否有按键闭合子序 MOV AL,00H MOV DX,MY8255_A ;将4列全选通,X1X40 OUT DX,AL MOV DX,MY8255_C IN AL,DX ;读Y1Y4 NOT AL AND AL,0FH ;取出Y1Y4的反值 RET CCSCAN ENDP 如果有按键,就获取按键码的功能,4×4键盘的编码, 从上到下,从左到右,依次编码为0F, 如果有按键, 则转入到按键处理子程序模块执行, 如果没有,则返回主程序循环。 具体

23、的实现代码如下:GETKEY1 PROC NEAR ;获取键值子程序 CALL DIS ;显示刷新 CALL DALLY ;延时 CALL DALLY ;延时 CALL CLEAR ;清屏 13 CALL CCSCAN ;再次扫描按键 JNZ GETKEY2 ;有键按下则跳置GETKEY2 JMP BEGIN1 ;否则跳回开始继续循环 GETKEY2: MOV CH,0FEH MOV CL,00H;设置当前检测的是第几列 COLUM: MOV AL,CH ;选取一列,将X1X4中一个置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;读Y1Y4,用于判断

24、哪一行按键闭合 IN AL,DX L1: TEST AL,01H ;是否为第1行 JNZ L2 ;不是则继续判断 MOV AL,00H ;设置第1行第1列的对应的键值 JMP KCODE L2: TEST AL,02H ;是否为第2行 JNZ L3 ;不是则继续判断 MOV AL,04H ;设置第2行第1列的对应的键值 JMP KCODE L3: TEST AL,04H ;是否为第3行 JNZ L4 ;不是则继续判断 MOV AL,08H ;设置第3行第1列的对应的键值 JMP KCODE L4: TEST AL,08H ;是否为第4行 JNZ NEXT ;不是则继续判断 MOV AL,0CH

25、 ;设置第4行第1列的对应的键值 KCODE: ADD AL,CL ;将第1列的值加上当前列数,确定按键值 CALL PUTBUF ;保存按键值 PUSH AX KON: CALL DIS ;显示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;扫描按键,判断按键是否弹起 JNZ KON ;未弹起则继续循环等待弹起 POP AX 14 NEXT: INC CL ;当前检测的列数递增 MOV AL,CH TEST AL,08H ;检测是否扫描到第4列 JZ KERR ;是则跳回到开始处 ROL AL,1 ;没检测到第4列则准备检测下一列 MOV CH,AL JMP COLUM KER

26、R: RET GETKEY1 ENDP PUTBUF PROC NEAR ;保存键值子程序 MOV DI,OFFSET KEY MOV DI,AL CMP DI,2FFFH JNZ GOBACK MOV DI,3004H GOBACK: RET PUTBUF ENDP 3.2 数码管显示模块 4个数码管的X端为选通端,将小键盘的X1X4对应接到数码管,这样扫描小键盘的时候,也就选中了数码管,当调用getkey1获取键值子程序的时候,数码管轮流选中,也就可以控制哪个数码管显示什么内容。通过对8255写入数据,由B口输出给数码管的ADp,当没有波形输入时,数码管显示0数码管;定义两个缓冲区存放幅值

27、和频率,有波形输出时,同步显示该波形的幅值和频率。 先在数据段定义一个缓冲区存放数码管显示0F的段位值表: DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H 因为要一直显示数码管,所以将显示部分作为子程序,方便经常调用。显示程序代码如下: DIS PROC NEAR ;显示键值子程序 PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显示 MOV SI,3000H ;缓冲区3000H内存放了当前波形的 幅值,3001H存放了频率。 MOV DL,0F7H MOV AL,DL AGAI

28、N: PUSH DX MOV DX,MY8255_A OUT DX,AL ;设置X1X4,选通一个数码管 MOV AL,SI ;取出缓冲区中存放键值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,BX;将键值作为偏移和键值基地址相加到相应的键值 MOV DX,MY8255_B OUT DX,AL ;写入数码管ADp CALL DALLY INC SI ;取下一个键值 POP DX MOV AL,DL TEST AL,01H ;判断是否显示完? JZ OUT1 ;显示完,返回 ROR AL,1 MOV DL,AL JMP AGAIN ;未显

29、示完,跳回继续 OUT1: POP AX RET DIS ENDP 3.3 有级调频调幅判断及控制模块 改变波形产生子程序中的各个数据输出时间,及延时,就可改变整个波形的频率。改变波形产生子程序中的每次输出数值的放大倍数,就可以改变整个波形的幅值。而实现有级变化的初值是在数据段预先定义的数据表。 在选择波形以后,才能调节频率和幅值,频率和幅值的调节由小键盘控制。在3000H和3001H的缓冲区内存放了幅值和频率的初值3,在每个波形输出之前先扫描键盘,键值存在KEY里,对KEY值进行判断后,取出缓冲区的初值做相应16 改变:0选择增大频率,1选择减小频率,2选择减小幅值,3选择增大幅值,4退出波

30、形,返回开始状态。 调频调幅程序代码如下: AMPLFENC PROC NEAR ;调节幅值频率子程序 CALL DIS ;刷新 CALL CCSCAN ;再次扫描按键 JNZ TRI1 ;有键按下则跳置tri1 JMP TRI5 ;没按键按下就跳出该子程序 TRI1: CALL DIS ;刷新 CALL GETKEY1 MOV SI,OFFSET KEY MOV AL,SI CMP AL,4 ;第五个键就退出 JZ TRI10 JZ TRI5 CMP AL,0 ;第一个键减少周期 JNZ TRI2 MOV DI,3001H ;取延时初值 MOV BL,DI CMP BL,01H JE TRI

31、5 DEC BL MOV DI,BL JMP TRI5 TRI2: CMP AL,1 ;第二个键增加周期 JNZ TRI3 MOV DI,3001H ;取延时初值 MOV BL,DI CMP BL,05H JE TRI5 INC BL MOV DI,BL JMP TRI5 TRI3: CMP AL,2 ;第三个键减少幅度 17 JNZ TRI4 MOV DI,3000H MOV BL,DI ;取幅值初值 CMP BL,01H JE TRI5 DEC BL MOV DI,BL JMP TRI5 TRI4: CMP AL,3 ;第四个键增加幅度 JNZ TRI5 MOV DI,3000H MOV

32、BL,DI ;取幅值初值 CMP BL,05H JE TRI5 INC BL MOV DI,BL JMP TRI5 TRI10: JMP FAR PTR BEGIN0 TRI5: RET AMPLFENC ENDP 3.4波形切换及基本控制模块 这个模块是本次设计的主程序,它控制了波形的输出和切换。它是根据对小键盘的操作来实现的,不同按键对应的编码转入不同模(0:方波,1:三角波,2:锯齿波,3:正弦波,4:退出波形)。先扫描键盘是否有键按下,若无循环等待,若有则将键值保存再比较,然后实现相应操作。为使程序可循环使用,不至于显示一次波形就退出,在执行完子程序返回时,不退出系统,而是返回到开始等

33、待输入状态,这样就能切换波形。 具体的实现代码如下: 波形切换程序代码如下: BEGIN0: MOV SI,3000H ; 把数码管清0 MOV AL,00H ; 先初始化键值为0 MOV SI,AL 18 MOV AL,00H MOV SI+1,AL MOV AL,00H MOV SI+2,AL MOV AL,00H MOV SI+3,AL MOV SI,OFFSET KEY MOV AL,00H MOV SI,AL BEGIN1: CALL DIS ;显示刷新 CALL CCSCAN ;再次扫描按键 JNZ LBEGIN0 ;有键按下则跳置LBEGIN0 JMP BEGIN1 ;不是按下第

34、一或二键就继续等待输LBEGIN0: CALL GETKEY1 ;第二个菜单等待输入 CALL DIS MOV SI,OFFSET KEY MOV AL,SI CMP AL,4 ;第5个键退出 JZ BEGIN0 CMP AL,0 ;第1个键到squ(方波)函数 JZ LBEGIN1 CMP AL,1 ;第2个键到tri(三角波)函数 JZ LBEGIN2 CMP AL,2 ;第3个键到rec(锯齿)函数 JZ LBEGIN3 CMP AL,3 ;第4个键到sin(正弦)函数 JZ LBEGIN4 JMP BEGIN1 ; 其他键则跳到继续等待输入 LBEGIN1: CALL SQUREW ;

35、SQUARE JMP BEGIN0 LBEGIN2: CALL TRIW ;TRIANGLE JMP BEGIN0 LBEGIN3: CALL RCTW ; RECANGLE JMP BEGIN0 LBEGIN4: CALL SINW ;SIN JMP BEGIN0 ;执行完输出波形之后 回到开始状态 JMP BEGIN0 3.5波形产生模块3.51 方波产生 方波的产生只要使DAC0832输出一个较大值(此处用20H),并延时一段时间,再输出一个较小值(此处用00F),延时一段相同时间,就是方波的一个周期。但因为实现过程中结合了数码管的显示以及频率幅值的调节所以并不那么简单。先将幅值和频率的

36、初值放入暂存缓冲区,使数码管显示,扫描键盘,无键按下则继续,有键按下则先判断是否为0到3,是则调节频率幅值,是4则退出波形。执行相应操作后刷新数码管,将新的幅值和频率存在TIAOFU和TIAOPIN的缓冲区内,把低电平的值乘以TIAOFU输出,延迟时间乘以TIAOPIN,使该值持续一段时间,输出高电平的过程与低电平相同,循环该周期就得到连续方波。 具体的实现代码如下: SQUREW PROC NEAR ;方波发生子程序 MOV DI,OFFSET FENC ;初始化显示管的值为3 MOV AL,DI MOV SI,3000H MOV SI,AL MOV DI,OFFSET AMPL MOV A

37、L,DI MOV SI,3001H MOV SI,AL SQUR1: CALL AMPLFENC;调节幅值频率子程序 MOV SI,OFFSET KEY ;按下第五个键就退出 MOV AL,4 CMP SI,AL JZ SQUA CALL DIS ;刷新数码管 20 MOV SI,3000H MOV BL,SI MOV DI,OFFSET TIAOFU MOV DI,BL MOV SI,3001H MOV AL,SI MOV SI,OFFSET TIAOPIN MOV SI,AL TRILOOP1: MOV DX,DA0832 ;输出低电平 输出方波形 MOV AL,00H OUT DX,AL

38、 CALL DIS ;刷新 PUSH CX PUSH AX MOV CL,TIAOPIN MOV CH,00H D11: MOV AX,00FFH D21: DEC AX PUSH AX PUSH CX CALL DIS CALL CCSCAN ;再次扫描按键 JNZ SQUR1 ;有键按下则跳置squr1, POP CX POP AX JNZ D21 LOOP D11 POP AX POP CX CALL CCSCAN ;再次扫描按键 JNZ SQUR1 ;有键按下则跳置squr1,改变幅值频率 MOV BL,TIAOFU MOV AL,20H MUL BL 21 MOV DX,DA0832

39、 ;输出高电平 OUT DX,AL CALL DIS ;刷新 PUSH CX PUSH AX MOV CL,TIAOPIN MOV CH,00H D12: MOV AX,00FFH D22: DEC AX PUSH AX PUSH CX CALL DIS CALL CCSCAN ;再次扫描按键 JNZ SQUR1 ;有键按下则跳置tri1 POP CX POP AX JNZ D22 LOOP D12 POP AX POP CX JZ TRILOOP1 ;没按键时继续输出波形 SQUA: RET SQUREW ENDP 3.5.2 三角波 三角波理论上有两段,上升和下降,上升时从最低值开始自增,直到最大值,然后再自减至最低。本设计中,因为对波形精度要求不是很高,所以采用按列表输出的方式,即先在数据段定义了一段三角波一个周期内的采样值的数字量表,采样频率为60点/周期。数字量表中的值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论