微机原理课程设计报告_第1页
微机原理课程设计报告_第2页
微机原理课程设计报告_第3页
微机原理课程设计报告_第4页
微机原理课程设计报告_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

word文档可自由复制编辑微机应用系统设计与综合实验课程设计报告word文档可自由复制编辑目录目录·······································································1第一章 概要····························································31.1设计目的·························································31.2课程设计内容及要求·············································31.3所需芯片及硬件简介··············································41.3.18086CPU简介················································41.3.274LS273功能简介············································41.3.38255A特性简介·············································51.3.4D/A0832功能简介···········································61.3.5A/D0809功能简介············································61.3.6唐都小键盘简介·············································71.3.7数码管显示·················································7第二章 总体设计方案··················································82.1设计思想论述····················································82.2程序流程图······················································92.3电路原理图····················································10第三章 典型模块分析················································113.1波形产生模块·················································113.1.1三角波·················································123.1.2锯齿波··················································153.1.3正弦波·················································163.1.4方波···················································193.2小键盘模块···················································203.3调幅调频模块················································22第四章 系统调试过程及结果······································25第五章 收获与体会················································27参考文献··························································29附录1汇编语言源程序代码········································30附录2proteus仿真图··············································37第一章概要1.1课程设计目的《微机应用系统设计与综合实验(实践)》课程设计是自动化、智能专业本科生的必修课。通过本课程设计,让学生对微机系统有一个较全面的理解,对典型数字接口电路的应用技术有一个较深入地掌握,综合了对应用系统的硬件原理和软件编程的分析、设计和调试,达到基本掌握简单微型计算机应用系统软硬件的设计方法,提高项目开发能力的目的。要求同学独立完成课题,写出课程设计说明书,画出电路原理图,说明工作原理,画出电路印制板图,编写设计程序及程序流程图。希望同学们认真阅读课程设计任务书,认真查阅资料,完成好上机调试,圆满完成本次课程设计。1.2课程设计内容及要求完成基于80x86CPU为核心控制器的具备基本I/O接口功能的硬件电路系统原理图设计、PCB电路设计和软件编程设计。基本I/O接口电路应包括:锁存器、缓冲器、地址译码器、8255接口、8253接口、A/D(D/A)转换电路、串行接口电路等;软件功能要求完成基本I/O接口电路控制和串口通信功能调试。设计题:信号发生器功能程序设计设计要求:(1)、硬件电路基于80x86微机的接口电路;(2)、分别用C语言或汇编语言或VC++编程完成硬件接口功能设计;(3)、程序功能要求:小键盘给定、数码管(屏幕)显示,并产生对应信号波形(D/A)输出(信号波形包括正弦波、三角波、方波、锯齿波)、输出信号波形幅度、频率可调。(注意:按键数量应尽量少)。(4)、具备本地及远程(串行方式)监测功能。实现技术指标:

(1)、完全用小键盘控制各波形间的切换和频率和幅值的调节以及退出。

(2)、实现正弦波、三角波、方波和锯齿波信号的产生。

(3)、数码管同步显示当前工作波形的频率和幅值。

(4)、实现频率的1到5倍可调。

(5)、实现幅值的1到5倍可调。1.3所需芯片及硬件简介1.3.1

8086功能简介

8086

CPU是由总线接口部件BIU和执行部件EU这两大部分构成。总线接口部件BIU是8086

CPU在存储器和I/O设备之间的接口部件,负责对全部引脚的操作,即8086对存储器和I/O设备的所有操作都是由BIU完成的。所有对外部总线的操作都必须有正确的地址和适当的控制信号,BIU中的各部件主要是围绕这个目标设计的。它提供了16位双向数据总线、20位地址总线和若干条控制总线。

其具体任务是:负责从内存单元中预取指令,并将它们送到指令队列缓冲器暂存。CPU执行指令时,总线接口单元要配合执行单元,从指定的内存单元或I/O端口中取出数据传送给执行单元,或者把执行单元的处理结果传送到指定的内存单元或I/O端口中。

执行单元EU中包含1个16位的运算器ALU、8个16位的寄存器、1个16位标志寄存器FR、1个运算暂存器和执行单元的控制电路。这个单元进行所有指令的解释和执行,同时管理上述有关的寄存器。EU对指令的执行是从取指令操作码开始的,它从总线接口单元的指令队列缓冲器中每次取一个字节。如果指令队列缓冲器中是空的,那么EU就要等待BIU通过外部总线从存储器中取得指令并送到EU,通过译码电路分析,发出相应控制命令,控制ALU数据总线中数据的流向。1.3.274LS273功能简介

地址锁存器就是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来。8086/8088数据和地址总线采用分时复用操作方法,即用同一总线既传输数据又传输地址。当微处理器与存储器交换信号时,首先由CPU发出存储器地址,同时发出允许锁存信号ALE给锁存器,当锁存器接到该信号后将地址/数据总线上的地址锁存在总线上,随后才能传输数据。

地址锁存器74LS273是带清除端的八D触发器,只有清除端为高电平时才具有锁存功能,锁存控制端为11脚CLK,在上升沿锁存。8086的ALE端输出的锁存控制信号必须经反相器后才能连到74LS273的CLK端,以满足CLK在上升沿锁存的要求。74LS273的引脚1D~8D为数据输入端,1Q~8Q为数据输出端,WR:主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0。CP(CLK):触发端,上升沿触发,即当CP从低到高电平时,D0~D7的数据通过芯片,为0时将数据锁存,D0~D7的数据不变。由于8086有20位物理地址,所以需要用3片74LS273级联。1.3.38255A特性简介(1)具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连。图1.1唐都实验箱D/A0832接线图(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.4D/A0832功能简介DAC0832是采用CMOS工艺制成的单片电流输出型8位数/模转换器。DAC0832的引脚功能说明如下:D0-D7:数字信号输入端CS:片选信号,低电平有效WR:写信号1,低电平有效OUT:DAC电流输出端1.3.5A/D0809功能简介ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。当地址ABC=000时,IN0通道被选通。图1.2唐都实验箱A/D0809接线图1.3.6唐都小键盘简介唐都实验箱中提供了4行×4列16个按键,列选择信号X1-X4,行扫描信号Y1-Y4。图1.3唐都实验箱小键盘接线图1.3.7

数码管显示

数码管同步显示当前波形的幅值和频率。硬件上由8086将数据输出给8255,8255再将输出送给数码管的A~Dp,显示相应字符。软件上定义一个缓冲区存放波形的幅值和频率,显示数码管时,利用缓冲区的数值查找数码管键值表再输出对应数值。循环输出波形时也循环输出缓冲区内容对应的值,就可以同步显示波形的幅值和频率。利用小键盘扫描得到的键值进行判断,对缓冲区内的幅值频率进行相应的改变,使数码管能显示不同的幅值和频率。第二章总体设计方案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程序流程图开始开始NYNY结束初始化8255调用ccscan子程序并判断,无键按下则循环等待,有键按下则消抖键盘扫描子程序,键值keyKey=5?Key=0?Key=1?Key=2?Key=3?YYYYNNN三角波子程序,出口参数:波形标志位=0锯齿波子程序,出口参数:波形标志位=1正弦波子程序,出口参数:波形标志位=2方波子程序,出口参数:波形标志位=3Key=4?键盘扫描子程序,键值keyNFLAG_FUPIN取反Key=波形标志位显示调频/调幅状态显示波形信息显示波形信息显示波形信息显示波形信息图2.1主程序流程图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所示。子程序调用子程序调用启动AD0809,读入数据到ALFlag_fupin=0?保存到频率,FreAL保存到幅值,AmpAL输出一个周期波形小键盘有键按下?YNYN延时消抖小键盘有键按下?NY子程序返回图3.1波形子程序流程图3.1.1三角波三角波从最小值开始逐渐上升,到达最大值之后再逐渐减小到最小。因此先将最小值(00H)放到BL,输出并延时,对BL加一,再输出并延时,达到最大值后就对BL依次减一,输出并延时,直到BL=00H,则为一个周期波形。因此三角波有两个过程。(1)一个周期波形的代码如下:SANJIAO:CALLAM;进行幅度调制 MOVAL,00H ;对AL中的数据进行初始化UP:MOVDX,MY8255_A;上升 ;信号发生器系统开始时输出为0MOVDI,AXOUTDX,ALCALLDELAY;进行频率调制MOVAX,DIPUSHAXMOVDX,MY8255_B ;读入8255B口信息,看是否有按键按下并进行波形转换INAL,DXNOTAL ;由于B口的信息按下为低电平,故对AL中的数取反CMPAL,02H;按下第二行键转入正弦波JEZHENGXIANBOCMPAL,04H ;按下第三行键转入锯齿波JEJUCHIBOCMPAL,08H ;按下第四行键转入方波JEFBPOPAXINCALCMPAL,BL;和最大值比较JBUP;小于最大值则执行循环DON:MOVDI,AX;下降MOVDX,MY8255_AOUTDX,ALCALLDELAYMOVAX,DIPUSHAXMOVDX,MY8255_B ;判断键值按下的情况INAL,DXNOTALCMPAL,02HJEZHENGXIANBOCMPAL,04HJEJUCHIBOCMPAL,08HJEFBPOPAXDECALCMPAL,00H;和最小值比较JADON;高于最小值则执行循环JMPSANJIAO;重新进行三角波发生延时子程序代码:DELAY:PUSHAXMOVDX,MY08081;调频ADC08081的初始化OUTDX,ALMOVDX,MY08081;读调频ADC08081值INAL,DXMOVAH,0;AH,BH进行初始化MOVBH,0MOVBH,50MULBH;AH中存高8位,AL中存低8位MOVBH,0FFHDIVBH;AH存放余数,AL中存放商 MOVAH,0MOVBH,0AHDIVBH;对商除以10,即相当于把十位的数字保存到AL中,个位保存到AH中;AL=0000XXXX,AH=0000XXXXMOVCL,4SHLAL,CL;即把上边AL中的商左移四位,将来在数码管的十位上显示;AL=XXXX0000,AH=0000XXXXORAL,AH;把AH中的数据加到AL的低四位中去 ;此时AL=XXXXXXXXMOVDX,MY82551_COUTDX,ALMOVBH,0HMOVAH,0PUSHCXMOVCX,001AHMULCXMOVCX,AXDELAY1: LOOPDELAY1 POPAXPOPCXRET局部流程图如图3.1所示:BL已到最大?BL已到最大?延时BL*增益→AL,输出ALBL=00HBL加一NYBL已到最小?延时BL*增益→AL,输出ALBL减一NY图3.1三角波一周期流程图BL=00H延时BL*增益→AL,输出ALBL*增益→AL,输出ALBL=00H延时BL加一BL已到最大?NY图3.3锯齿波一周期流程图运行效果如图3.2所示:图3.2三角波图形3.1.2锯齿波锯齿波与三角波类似,只是锯齿波到达最大值之后,直接跳到最小值。因此锯齿波只有对BL依次加一的过程。一个周期波形的代码如下:JUCHIBO:CALLAM ;进行幅度调制PUSHAXMOVAL,BL;将幅度的最大值保存在AL中DOWN:MOVDX,MY8255_A;输出锯齿波OUTDX,ALMOVDI,AX ;保存AX的值CALLDELAY ;进行频率调制MOVDX,MY8255_B;判断键值按下的情况INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,02HJEZHENGXIANBOCMPAL,08HJEFBMOVAX,DI ;恢复AX的值DECALCMPAL,00HJADOWNPOPAXJMPJUCHIBO延时子程序与三角波类似,此处不再赘述。局部流程图如图3.3所示。运行效果如图3.4所示:图3.4锯齿波图形3.1.3正弦波正弦波是利用正弦表(见附录代码段)输出的,即将正弦表中的数值一一输出并延时。一个周期波形的代码:ZHENGXIANBO:CALLAM ;进行幅度调制,将幅值读入到BL中PUSHAXPUSHCXLEASI,SINMOVSI,00H;SI做正弦表里的指针D:MOVAL,[SI];读入正弦表中的数值到AL中MOVDX,MY8255_AMOVDI,AXMULBL ;将正弦表中的数值乘以BL幅值以实现调幅MOVAL,AHOUTDX,ALINCSICALLDELAY ;进行频率调制MOVDX,MY8255_B;判断键值按下的情况INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,04HJEJUCHIBOCMPAL,08HJEFBMOVAX,DICMPSI,0FFHJNZDPOPCXPOPAXJMPZHENGXIANBO延时子程序与三角波类似,此处不再赘述。局部流程图如图3.5所示:延时延时读表中的一个数据到AL取正弦表首地址AL*增益→AL,输出AL表地址加一已到表末?NY图3.5正弦波一周期流程图运行效果如图3.6所示:图3.6正弦波图形3.1.4方波方波的产生先向DA0832输出一个低电平(00H),并延时一段时间。再输出一个高电平(此处直接用AMP的值作为高电平,AMP是外部AD输入的幅值增益),延时一段相同时间,就是矩形波的一个周期。一个周期波形的代码:FB: CALLAM ;进行幅度调制PUSHAXMOVAL,0FFH;输出方波的幅值MULBLMOVAL,AHMOVDX,MY8255_AOUTDX,ALMOVCX,40HCALLDELAY ;进行频率调制MOVAL,0H;改变方波的幅值MOVDX,MY8255_AOUTDX,ALCALLDELAY ;进行频率调制MOVDX,MY8255_B ;判断键值按下的情况INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,04HJEJUCHIBOCMPAL,02HJEZHENGXIANBOPOPAXJMPFB延时子程序与三角波类似,此处不再赘述。运行效果如图3.7所示:图3.7方波图形3.2小键盘模块小键盘用到两个子程序(ccscan和scan)。ccscan子程序只是一个辅助程序,用于判断当前小键盘是否有键按下,有则全零标志位ZF=0(运算结果不为0),无键按下则ZF=1(运算结果为0)。子程序代码如下:CCSCANPROCNEAR;扫描是否有按键闭合子程序MOVAL,00HMOVDX,MY8255_A;将4列全选通,X1~X4置0OUTDX,ALMOVDX,MY8255_CINAL,DX;读Y1~Y4NOTALANDAL,0FH;取出Y1~Y4的反值RETCCSCANENDPscan功能为当确定小键盘有键按下则一列一列扫描键盘,判断是哪一列哪一行的键被按下了,并把键值保存到数据段的key空间去。子程序代码如下:SCANPROCNEARMOVCH,0FEHMOVCL,00H;设置当前检测的是第几列COLUM:MOVAL,CH;选取一列,将X1~X4中一个置0MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_C;读Y1~Y4,用于判断哪一行按键闭合INAL,DXL1:TESTAL,01H;是否为第1行JNZL2;不是则继续判断MOVAL,00H;设置第1行第1列的对应的键值JMPKCODEL2:TESTAL,02H;是否为第2行JNZL3;不是则继续判断MOVAL,04H;设置第2行第1列的对应的键值JMPKCODEL3:TESTAL,04H;是否为第3行JNZL4;不是则继续判断MOVAL,08H;设置第3行第1列的对应的键值JMPKCODEL4:TESTAL,08H;是否为第4行JNZNEXT;不是则继续判断MOVAL,0CH;设置第4行第1列的对应的键值JMPKCODENEXT:INCCL;当前检测的列数递增MOVAL,CHTESTAL,08H;检测是否扫描到第4列JZKERR;是则跳回到开始处ROLAL,1;没检测到第4列则准备检测下一列MOVCH,ALJMPCOLUMKCODE:ADDAL,CL;将第1列的值加上当前列数,确定按键值MOVKEY,AL;保存按键值到key空间KERR:RETSCANENDP3.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)调频程序代码如下:DELAY:PUSHAXMOVDX,MY08081;调频ADC08081的初始化OUTDX,ALMOVDX,MY08081;读调频ADC08081值INAL,DXMOVAH,0;AH,BH进行初始化MOVBH,0MOVBH,50MULBH;AH中存高8位,AL中存低8位MOVBH,0FFHDIVBH;AH存放余数,AL中存放商 MOVAH,0MOVBH,0AHDIVBH ;对商除以10,即相当于把十位的数字保存到AL中,个位保存到AH中;AL=0000XXXX,AH=0000XXXXMOVCL,4SHLAL,CL;即把上边AL中的商左移四位,将来在数码管的十位上显示;AL=XXXX0000,AH=0000XXXXORAL,AH;把AH中的数据加到AL的低四位中去 ;此时AL=XXXXXXXXMOVDX,MY82551_COUTDX,ALMOVBH,0HMOVAH,0PUSHCXMOVCX,001AHMULCXMOVCX,AXDELAY1: LOOPDELAY1 POPAXPOPCXRET(2)调幅程序代码如下:AM:PUSHAXMOVDX,MY08082;读0808值AL=10000010OUTDX,ALMOVDX,MY08082INAL,DX;此时AL中存储08082读入的幅值信息MOVBL,AL;把幅值信息保存在BL中MOVAH,0;AH,BH进行初始化MOVBH,0MOVBH,50MULBH;AH中存高8位,AL中存低8位MOVBH,0FFHDIVBH;AH存放余数,AL中存放商 MOVAH,0MOVBH,0AHDIVBH ;对商除以10,即相当于把十位的数字保存到AL中,个位保存到AH中;AL=0000XXXX,AH=0000XXXXMOVCL,4SHLAL,CL;即把上边AL中的商左移四位,将来在数码管的十位上显示;AL=XXXX0000,AH=0000XXXXORAL,AH;把AH中的数据加到AL的低四位中去 ;此时AL=XXXXXXXXMOVDX,MY8255_COUTDX,ALMOVBH,0HPOPAXRET第四章系统调试过程及结果此次设计波形发生器是我们在学习汇编以来接触到的比较大的程序。无论用何种程序书写,理清思路是关键。因此,从拿到题目开始,我们花了很多时间来对设计波形发生器的硬件和软件进行了分析与思考,从中选出最好的解决方法。在系统调试的过程中,我们用到的一个很重要的分析过程就是先易后难,先局部后整体,先将各个波形的子程序写出来,一一进行测试。无误后再写主程序将各个子程序整合起来。设计的过程是由易到难的,我们从实现最简单的波形产生功能开始,逐步添加波形切换功能、小键盘输入功能、无极调频功能、无极调幅功能,整个系统由简至繁逐步完善。调试过程中遇到的问题有:1.硬件的连线。硬件连好后,将方波子程序载入8086,最开始示波器连输出都没有,DAC0832的片选端一直没有被选中,我总是以为是地址的问题,可是怎么检查程序也是没有理由出错的,最后发现DAC0832的WR端虚接了,软件画图容易出现虚接的情况,所以连线的时候一定要小心。

2.小键盘控制,这也是整个程序中最核心的部分。这个子程序加在程序的最前面的,如果没有扫描到键值,整个程序就会陷入死循环,不会有任何输出变化。要使键盘扫描得到键值,我参考了实验指导书上的小键盘控制,先把小键盘扫描的程序单独给出来,看能否显示数字,结果并不能正常显示,反复检查调试以后,修改了键值的存储方式以及延时,将其修改后,小键盘方面能正常扫描了。

3.其实最复杂的是将数码管显示和小键盘扫描整合在一起。数码管显示问题一直很复杂,总是不能正常的显示,明明小键盘Y端有变化,表明有键按下,但是数码管就是不能将要显示的数平稳地显示,刚开始只显示零,后来经修改后,会偶尔显示一下幅值或频率但又立马变了,并且显示的数字也不正确,貌似会和之前显示的数字有重双影。查唐都的实验说明得知,数码管只提供了一个8位数据端口,一次只能让一个数码管显示数据,然后显示过程特别地快,基本上看不到想要的结果,并且闪烁得特别厉害。经过反复一直地查找修改,终于发现,有两个数码管显示的内容重叠了,原来是要显示的两个存储单元的地址弄混了,并且延时也有问题。但是数码管的延时又涉及到波形每个输出点的延时,所以将波形产生方面,我改用了采样数字量表,使所有的波形产生都简化了,同时也使延时更短,改为增加循环次数,并且使数码管显示也加入循环里,这样利用视觉暂留,就能看到同时显示幅值和频率。

4.在小键盘实现中还出现了一个很重要的问题,就是在执行到对应的波形时要怎么样跳出然后执行到另外一个波形里面去。原本我想多设置几个按键,4个负责选择波形,4个负责调幅调频,还要加一个退出按键,每输出一个周期就扫描一次,可是这样按键太多了程序显得臃肿,并且没有波形的情况调节频率也是没有意义的,而且一个周期的时间,很有可能使你的按键落空,没有扫描进去。最后决定只用5个键。没有波形时4个按键选择波形,每次执行完一个点后再重新键盘扫描,此时那4个键又代表调幅和调频,而4键从始至终设置为退出键,只要任何时候扫描到此键就返回初始状态,重新进入波形选择,这样就实现了波形的切换,又使按键有效率更高,而且按键数量也很少。

5.方波和三角波的波形产生的程序并不难。锯齿波就是截取三角波的一半,而正弦波,我找到的正弦波采样值序列表都很长,而且值都比较大,所以最后,我用计算器在0~2π内取了40个点的正弦值。最后在调节幅值的时候,当调到最大幅值时,有两种波形失真了,尤其正弦波和三角波形被截顶了。但是我观察到锯齿波却能正常显示,原来锯齿波的采样数字量表的最大值比较小,经放大最大倍数后也没有超出范围。这可能是因为放大后正弦波的最大值已经超出了运放输出的最大电压,所以导致截顶失真。所以我将数字量的值整体缩小了,最后总算达到满意的效果。不足和改进:1.所产生的频率范围较窄。应尽量减少延时拓宽频率。2.幅值调节范围不够大。3.产生的波形不是理想状态。特别是方波,上下跳变时,总会有断点。波形有噪声,不是理想的波形。4.由于波形每周期之后要读端口,与下一个周期之间有一定延时误差。第五章收获与体会本次课程设计在面临考试的巨大压力和编程难度的双重压力下终于完成了。这让我对于微机原理与接口技术这门课程又有了更深的了解,尤其是汇编语言的运用。这是一次很好的实践的机会,将我们之前几个星期做的微机原理与接口技术实验的软件和硬件部分都结合起来,灵活的运用,锻炼我们学以致用,解决实际问题的能力。我在此次课程设计中受益匪浅,收获良多。本次设计我是用仿真完成的,因为上学期在模电数电课程设计中也使用到了protues软件,所以这次的设计,对于protues的使用我一点也不陌生。但是,这次的仿真比起以前模电数电仿真要复杂多了。因为这次我选择的信号发生器重点就是汇编语言程序的编写和调试,程序出现的错误比硬件出现的错要难找的多,尤其是逻辑错误,有的时候看都看不出来。但是我还是比较喜欢汇编语言的,可能是对C已经忘得差不多了的缘故吧,脑子里只有汇编。汇编是一门很原始的语言,但是也是一门很有用的语言,通过这么一个比较大的实验,让我对汇编的理解有了进一步的加深。虽然中间过程有苦有煎熬,但是还是很值得回味的,因为我们就是在这样一次又一次煎熬中才熬出了头,才不断成长为更加强大的人。

在这次设计中,一开始想的比较简单和乐观,因为在做微机原理编程实验的时候,我们接触的都是几十行到一百来行的小程序,写完一检查就能比较轻松地查找到错误,但是这次的题目重点就在编程。一开始,我以为这些程序不会错,电路也比较简单。所以当我很快的连好电路,再几个子程序都加载进去的时候,就完全不是我想象的那样输出。而且从整个电路分析,我也找不到问题到底出在哪里。我必须要一步一步地再回头检查错误。这样有可能还检查不出来,最后我只能从一个小模块开始重新连电路,再将该模块对应的程序加载,有问题再改。就这样,一步一步,只有解决了局部的问题,才能为解决整体的问题提供可能。

在小键盘和数码管显示的模块,确实一度陷入瓶颈,不知道问题出在哪里,为什么就是不能显示。我去了几次实验室,想和大家交流一下,但是选择这个题目的人真的很少,最后找到几个同学,但是他们迫于考试压力要么放弃了仿真,要么放弃了小键盘,当时的情绪真是非常抑郁,难道就真的做不出来了吗?怎么可能?就是不相信,感觉就差一点点,就要实现了,因为坚持,因为坚信,因为坚定,哪怕这个茬再难找也会原形毕露的。当看到数码管显示正常,自己的心血终于有了结果,内心的喜悦溢于言表。有句话说得对:失败就是离成功最近的地方,迈过去了就是另一片天。

这次的课程设计,我要十分感谢同学们给予我的帮助,还有李志明老师的指导,让我在短短的几个星期里学到了很多很实用的知识,通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。而且在做课程设计的过程中,不仅是考验自己所学的《微机原理》知识,更是要锻炼自己的分析问题的能力和解决实际问题的能力,而在此次课程设计过程中得到了充分的体现。虽然在设计的过程遇到了各种各样的问题,但同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温习,加以巩固。

这回顾起此次课程设计,我收获颇丰,不仅巩固了《微机原理》的知识,而且锻炼了动手设计,解决实际问题的能力,同时让我坚定了一个信念,学习上,没有攀登不了的山峰,即使山重水复疑无路,只要坚持下去,也会看到柳暗花明又一村。在今后的学习中,我也会将以这样的精神面对所有的困难。

参考文献[1]周荷琴,吴秀清.微型计算机原理与接口技术.合肥:中国科学技术大学出版社,2008.6[2]唐都科教仪器开发有限公司.32位微机原理与接口技术实验教程.[3]陈明义.数字电子技术基础.长沙.中南大学出版社,2008.9[4]《TD-PIT+实验教程》

[5]《TD-PIT+用户手册》

附录1汇编语言源程序代码;****************根据查看端口资源修改下列符号值*******************IOY0EQU0C400H;片选IOY0对应的端口始地址IOY1EQU0C440H;片选IOY1对应的端口始地址IOY2EQU0C480H;片选IOY2对应的端口始地址IOY3EQU0C4C0H;片选IOY3对应的端口始地址;*****************************************************************MY8255_AEQUIOY0+00H*4;8255的A口地址MY8255_BEQUIOY0+01H*4;8255的B口地址MY8255_CEQUIOY0+02H*4;8255的C口地址MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址MY82551_AEQUIOY3+00H*4;82551的A口地址MY82551_BEQUIOY3+01H*4;82551的B口地址MY82551_CEQUIOY3+02H*4;82551的C口地址MY82551_MODEEQUIOY3+03H*4;82551的控制寄存器地址MY08081EQUIOY1+00H*4;调频ADC0808的地址MY08082EQUIOY2+00H*4;调幅ADC0808的地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENTSINDB80H,83H,86H,89H,8DH,90H,93H,96H;正弦函数表DB99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEHDB0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5HDB0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8HDB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9HDB0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5HDB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDHDB0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDHDB0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6HDB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAHDB0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAHDB0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7HDB0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1HDB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99HDB96H,93H,90H,8DH,89H,86H,83H,80HDB80H,7CH,79H,78H,72H,6FH,6CH,69HDB66H,63H,60H,5DH,5AH,57H,55H,51HDB4EH,4CH,48H,45H,43H,40H,3DH,3AHDB38H,35H,33H,30H,2EH,2BH,29H,27HDB25H,22H,20H,1EH,1CH,1AH,18H,16HDB15H,13H,11H,10H,0EH,0DH,0BH,0AHDB09H,08H,07H,06H,05H,04H,03H,02HDB02H,01H,00H,00H,00H,00H,00H,00HDB00H,00H,00H,00H,00H,00H,01H,02HDB02H,03H,04H,05H,06H,07H,08H,09HDB0AH,0BH,0DH,0EH,10H,11H,13H,15HDB16H,18H,1AH,1CH,1EH,20H,22H,25HDB27H,29H,2BH,2EH,30H,33H,35H,38HDB3AH,3DH,40H,43H,45H,48H,4CH,4EHDB51H,55H,57H,5AH,5DH,60H,63H,66HDB69H,6CH,6FH,72H,76H,79H,7CH,80HDATAENDSCODESEGMENTASSUMECS:CODE,SS:STACK1,DS:DATASTART:MOVAX,STACK1;设置段地址MOVSS,AXMOVAX,DATAMOVDS,AXMOVDX,MY8255_MODE;8255初始化MOVAL,82H;AL=10000010A口输出,B口输入,C口输出,AB都工作在方式0OUTDX,ALMOVDX,MY82551_MODE;82551初始化MOVAL,82H;AL=10000010A口输出,B口输入,C口输出,AB都工作在方式0OUTDX,AL;三角波发生模块SANJIAO:CALLAM;进行幅度调制 MOVAL,00H ;对AL中的数据进行初始化UP:MOVDX,MY8255_A;上升 ;信号发生器系统开始时输出为0MOVDI,AXOUTDX,ALCALLDELAY;进行频率调制MOVAX,DIPUSHAXMOVDX,MY8255_B ;读入8255B口信息,看是否有按键按下并进行波形转换INAL,DXNOTAL;由于B口的信息按下为低电平,故对AL中数取反CMPAL,02H;按下第二行键转入正弦波JEZHENGXIANBOCMPAL,04H ;按下第三行键转入锯齿波JEJUCHIBOCMPAL,08H ;按下第四行键转入方波JEFBPOPAXINCALCMPAL,BL;和最大值比较JBUP;小于最大值则执行循环DON:MOVDI,AX;下降MOVDX,MY8255_AOUTDX,ALCALLDELAYMOVAX,DIPUSHAXMOVDX,MY8255_B ;判断键值按下的情况INAL,DXNOTALCMPAL,02HJEZHENGXIANBOCMPAL,04HJEJUCHIBOCMPAL,08HJEFBPOPAXDECALCMPAL,00H;和最小值比较JADON;高于最小值则执行循环JMPSANJIAO;重新进行三角波发生;锯齿波发生模块JUCHIBO:CALLAM ;进行幅度调制PUSHAXMOVAL,BL;将幅度的最大值保存在AL中DOWN:MOVDX,MY8255_A;输出锯齿波OUTDX,ALMOVDI,AX ;保存AX的值CALLDELAY ;进行频率调制MOVDX,MY8255_B;判断键值按下的情况INAL,DXNOTALCMPAL,01HJESANJIAOCMPAL,02HJEZHENGXIANBOCMPAL,08HJEFB

温馨提示

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

评论

0/150

提交评论