信号发生器功能程序设计微机原理课程设计报告.doc

上传人:仙人指路1688 文档编号:4142899 上传时间:2023-04-07 格式:DOC 页数:42 大小:303.50KB
返回 下载 相关 举报
信号发生器功能程序设计微机原理课程设计报告.doc_第1页
第1页 / 共42页
信号发生器功能程序设计微机原理课程设计报告.doc_第2页
第2页 / 共42页
信号发生器功能程序设计微机原理课程设计报告.doc_第3页
第3页 / 共42页
信号发生器功能程序设计微机原理课程设计报告.doc_第4页
第4页 / 共42页
信号发生器功能程序设计微机原理课程设计报告.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《信号发生器功能程序设计微机原理课程设计报告.doc》由会员分享,可在线阅读,更多相关《信号发生器功能程序设计微机原理课程设计报告.doc(42页珍藏版)》请在三一办公上搜索。

1、微机应用系统设计与综合实验 微机原理课程设计报告课题名称: 信号发生器功能程序设计学 院: 姓 名: 指导老师: 日 期: 目录目录1第一章概要21.1 设计目的21.2 课程设计内容及要求21.3 所需芯片及硬件简介21.3.1 8255A 特性简介21.3.2 D /A0832功能简介31.3.3A /D0809功能简介31.3.4唐都小键盘简介4第二章总体设计方案52.1 设计思想论述52.2 程序流程图62.3 电路原理图7第三章典型模块分析83.1 波形产生模块83.1.1 方波93.1.2 三角波93.1.3 锯齿波103.1.4 正弦波123.2 小键盘模块133.3 调幅调频模

2、块14第四章系统调试过程及结果16第五章收获与体会17参考文献18附录1 汇编语言源程序代码19附录2 C语言源程序代码33第一章 概要1.1 设计目的 信号发生器的功能设计结合了软硬件的知识,这样的一个课程设计促使我们主动去找寻资料,自主学习更多的知识。尤其重要的是设计本身是一种实践,将课本知识应用到设计中,验证并且进一步熟悉它从而获得新的领悟,这是只啃书本所不能达成的好处。信号发生器的设计尤其加深我们对信号发生的理解,对以8086cpu为中心的各芯片功能的了解以及对微机原理和汇编语言编程有了更深的体会。1.2 课程设计内容及要求(1)、分别用C语言和汇编语言编程完成硬件接口功能设计;(2)

3、、硬件电路基于80x86微机的接口电路;(3)、程序功能要求:小键盘给定、数码管或屏幕显示,并产生对应信号波形(D/A)输出(信号波形包括正弦波、三角波、方波、锯齿波)、输出信号波形幅度、频率可调。(按键数量尽量少)。1.3 所需芯片及硬件简介1.3.1 8255A 特性简介(1)具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连(2)8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种。方式0 :基本的输入输出方式,即无须联络就

4、可以直接进行的 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.2 D /A0832功能简介DAC0832是采用CMOS工艺制成的单

5、片电流输出型8位数 / 模转换器。DAC0832的引脚功能说明如下:D0D7 :数字信号输入端CS:片选信号,低电平有效WR:写信号1,低电平有效OUT:DAC电流输出端图1.1 唐都实验箱D /A0832接线图1.3.3 A /D0809功能简介ADC0809是采样频率为8位的、以逐次逼近原理进行模数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。当地址ABC=000时,IN0通道被选通。图1.2 唐都实验箱A /D0809接线图1.3.4 唐都小键盘简介唐都实验箱中提供了4行4列16个按键,列选择信号X1-X4,行扫描

6、信号Y1-Y4。图1.3 唐都实验箱小键盘接线图第二章 总体设计方案2.1 设计思想论述(1)波形产生:通过汇编语言编写各个波形子程序,其中方波和三角波参考了唐都的参考程序。锯齿波由三角波修改而来,正弦波事先用MATLAB仿真存入各点数据,产生波形时依次输出各个数据即可。波形子程序中主要是各个波形一个周期的代码,循环执行,由此产生连续波形并通过D /A0832将数字量转换成模拟量输出,即可得各种波形。具体方案见第三章3.1节。(2)波形切换:用小键盘输入进行波形的选择,按键03分别对应方波、三角波、锯齿波和正弦波。每个波形周期输出后,调用键盘查询子程序,判断有无按键按下,没有则继续输出下一周期

7、,否则转到相应的波行子程序上。可随时进行波形间的切换。具体方案见第三章3.2节。(3)无极调频:改变波形子程序中的各个数据输出延时时间,就可改变整个波形的频率,延时越短频率越高。而延时时间长短可由外部输入决定,通过A/D0809将电位计(05V)的模拟量转化成数字量(00FF)作为延时时间长短。调节电位器即可调节延时,进而调节频率。ADC0809芯片分辨率为8位,即可将延时分为256个等级,实现无极调频。具体方案见第三章3.3、3.4节。(4)无极调幅:改变波形子程序中DA输出值的大小即可改变幅值,可以在原数据基础上乘以一个增益。而增益可由外部输入,原理与调频相似,通过A/D0809输入一个数

8、字量(00FF)。按键4用于调频/调幅的切换。当判断当前为调幅状态时就将这个数字量存入幅值增益变量中,如果判断是调频状态则存入频率延时变量中。从而实现只用一个电位器分别调节频率和幅度的功能。具体方案见第三章3.3、3.4节。(5)开始结束:通过扫描小键盘,按下5键则退出。2.2 程序流程图开始NYNY结束初始化8255调用ccscan子程序并判断,无键按下则循环等待,有键按下则消抖键盘扫描子程序,键值keyKey=5?Key=0?Key=1?Key=2?Key=3?YYYYNNN方波子程序,出口参数:波形标志位=0三角波子程序,出口参数:波形标志位=1锯齿波子程序,出口参数:波形标志位=2正弦

9、波子程序,出口参数:波形标志位=3Key=4?键盘扫描子程序,键值keyNFLAG_FUPIN取反Key=波形标志位显示调频/调幅状态显示波形信息显示波形信息显示波形信息显示波形信息图2.1 主程序流程图2.3 电路原理图图2.2 硬件连接电路图第三章 典型模块分析3.1 波形产生模块四个波形子程序结构类似,当子程序被调用后,进行以下步骤:(1)通过8255的C7位输出一个低电平来启动AD0809,并从8255的B口读入AD输入的数字量(00HFFH)。(2)判断幅频标志位FLAG_FUPIN,为0则把AD输入的数字量存入频率值空间FRE,否则存入幅值空间AMP。(3)输出波形的一个周期。(4

10、)调用子程序CCSCAN,判断小键盘有无按键按下,无则继续步骤(1),有则返回主程序。流程图如图3.1所示。子程序调用启动AD0809,读入数据到ALFlag_fupin=0?保存到频率,FreAL保存到幅值,AmpAL输出一个周期波形小键盘有键按下?YNYN延时消抖小键盘有键按下?NY子程序返回图3.1 波形子程序流程图3.1.1 方波 方波的产生先向DA0832输出一个低电平(00H),并延时一段时间。再输出一个高电平(此处直接用AMP的值作为高电平,AMP是外部AD输入的幅值增益),延时一段相同时间,就是矩形波的一个周期。 (1)一个周期波形的代码: NEXT1_1: MOV DX,DA

11、0832 ;写00H,输出低电平 MOV AL,00H OUT DX,AL CALL DELAY1;延时 MOV DX,DA0832 ;写 AMP,输出高电平 MOV AL,AMP ;AMP=00HFFH,默认值 7FH OUT DX,AL CALL DELAY1;延时(2)延时子程序代码: DELAY1 PROC NEAR ;软件延时子程序 PUSH CX PUSH AX MOV CH,FRE ;读取频率值,FRE=00HFFH AND CH,0F0H ADD CH,0FH ;CH的值受FRE的控制,改变FRE则改变延时时间 MOV CL,0FFH DD1: MOV AX,0FF00H DD

12、2: DEC AX JNZ DD2 LOOP DD1 POP AX POP CX RET DELAY1 ENDP3.1.2 三角波三角波从最小值开始逐渐上升,到达最大值之后再逐渐减小到最小。因此先将最小值(00H)放到BL,输出并延时,对BL加一,再输出并延时,达到最大值后就对BL依次减一,输出并延时,直到BL=00H,则为一个周期波形。因此三角波有两个过程。一个周期波形的代码如下: NEXT1_2: MOV BL,00H ;BL赋最小值00H UP1: MOV AL,AMP ;AL幅值增益AMP, AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FHMUL

13、BL ; ALBL*AL MOV DX,DA0832 ;启动D/A转换 OUT DX,AL ;输出AL CALL DELAY2 INC BL ;BL加一 CMP BL,25H ;判断BL是否加到最大值了 JNE UP1 DOWN: MOV AL,AMP ;AL幅值增益AMP ,AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FHMUL BL; ALBL*ALMOV DX,DA0832 OUT DX,AL CALL DELAY2 DEC BL ;BL减一 CMP BL,00H;判断BL是否减到最小值了 JNE DOWN延时子程序与方波类似,此处不再赘述。局部流程

14、图如图3.2所示。3.1.3 锯齿波 锯齿波与三角波类似,只是锯齿波到达最大值之后,直接跳到最小值。因此锯齿波只有对BL依次加一的过程。一个周期波形的代码如下:NEXT1_3: MOV BL,00H ;BL赋最小值00H UP2: MOV AL,AMP ;AL幅值增益AMP, AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FH MUL BL; ALBL*AL MOV DX,DA0832 ;启动D/A转换 OUT DX,AL;输出AL CALL DELAY2 INC BL;BL加一 CMP BL,25H;判断BL是否加到最大值了 JNE UP2 MOV BL,

15、00H;BL加到最大之后直接赋给最小值00H MOV AL,AMP AND AL,0F0H SHR AL,4 MUL BL; ALBL*AL MOV DX,DA0832 OUT DX,AL CALL DELAY2延时子程序与方波类似,此处不再赘述。局部流程图如图3.3所示。BL已到最大?延时BL*增益AL,输出ALBL=00HBL加一NYBL已到最小?延时BL*增益AL,输出ALBL减一NY图3.2 三角波一周期流程图BL=00H延时BL*增益AL,输出ALBL*增益AL,输出ALBL=00H延时BL加一BL已到最大?NY图3.3 锯齿波一周期流程图3.1.4 正弦波正弦波是利用正弦表(见附录

16、 代码段)输出的,即将正弦表中的数值一一输出并延时。一个周期波形的代码: NEXT1_4: LEA SI,SIN ;指向正弦表中的第一个数据 MOV CX,255 UP: MOV BL,AMP ;BL幅值增益AMP, AMP=00HFFH AND BL,0F0H SHR BL,4 ;AMP=00HFFH ,BL=00H0F MOV AL,SI ;读取正弦表中的一个数据 SHR AL,2 MUL BL ; AL AL* BL MOV DX,DA0832 ;启动D/A转换 OUT DX,AL ;输出AL CALL DELAY3 INC SI ;指向表中的下一个数据 LOOP UP延时子程序与方波类

17、似,此处不再赘述。局部流程图如图3.4所示。延时读表中的一个数据到AL取正弦表首地址AL*增益AL,输出AL表地址加一已到表末?NY图3.4 正弦波一周期流程图3.2 小键盘模块小键盘用到两个子程序(ccscan和scan)。(1) ccscan子程序只是一个辅助程序,用于判断当前小键盘是否有键按下,有则全零标志位ZF=0(运算结果不为0),无键按下则ZF=1(运算结果为0)。子程序代码如下: CCSCAN PROC NEAR ;扫描是否有按键闭合子程序 MOV AL,00H MOV DX,MY8255_A ;将4列全选通,X1X4置0 OUT DX,AL MOV DX,MY8255_C IN

18、 AL,DX ;读Y1Y4 NOT AL AND AL,0FH ;取出Y1Y4的反值 RET CCSCAN ENDP(2) scan功能为当确定小键盘有键按下则一列一列扫描键盘,判断是哪一列哪一行的键被按下了,并把键值保存到数据段的key空间去。子程序代码如下: SCAN PROC NEAR MOV CH,0FEH MOV CL,00H ;设置当前检测的是第几列 COLUM: MOV AL,CH ;选取一列,将X1X4中一个置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;读Y1Y4,用于判断是哪一行按键闭合 IN AL,DX L1: TEST AL,

19、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 ;设置第4行第1列的对应的键值 JMP KCODE NE

20、XT: INC CL ;当前检测的列数递增 MOV AL,CH TEST AL,08H ;检测是否扫描到第4列 JZ KERR ;是则跳回到开始处 ROL AL,1 ;没检测到第4列则准备检测下一列 MOV CH,AL JMP COLUM KCODE: ADD AL,CL ;将第1列的值加上当前列数,确定按键值 MOV KEY,AL ;保存按键值到key空间 KERR: RET SCAN ENDP3.3 调幅调频模块系统只使用了一个电位计可以分别调节频率和幅值。波形子程序中每个循环周期启动一次A/D转换,启动信号由C7口输出,将读入的数据放到特定的存储单元FRE(或AMP)中,供延时(或幅值输

21、出)时使用。本次实验ADC 0809芯片的输出八位数据线连到了8255端口B,通过端口B读入。模拟输入量Vin通过电位计从05V无极可调,对应的数字输出量N从00HFFH变化。调频:改变波形子程序中的各个数据输出延时时间,就可改变整个波形的频率。延时时间由AD0809读入的数据控制。调幅:在波形子程序中给DA输出值乘以一个增益,改变增益的大小即可改变幅值。增益由AD0809读入的数据控制。调频/调幅切换:主程序设了一个幅频标志位FLAG_FUPIN,当小键盘的4键按下时,使FLAG_FUPIN取反(默认标志位=0)。波形子程序中通过判断幅频标志位FLAG_FUPIN的状态,可以选择是调频还是调

22、幅。部分代码如下:(1)主程序中的切换部分 GETKEY3: CALL SCAN ;有键按下,调用键盘扫描子程序 MOV AL,KEY CMP AL,08H ;判断是否为调幅 /调频键 JNE LOOP1 ;不是则返回判断波形或退出 NOT BYTE PTRFLAG_FUPIN ;是,则将幅频标志位取反 CMP FLAG_FUPIN,0 JNE TIAOFU MOV DX,OFFSET MES5 ;屏幕显示切换到调频状态 MOV AH,09H INT 21H JMP JIXU TIAOFU: MOV DX,OFFSET MES6 ; 屏幕显示切换到调幅状态 MOV AH,09H INT 21H

23、 JIXU: MOV BL,FLAG_BOXING MOV KEY,BL ;将波形对应的键值存回 KEY中 JMP LOOP1 ;返回判断波形(2)波形子程序部分 MOV DX,MY8255_MODE ; 通过8255的C7口发出一个低电平 MOV AL,00001110B OUT DX,AL;启动AD0809 MOV DX,MY8255_B ;读8255B口数据 IN AL,DX MOV BL,FLAG_FUPIN ;判断幅频标志位,默认为0 CMP BL,0 JE PIN_1 ; 为0则跳转到PIN_1 MOV AMP,AL ; 不为0则存为振幅值 JMP NEXT1_1 PIN_1: M

24、OV FRE,AL; 为0则存为频率值流程图见图2.1和图3.1第四章 系统调试过程及结果此次设计波形发生器是我们在学习汇编以来接触到的比较大的程序。无论用何种程序书写,理清思路是关键。因此,从拿到题目开始,我们花了很多时间来对设计波形发生器的硬件和软件进行了分析与思考,从中选出最好的解决方法。在系统调试的过程中,我们用到的一个很重要的分析过程就是先易后难,先局部后整体,先将各个波形的子程序写出来,一一进行测试。无误后再写主程序将各个子程序整合起来。设计的过程是由易到难的,我们从实现最简单的波形产生功能开始,逐步添加波形切换功能、小键盘输入功能、无极调频功能、无极调幅功能,整个系统由简至繁逐步

25、完善。最先遇到的比较大的困难是小键盘的输入,前后试过两个方案,最终以唐都提供的参考程序为基础,进过修改得到了现在使用的键盘扫描子程序,效果很好。整个过程中最难的是实现无级调频和无极调幅,开始时一直无法调频,经过对各个部位的仔细调试分析,是0809模数转换的问题。0809需要一个启动信号,且转换需要一定时间。于是我们用C口每周期输出一启动信号进行转换。最终达到理想效果。实现了调频之后,对整个程序的结构稍加改进,引入了幅频标志位,实现了小键盘控制调频/调幅的切换,从而只用一个电位计和一个小键盘按键实现了无极调频和无极调幅的功能。不足和改进:1所产生的频率范围较窄。应尽量减少延时拓宽频率。2幅值调节

26、范围不够大。3产生的波形不是理想状态。特别是方波,上下跳变时,总会有断点。波形有噪声,不是理想的波形。4由于波形每周期之后要读端口,与下一个周期之间有一定延时误差。第五章 收获与体会本次课程设计的要求虽然不多,但整个设计过程是问题不断,一波三折。整个课程设计完成之后,我在整体设计思路、硬件连结和汇编语言编程等方面得到了很大的收获。设计的过程是由易到难的,我们从实现最简单的波形产生功能开始,逐步添加波形切换功能、小键盘输入功能、无极调频功能、无极调幅功能,整个系统由简至繁逐步完善。而程序总体流程也是三易其稿,其中有借鉴了别人的一些设计思路。第一个方案实在缺乏设计的智慧,在得到正确的指标后就被抛弃

27、了。第二个方案时,我们把控制波形转换的功能寄希望于用中断实现,而调频变化在延时子程序中进行,最后证实这样子的程序流程图将很复杂冗长,条理不清晰,而且用中断实现时缺乏所需的硬件。最后一个方案即为当前选择的方案,条理清晰,程序简单,代码也短,但是能很好实现所有功能。硬件连结的问题主要在使用第二个方案时出现的。第二个方案的中断控制需要手动输入一个中断脉冲,然后结果总是有差,最后讨论得出结论是我们很难保证这个手动输入脉冲的合格,这个脉冲可能不够标准。后面做最终方案时,波形发生颤抖,检查发现是控制波形选择的开关处不稳定,也算是硬件连结的问题。而波形特别是矩形波输出时,在中间总是一个断痕,反复检查软件设计

28、后也归结为硬件内部延时所产生误差。做软件设计时遇到的关键点也是难点集中到了调频电路的选择。第二方案时,我们把调频参数的读取放置在延时程序,主程序不循环,每一个波形都是无限循环的波形。后来得到高人指点,我们忽略了主程序循环所会带来的延时对波形的影响,以主程序无限循环,每输出一个周期波形读一次调频参数的方式进行调频。结果很完美。实现了调频之后,对整个程序的结构稍加改进,引入了幅频标志位,实现了小键盘控制调频/调幅的切换,从而只用一个电位计和一个小键盘按键实现了无极调频和无极调幅的功能。参考文献1周荷琴,吴秀清.微型计算机原理与接口技术.合肥:中国科学技术大学出版社,2008.62唐都科教仪器开发有

29、限公司. 32位微机原理与接口技术实验教程.3陈明义.数字电子技术基础.长沙.中南大学出版社,2008.9附录1 汇编语言源程序代码 ;*根据查看端口资源修改下列符号值* IOY0 EQU 0E400H ;片选IOY0对应的端口始地址 IOY1 EQU 0E440H ;片选IOY1对应的端口始地址;* DA0832 EQU IOY0+00H*4 ;DA0832的端口地址 MY8255_A EQU IOY1+00H*4 ;8255的A口地址 MY8255_B EQU IOY1+01H*4 ;8255的B口地址 MY8255_C EQU IOY1+02H*4 ;8255的C口地址 MY8255_M

30、ODE EQU IOY1+03H*4 ;8255的控制寄存器地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT STR1 DB DA0832: Please choose Wave,0AH,0DH,$ ;定义显示的字符串 MES1 DB SHOW A SQUARE,0AH,0DH,$ MES2 DB SHOW A SANJIAO,0AH,0DH,$ MES3 DB SHOW A JUCHI,0AH,0DH,$ MES4 DB SHOW A SINE,0AH,0DH,$ MES5 DB CHANGE THE Frequen

31、ce,0AH,0DH,$ MES6 DB CHANGE THE Amplitude,0AH,0DH,$ KEY DB? FLAG_BOXING DB ? FLAG_FUPIN DB 0 FRE DB 7FH AMP DB 7FH SIN DB 100, 102, 105, 107, 110, 112, 115, 117, 120, 122 DB 124, 127, 129, 132, 134, 136, 139, 141, 143, 145 DB 147, 150, 152, 154, 156, 158, 160, 162, 164, 166 DB 168, 169, 171, 173, 17

32、5, 176, 178, 179, 181, 182 DB 184, 185, 186, 187, 189, 190, 191, 192, 193, 194 DB 194, 195, 196, 197, 197, 198, 198, 199, 199, 199 DB 200, 200, 200, 200, 200, 200, 200, 200, 199, 199 DB 199, 198, 198, 197, 197, 196, 195, 194, 194, 193 DB 192, 191, 190, 189, 187, 186, 185, 184, 182, 181 DB 179, 178,

33、176, 175, 173, 171, 169, 168, 166, 164 DB 162, 160, 158, 156, 154, 152, 150, 147, 145, 143 DB 141, 139, 136, 134, 132, 129, 127, 124, 122, 120 DB 117, 115, 112, 110, 107, 105, 102, 100, 98, 95 DB 93, 90, 88, 85, 83, 80, 78, 76, 73, 71 DB 68, 66, 64, 61, 59, 57, 55, 53, 50, 48 DB 46, 44, 42, 40, 38, 36, 34, 32, 31, 29 DB 27, 25, 24, 22, 21, 19, 18, 16, 15, 14 DB 13, 11, 10, 9, 8, 7, 6, 6, 5, 4 DB

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号