1、2.3 电路原理图 7第三章 典型模块分析 83.1 波形产生模块 83.1.1 方波 93.1.2 三角波 93.1.3 锯齿波 103.1.4 正弦波 123.2 小键盘模块 133.3 调幅调频模块 14第四章 系统调试过程及结果 16第五章 收获与体会 17参考文献 18附录1 汇编语言源程序代码 19附录2 C语言源程序代码 33第一章 概要1.1 设计目的 信号发生器的功能设计结合了软硬件的知识,这样的一个课程设计促使我们主动去找寻资料,自主学习更多的知识。尤其重要的是设计本身是一种实践,将课本知识应用到设计中,验证并且进一步熟悉它从而获得新的领悟,这是只啃书本所不能达成的好处。信
2、号发生器的设计尤其加深我们对信号发生的理解,对以8086cpu为中心的各芯片功能的了解以及对微机原理和汇编语言编程有了更深的体会。1.2 课程设计内容及要求(1)、分别用C语言和汇编语言编程完成硬件接口功能设计;(2)、硬件电路基于80x86微机的接口电路;(3)、程序功能要求:小键盘给定、数码管或屏幕显示,并产生对应信号波形(D/A)输出(信号波形包括正弦波、三角波、方波、锯齿波)、输出信号波形幅度、频率可调。(按键数量尽量少)。1.3 所需芯片及硬件简介1.3.1 8255A 特性简介(1)具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列
3、直插式大规模集成电路。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条线被规
4、定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。本次设计只用到了三个端口的方式0。1.3.2 D /A0832功能简介DAC0832是采用CMOS工艺制成的单片电流输出型8位数 / 模转换器。DAC0832的引脚功能说明如下:D0D7 :数字信号输入端CS:片选信号,低电平有效WR:写信号1,低电平有效OUT:DAC电流输出端图1.1 唐都实验箱D /A0832接线图1.3.3 A /D0809功能简介ADC0809是采样频率为8位的、以逐次逼近原理进行模数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选
5、通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将数字量转换成模拟量
6、输出,即可得各种波形。具体方案见第三章3.1节。(2)波形切换:用小键盘输入进行波形的选择,按键03分别对应方波、三角波、锯齿波和正弦波。每个波形周期输出后,调用键盘查询子程序,判断有无按键按下,没有则继续输出下一周期,否则转到相应的波行子程序上。可随时进行波形间的切换。具体方案见第三章3.2节。(3)无极调频:改变波形子程序中的各个数据输出延时时间,就可改变整个波形的频率,延时越短频率越高。而延时时间长短可由外部输入决定,通过A/D0809将电位计(05V)的模拟量转化成数字量(00FF)作为延时时间长短。调节电位器即可调节延时,进而调节频率。ADC0809芯片分辨率为8位,即可将延时分为2
7、56个等级,实现无极调频。具体方案见第三章3.3、3.4节。(4)无极调幅:改变波形子程序中DA输出值的大小即可改变幅值,可以在原数据基础上乘以一个增益。而增益可由外部输入,原理与调频相似,通过A/D0809输入一个数字量(00FF)。按键4用于调频/调幅的切换。当判断当前为调幅状态时就将这个数字量存入幅值增益变量中,如果判断是调频状态则存入频率延时变量中。从而实现只用一个电位器分别调节频率和幅度的功能。(5)开始结束:通过扫描小键盘,按下5键则退出。2.2 程序流程图2.3 电路原理图图2.2 硬件连接电路图第三章 典型模块分析3.1 波形产生模块四个波形子程序结构类似,当子程序被调用后,进
8、行以下步骤:(1)通过8255的C7位输出一个低电平来启动AD0809,并从8255的B口读入AD输入的数字量(00HFFH)。(2)判断幅频标志位FLAG_FUPIN,为0则把AD输入的数字量存入频率值空间FRE,否则存入幅值空间AMP。(3)输出波形的一个周期。(4)调用子程序CCSCAN,判断小键盘有无按键按下,无则继续步骤(1),有则返回主程序。流程图如图3.1所示。图3.1 波形子程序流程图3.1.1 方波 方波的产生先向DA0832输出一个低电平(00H),并延时一段时间。再输出一个高电平(此处直接用AMP的值作为高电平,AMP是外部AD输入的幅值增益),延时一段相同时间,就是矩形
9、波的一个周期。 (1)一个周期波形的代码: NEXT1_1: MOV DX,DA0832 ;写00H,输出低电平 MOV AL,00H OUT DX,AL CALL DELAY1 ;延时写 AMP,输出高电平 MOV AL,AMP ;AMP=00HFFH,默认值 7FH(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
10、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:AL幅值增益AMP, AMP=00HFFH AND AL,0F0H SHR AL,4 ; AL=00H0FHMUL BL ; ALBL*AL启
11、动D/A转换 OUT DX,AL ;输出AL CALL DELAY2 INC BL ;BL加一 CMP BL,25H ;判断BL是否加到最大值了 JNE UP1 DOWN:AL幅值增益AMP ,AMP=00HFFH AND AL,0F0HMOV DX,DA0832 CALL DELAY2 DEC BL ;BL减一 CMP BL,00H ;判断BL是否减到最小值了 JNE DOWN延时子程序与方波类似,此处不再赘述。局部流程图如图3.2所示。3.1.3 锯齿波 锯齿波与三角波类似,只是锯齿波到达最大值之后,直接跳到最小值。因此锯齿波只有对BL依次加一的过程。NEXT1_3: UP2:AL幅值增益
12、AMP, AMP=00HFFH AND AL,0F0H MUL BL ; INC BL ; JNE UP2BL加到最大之后直接赋给最小值00H MOV AL,AMP SHR AL,4 MOV DX,DA0832局部流程图如图3.3所示。3.1.4 正弦波正弦波是利用正弦表(见附录 代码段)输出的,即将正弦表中的数值一一输出并延时。一个周期波形的代码: 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 AL AL* BL CALL DELAY3 INC SI ;指向表中的下一个数据 LOOP UP局部流程图如图3.4所示。3.2 小键盘模块小键盘用到两个子程序(ccscan和scan)。(1) ccscan子程序只是一个辅助程序,用于判断当前小键盘是否有键按下,有则全零标志位ZF=0(运算结果不为0),无键按下则ZF=1(运算结果为0)。子程序代码如下: CCSCAN PROC NEAR ;扫描是否有按键闭合子程序 MOV AL,0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1