微机原理课程设计函数发生器.docx_第1页
微机原理课程设计函数发生器.docx_第2页
微机原理课程设计函数发生器.docx_第3页
微机原理课程设计函数发生器.docx_第4页
微机原理课程设计函数发生器.docx_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

二一一二一二学年第 一 学期信息科学与工程学院自动化系课程设计计划书课程名称: 班 级: 姓 名: 学 号: 指导教师: 二一一 年 十二 月 十一 日一 设计题目函数发生器的设计经过这段时间对微机原理及接口技术的相关学习,利用所学的知识来设计一个函数发生器,使其具有外部选择波形的功能。二 设计任务及需求分析a) 波形的产生方式:要求产生方波、正向锯齿波、负向锯齿波、三角波、阶梯波。实现这个要求可以利用8位数模转换器DAC0832。在8088中编写相应可以产生所需波形的程序,输出数字量给DAC0832,利用0832的数模转换功能,输出相应的电信号波形。使用一片DAC0832芯片,其他的各个输出波共用同一端口Iout1。b) 按键选择功能:波形编号为04,通过按键选择产生相应的输出波形。CPU外围扩展可编程中断控制器8259A对外为中断进行管理。使用按键的方式,将外部的按键连接在8259A的中断输入线IR0IR4上面,分别对应相应的波形序号04,按下按键,由于在按键的一端皆有下拉电阻是终端输入端口的初始电平为低,按下按键之后,电平拉高,产生中断,为了减小按键抖动产生的误判,在程序中应改进行按键去抖动的处理。三 总体设计方案8255I/O扩展8259A中断控制8088CPUDAC0832波形输出数码管输出按键输入四 具体方案选择和硬件设计3.1 最大组态系统搭建参考微机原理、汇编与接口技术朱定华第171页利用8284产生CPU所需要的CLK、READY、RESET信号。该电路只利用石英晶体构成振荡器结合8284产生固定的时钟频率。另外复位RESET电路中串联电容,具有滤波的作用。电路如下图:a)8088外部时钟电路:*该电路产生的CLK约为4Mhz。b)地址锁存器使用74LS373,数据总线驱动器使用74LS245,总线控制器使用8288.由于版面的问题详细电路图可以参见附录总图。3.2按键选择产生的波形类型方案1:可以CPU的I/O查询功能,将按键接到CPU的各个I/O端口,设定一个扫描周期,对端口上的电平变化信息进行查询和记录,当端口上面出现低电平则说明有按键被按下,根据硬件电路设定,不同的端口接不同的按键,这样就可以直到按下了几号键,并产生对应的波形。方案2:利用中断来记录无不的按键动作。使用一片8259A将按键接到8259A的IR0IR4,这样每一个不同的按键被按下时候,触发对应引脚的中断,实现按键选择DAC转换类型的选择。若使用中断的方式,就可以将各个按键对应的波形产生函数写在中断服务程序中。通过比较觉得使用8259A来扩展比较好,因为本身I/O端口是有限的。使用外部中断的扩展就可以节省不少空间。再者使用中断的方式来做的话已不用频繁的进行端口的扫描和电平比较。在思路上更简洁。设计8259A的中断触发方式是上升沿有效,就必须外部实现每按键一次产生一个上升沿。电路如下图所示,IR0IR7引脚外连上拉电阻,没有按键的情况下固定为高电平,一旦有按键按下时候,IRx端变成低电平,当按键弹起之后IRx变成高电平,这样在按键的过程中间就产生了上升沿,按键一次就可以触发一次对应的中断。值得注意的是,在按键检测中,需要做消除抖动的处理。有因为8259A被设置成为上升沿有效,若按一次键出现了好几次抖动,那么每次抖动就会触发一次中断,这样中断检测就出现了错误,因此在检测到中断(即检测到上升沿的时候),利用了电容对按键两端进行滤波处理,是抖动产生的毛刺被平整。 8259A基本与原理简介:D0D7为8259与数据总线之间的通信端口,INT为芯片与CPU的链接端口,当IR0IR7中有一个引脚接受到中断的触发信号,并且此时没有其他的中端正在被响应,则8259A就向CPU的INTR端发出中断请求信号,等待CPU响应中断请求,CPU在一个机器周期的最后一个T才检测INTR线,若发现哟中断信号且IF为1 (中断开),则会响应中断。响应中断时候内部自动的关中断,发出中断响应信号。然后执行保留断点,获取终端服务程序的入口地址,进行保护现场,执行中断服务程序,最后恢复现场,返回到中断前的下一条指令。硬件电路的设计如下图: *图中的CS端口连接在地址译码电路输出端口的Y0口上。*若需要对功能进行扩展直接增加按键接口即可。*按键上面并联电容起到硬件消除抖动的作用。根据电容的充放电时间:T=R*C=10000*0.1/1000000=1ms如果消抖的延时时间可以增大电容,取在0.11uf之间,是充放电时间大于抖动时间即可。 *另外按键消抖也可采用RS触发器来对按键进行消抖,电路如下图:开关闭合先一边,输出波形只改变一次,因此可以得到很好的方波。由于本设计中才用的时两点式的按键,而非才用此类单刀双掷开关,使用单稳态触发器消抖硬件选择上需要做更改,且电路硬件连接不方便,故采用电容消抖的方式。3.3数模转换电路设计采用DAC0832芯片对CPU给定的数字量惊醒数模转换后输出,由于输出的电压值和电流值比较小,很可能达不到外设的要求,于是先对DAC0832芯片的Iout1输出信号进行放大处理后再输出。DAC0832的基本原理如下:改芯片具有8路输入D0D7分别连接在数据总线上面的d0d7端口,芯片内部为具有统一参考点的8个并联支路,由于并联的关系使得每条之支路对应输出电路贡献电流的权值符合2进制编码,内部电路为T行电路,通过输出8为二进制数对每条支路的通断进行控制,于是得到的输出电流值也就是与二进制数对应的大小。当二进制数是0,则输出0V,当二进制数位256时输出值即为最大电流,可见DAC转换器的精度是Vref/256,当基准电压设定为+5V时,精度就是0.01953V.在该芯片的引脚中Iout1与Iout2互补,其和为一个常数。Cs为片选端口,在执行DA转换之前必须先通过地址译码器选中芯片,然后开启转换。Vref即为参考电压,在实际中常将它置于-10V+10V之间。具体电路如下图:*图中给定的基准电压是+5V,故输出值的范围是0+5V之间。*实际输出电压值经过LM324运放进行放大后从Aout端口输出。*由于DAC0832可以直接通过译码器选通因此没有在使用8255的扩展增加复杂度。3.4 输出波形的代号显示方案1:使用8255外扩输出端口,有与在8259A和DAC0832的数据输入端口上都使用了数据总线来传送数据,为了不在各个外设上产生信号的错乱,利用一片8255能够很好的解决问题。方案2:直接使用输出寄存器74LS273。原因是考虑到对于总线输出端口的分时复用,8259A和DAC0832的数据输入端口都需要你与CPU交换数据,若不使用8255A作为I/O扩展,就只能使用分时复用的方式。因此在各个外围器件间使用输出的寄存器必不可少,因此为了是数码管常量并能够输出正确的数值,那么采用一个74LS273,便可以达到要求。经过比较,觉得方案一使用8255来外扩的数据传送更方便,对输出的控制更方便,因为在程序中需要在按键之后的到某一种波形的同时,保持LED数码管长时间输出固定值,不受D0D7影响,因此才用8255的扩展方式方为上策。8255的CS端口连接在译码器的Y1端口,当按键被检测到以后,在程序中就选通8255,并将数据总线向上AD0AD7并行写入到8255寄存器,然后有8255直通的方式同时驱动数码管点亮。在8255的输出端口外部使用了74ls273的寄存器,可以起到驱动的作用是的数码管亮度达到要求。电路设计如下: *CLR是清零端,接到高电平,那么寄存始终都不会执行清零。只将上一次输入的数据锁存。这样能够在改变输出值一次之后,使得在一次按键选择之后,一直在输出被选中的波形序号。* 图中实际上是一个带小数点数码管,其原理同七段数码管。*8255才用方式0,只起到一个扩展和控制输出时间作用。 3.5总体电路图(包含有最大组态电路)五程序设计51程序设计思路1. 在主函数中进行循环等待按键中断的产生,若有中断进入中断服务程序,记录按键编号,然后返回主函数。2. 在主函数中对按键号码进行检测并调用对应的子函数产生相应的波形。3. 若再次按键则可以选择其他的波形进行输出。每有按键则持续输出当前波形。这里在主函数中进行循环。按键编码:IR0对应方波;IR1对应正向锯齿波;IR2对应负向锯齿波;IR3对应三角波;IR4对应阶梯形波;IR5对应者退出选择。4. 若在主函数中有按键5产生中断则直接推出主函数。5. 在波形产生函数中只产生相应的数字量改变,并将它输出到DAC0832的输入端口。DAC0832执行转换并将其输出。6. 在子函数只实现对应的数字量产生对应电压并将它送到DAC0832的输入端口。在子函数的开头向LED数码管送入当前波形的序号。5.2程序流程图开始主函数流程:对8255,8259初始化,并将终端函数写入中断向量表JMP$等待中断 无中断 有中断 比较BL是否为04或是5 BL为04 调用对应的子函数,产生波形,并送LED数码管 有按键 BL为5 无按键是否有中断按键输出结束提示结束三角波形子函数:AL开始递增 否是否等于FF递减 否是否等于0 是完成一个周期产生,返回主函数5.3 程序代码STACK SEGMENT STACKDW 32 DUP(0)STACK ENDSDATA SEGMENT DA1 DBPlease input the number of wave shape,$ DA2DB The wave has been generated,$ DA3DBYou choose to qiut,$DATA ENDSCODE SEGMENT ;-主函数程序段- MAIN PROC FAR ;主程序段 ASSUME SS:STACK,CS:CODE,DS:DATA PUSH DS SUB AX,AX PUSH AX ;ICW1 MOV AL,13H ;00010011D单片,边沿触发,设置ICW4 MOV DX,380H OUT DX,AL ;ICW2 MOV DX,88H ;中断类型码88H-8FH MOV DX,381H OUT DX,AL ;ICW4 MOV AL,0DH ;设置全嵌套,缓冲非自动结束中断方式 MOV DX,381H OUT DX,AL ;OCW1 MOV AL,0D0H ;设置IR0-IR5中断有效 MOV DX,381H OUT DX,AL ;8255方式控制字 MOV AX,80H ;设置A口方式1,输出 MOV DX,38BH OUT DX,AX ;装入IR0中断服务程序地址 MOV AX,SEG INTER0 MOV DS,AX MOV DX,OFFSET INTER0 MOV AX,2588H ;调用25好系统功能,类型码88H INT 21H ;装入IR1中断服务程序地址 MOV AX,SEG INTER1 MOV DS,AX MOV DX,OFFSET INTER1 MOV AX,2589H ;调用25好系统功能,类型码89H INT 21H ;装入IR2中断服务程序地址 MOV AX,SEG INTER2 MOV DS,AX MOV DX,OFFSET INTER2 MOV AX,258AH ;调用25好系统功能,类型码8AH INT 21H ;装入IR3中断服务程序地址 MOV AX,SEG INTER3 MOV DS,AX MOV DX,OFFSET INTER3 MOV AX,258BH ;调用25好系统功能,类型码8BH INT 21H ;装入IR4中断服务程序地址 MOV AX,SEG INTER4 MOV DS,AX MOV DX,OFFSET INTER4 MOV AX,258CH ;调用25好系统功能,类型码8CH INT 21H ;装入IR5中断服务程序地址 MOV AX,SEG INTER5 MOV DS,AX MOV DX,OFFSET INTER5 MOV AX,258DH ;调用25好系统功能,类型码8DH INT 21H MOV DX,DATA MOV DS,AX MOV DX,OFFSET DA1 MOV AH,9 INT 21H JMP $L1:CMP BL,0JE BO0 ;按键0,输出方波CMP BL,1JE BO1 ;按键1,输出正向锯齿波CMP BL,2JE BO2 ;按键2,输出负向锯齿波CMP BL,3JE BO3 ;按键3,输出三角波CMP BL,4JE BO4 ;按键4,输出阶梯波CMP BL,5JE BO5 ;按键5,输出发生器JMP L2 ;若没有按键5,则继续输出循环L2:MOV DX,OFFSET DA3MOV AH,9INT 21H ;显示退出提示字符 RET MAIN ENDP ;-中断服务程序0- INTER0 PROC FAR ;IR0中断子程序 MOV BL,0 ;写入按键号码 MOV AL,20H ;中断结束命令 OUT 20H,AL IRET INTER0 endp;-中断服务程序1- INTER1 PROC FAR ;IR1中断子程序 MOV BL,1 ;写入按键号码 MOV AL,20H ;中断结束命令 OUT 20H,AL IRET INTER1 endp ;-中断服务程序2- INTER2 PROC FAR ;IR2中断子程序 MOV BL,2 ;写入按键号码 MOV AL,20H ;中断结束命令 OUT 20H,AL IRET INTER2 endp;-中断服务程序3- INTER3 PROC FAR ;IR3中断子程序 MOV BL,3 ;写入按键号码 MOV AL,20H ;中断结束命令 OUT 20H,AL IRET INTER3 endp;-中断服务程序4- INTER4 PROC FAR ;IR4中断子程序 MOV BL,4 ;写入按键号码 MOV AL,20H ;中断结束命令 OUT 20H,AL IRET INTER4 endp;-中断服务程序5- INTER5 PROC FAR ;IR5中断子程序 MOV BL,5 ;写入按键号码 MOV AL,20H ;中断结束命令 OUT 20H,AL IRET INTER5 endp;-延时函数-DELAY PROC FAR ;延时函数 PUSH AX LL:MOV AX,0FA0H ;当CX循环一次1ms DEC AX LOOP LLPOP AX DELAY endp;-方波产生函数- BO0 PROC FAR ;方波发生子函数 MOV AL,0 MOV DX,388H ;8255片选地址 OUT DX,ALMOV CX,5 ;延时5ms MOV AL,0FFH ;设置数字量FF MOV DX,384H OUT DX,AL ;D/A输出高电平 MOV CX,5 ;延时5ms CALL DELAY MOV CX,5 MOV AL,0 ;设置数字量0 MOV DX,384H OUT DX,AL ;D/A输出低电平 CALL DELAY ret BO0 endp;- 正向锯齿波产生函数- BO1 PROC FAR ;正向锯齿波子函数 MOV AL,1 MOV DX,388H ;8255片选地址,8255直通 OUT DX,AL ;输出按键号码 MOV AL,0 B1:MOV DX,384H ;DAC片选地址 OUT DX,AL INC AL ;数字量递加 LOOP $ CMP AL,0 ;是否完成一个周期 JNE B1 ret BO1 endp;- 负向锯齿波产生函数- BO2 PROC FAR ;负向锯齿波子函数 MOV AL,2 MOV DX,388H ;8255片选地址,8255直通 OUT DX,AL ;输出按键号码 MOV AL,0FFH B2:MOV DX,384H ;DAC片选地址 OUT DX,AL DEC AL ;将数字量递减 LOOP $ CMP AL,0FFH ;是否完成一个周期 JNE B2 BO2 endp;-三角波产生函数- BO3 PROC FAR ;三角波输出子函数 MOV AL,3 MOV DX,388H ;8255片选地址 OUT DX,AL ;输出按键号码,8255直通 MOV AL,0 B1:MOV DX,384H ;DAC片选地址 OUT DX,AL INC AL ;正向波形输出 LOOP $ ;最大65536次循环 CMP AL,0FFH ;是否已经上升到自大 JNE B1 B11:DEC AL MOV DX,384H OUT DX,AL DEC AL ;接着输出负向波形LOOP $ ;最大65536次循环CMP AL,0 ;是否完成一个周期JNE B11 ret BO3 endp;-阶梯波产生函数- BO4 PROC FAR ;阶梯波输出子函数 MOV AL,4 MOV DX,388H ;8255片选地址 OUT DX,AL ;输出按键号码,8255直通 MOV AL,0 B4:MOV DX,384H ;DAC片选地址 OUT DX,AL ADD AL,33H ;每次加51,相当于增加1VMOV CX,5CALL DELAY CMP AL,0FFH ;是否完成一个周期 JNE B4 ret BO4 endp;-退出主函数- BO5 PROC FAR ;退出子程序 MOV AL,5 MOV DX,388H ;8255片选地址 OUT DX,AL ;输出按键号码,8255直通 ret BO5 endp code ends end main六心得体会这次课程设计选择了函数波形发生器设计这个题目,因为这个题目既包含了硬件设计也包含有软件的设计。在这学期微机原理、汇编与接口技术这门课程的学习中间,我不仅是学习了汇编语言者这项工具,也学习了80x86中对应的最小系统、接口电路、外围设备扩展等等,因此只有在做课程设计的时候将软件和硬件相结合,才能从中找到微机原理在现实中实现和应用方法。故选择做发生器这个题目。在这个题目中间我使用了最大系统组态的方式来构建整个CPU系统。本身也可以采取最小组态的方式,利用多余的地址总线来进行对外设芯片的直接选通,后来考虑到使用最大组态具有更强大的功能,也可以学习到80x86对于总线的时分复用技术。80x86本身的20根地址总线实际上其A0A7是与D0D7复用的,这点从80x86的外部引脚命名上面就可以看出来。它的引脚命名为AD0AD7即让它同时具有地址与数据线两种功能。而这些功能的想实现则是通过外部74LS373寄存器来实现的。之后设计8259A的按键中断的方式来产生波形发行发生的请求,IR0IR4依次对应着5种不同的波形类型,为了与实际应用相接轨,设计了一个退出键,5号键。在波形的产生方面,开始设想过要产生正弦波信号,因为这个在实际中使用的较多,后来发现产生正弦波信号的方法无外乎两类,事先给定正弦波行给点对应的数字量,然后让DAC0832按照数字量进行转换。这种方式类似于采样,即数字信号离散化的逆过程。但需要设置很多的数字量才得达到一个平滑的波形。这十个相当冗长的过程利用现有资源来实现有点麻烦,小题大做。另外的方法可以使用公式方法来求,但是计算的过程过于麻烦。在汇编的条件下实现工程量大。最后没有做出来。然后是显示模块,最开始是利用一个寄存器值直接与CPU的输出相连接。这样的话由于在主函数DAC0832还有8259A都有可能与CPUA交换数据,那么LED数码管的现实就会随着按键的变化而变化不能达到题目要求。故随后采用了8255的方式,这里8255采用最简单的直通方式,当CPU选中了8255的CS端并向它线数据的时候,8255才可以接受到CPU的数据,而不会随着AD0

温馨提示

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

评论

0/150

提交评论