ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:112.10KB ,
资源ID:22362225      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22362225.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机实验综合课程设计Word文档下载推荐.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机实验综合课程设计Word文档下载推荐.docx

1、9之间,将输入的数减去30h,有ASCII码值变为相应的数字,再将此数乘以10后存入d。输入个位数字后,判断输入的数字是否小于0,大于9,若小于0或大于9,则重新输入。之间,将输入的数减去30h,有ASCII码值变为相应的数字,并将之存入e。 之后对c、d和e求和,从而得到a的值。同样的可以得到b的值。(2) 正弦波幅度的改变实验中所用的8位D/A转换器DAC0832的输入数据与输出电压的关系为: (表示参考电压,N表示输入数据)。产生正弦波是根据正弦函数建立一个正弦数字量表,取值范围为一个周期,此正弦数据表的输出幅度为5V。读取一个正弦数据表中的数据后,将此数据乘以a后再除以255,这样就相

2、当于将输出正弦波的幅度变为原来的a/255倍。(3) 正弦波频率的改变 正弦波频率的改变是通过改变读取正弦数据表中的两个相邻数据的时间间隔实现的。输入的数据b加上10表示应调用的延时子程序的次数,设延时子程序的延时时间为t,那么读取正弦数据表中的两个相邻数据的时间间隔为b*t。方案2 两个可调电位器输出通过AD 转换后作为可调参数先读正弦波数据的首地址和一周期取值数,然后按偏移值取出正弦波数据。启动ADC0809模/数转换器,读入IN0的值(IN0的值可以通过调节滑动变阻器1来实现),将取出的正弦波数据乘以此数据除以255,再将得到的数据赋值给DAC0832,调用延时子程序,之后将数据表偏移量

3、加一,一周期剩余取值数减一。判断一周期内取值是否结束,若没有结束则继续按偏移值取出正弦波数据,若结束则返回到读正弦波数据的首地址和一周期取值数。 三、方案论证与实现针对设计思路,我们用到的硬件资源有:、0832、8255、1个LED灯和1个逻辑电平开关、0809和2个电位器。各个硬件的主要作用和工作方式如下:1)0832 根据键盘输入或者电位器调节得到的参数a、b,改变正弦波形数据表的数据,将得到的新数据输出给DAC0832,用示波器观察双极性输出端Ub输出正弦波形。2)8255、1个LED灯与1个逻辑电平开关8255的C口接逻辑电平开关,作为输入,用来选择是否要输出标准正弦波形;A口接LED

4、灯,作为输出,用来显示此时输出波形是否为标准正弦波形。3)0809和2个电位器通过实验台的两个电位器输出05V电压分别送入ADC0809的通道0和1(IN0、IN1),通过A/D转换,得到参数a和b。;CS_AD-2A0H,CS_DA-298H;V1-IN0,V2-IN1,Ub-示波器;C0-K1(开关),A0-LED灯ioport equ 0EC00H-0280h ;TPC的io地址adcs equ ioport+2A0h ;CS_AD,ADC0809片选地址adcs1 equ ioport+2A1hdacs equ ioport+298h ;CS_DA,DAC0809片选地址io8255a

5、 equ ioport+288h ;8255A口地址 io8255b equ ioport+28bh ;8255控制寄存器端口地址io8255c equ ioport+28ah ;08255C口地四、设计思路及流程图原理设计清晰了我的设计思路,我将整个整个程序分为了五个部分,分别为主程序设计、参数调整子程序(键盘输入及电位器调节),调幅及调频子程序设计、正弦波输出子程序、延时子程序。1. 主程序设计:主要功能有1) 控制整个程序的流程及程序跳转;2) 通过检测开关的状态,判断输出标准正弦波还是当前a,b值所对应的波形;3) 判断参数调节的方式是键盘输入还是电位器调节。2参数调整程序设计:略。(

6、原理设计中已详细解释)3 调幅及调频子程序设计:注:需要输出标准正弦波时,将相应的a,b值修改,并保存之前的a,b值。4 正弦波输出子程序设计:正弦波输出子程序的主要功能有:1) 读取正弦波数据表的数据并利用数模转换显示;2) 每显示一次数据后需要调用延时子程序;3) 数据表偏移地址加1,读取下一数据,重复以上步骤。5 延时子程序设计:延时子程序的主要功能有:1) 通过b值的改变得到相应的第一层延时参数; 2)延时子程序内嵌套第二层延时程序;延时部分主要流程:延时程序涉及到嵌套延时,loop指令根据CX的值是否为0确定是否接着执行此指令,因而需要用到两次CX,且相互之间不能影响,因而先将外层C

7、X堆栈(b值不同则外层延时的CX不同),给内层CX赋值(1FFH,此值不能改变),执行lOOP指令,直到CX=0;然后将外层CX弹出减1后堆栈;接着执行内层延时,重复上述步骤,直到外层CX=0。4、编程实现1、主程序设计message1 db 0dh,0ah,0dh,0ah db PRESS 1 FOR SINWAVE MODIFIY WITH THE PC KEYBOARD.,0dh,0ah PRESS 2 FOR SINWAVE MODIFIY WITH THE VARIABLE RESISTANCE.,0DH,0AH PRESS 0 FOR QUIT TO DOS.,0DH,0AH,$

8、db 0dh,0ah message2 db 0dh,0ah,0dh,0ahSinwave f=a sin(b t) is modified by the PC keyboard .-Directly press A or B to view the parameter .-Input num(0-17)+A or(0-9) B to modify the parameter . db Input 0 quit to the begin,0dh,0ah, db 0dh,0ahmessage3 db 0dh,0ah,0dh,0ah Sin wave f=a sin(b t) modified b

9、y the variable resistance .Press anykey on the PC keyboard to return to the begin.message4 db 0dh,0ahplease input num! a db 1h ;可调参数a b db 1h ;可调参数b c db 1 ;c为百位数字f乘以100 d db d为十位数字g乘以10 e db e为个位数字h乘以1 f db 参数a的百位f g db 参数a的十位g h db 参数a的各位h i db i为百位数字l乘以100 j db j为十位数字m乘以10 k db k为个位数字n乘以1 l db 参数

10、b的百位l m db 参数b的十位m n db 参数b的各位ndata endsbegin: mov ax,data ;开机显示message1 mov ds,ax mov ax,stacks mov ss,ax lea dx,message1 mov ah,09h int 21hjudge1: mov dx,0ffh mov ah,07h int 21h cmp al,按下,则键盘输入 jz start cmp al,,则电位器调节 jz sinvr1 jnz begin ;不是,重新选择 jmp qit ;,则退出DOSsinvr1: jmp sinvrstart: lea dx,mess

11、age2 mov ah,09h2、参数调整程序设计(1)键盘输入l1: call sinout ;每次调用sinout,必须要有键盘输入,才会接着往下执行 mov dl,0ah mov ah,02h int 21h mov ah,08h int 21h a jnz ccc ;若不是a,跳转比较是否为b jmp ddd ;是a,则跳转到a处理代码ccc: jmp l2 ;ddd: mov dl,al ;输入是a,a处理代码 mov ah,02h int 21h mov dl,0ah int 21h ;输出回车 mov al,f ;输出a的百位f mov dl,al int 21h mov al,

12、g ;输出a的十位g mov al,h ;输出a的个位hggg: lea dx,message4 ;输出“请输入修改后a的参数值”. mov ah,09h mov ah,08h ;输入 int 21h cmp al, jb ggg cmp al, ja ggg mov f,al ;显示输入的百位f sub al,30h mov bl,64h mul bl mov c,al ; mov ah,08h mov g,al ;显示输入的十位g mov dl,al mov bl,0ah mov d,al ; mov h,al ;显示输入的个位h mov bl,01h mov e,al ; mov al,

13、e add al,d ;求和 add al,c cmp al,0ffh ;若输入数字大于255则重新输入 mov a,al ;将最终输入得到的值赋给参数a jmp l1 ;得到a的数值后重新跳到输入界面, l2: cmp al,b jnz eee ;若不是a,b跳转比较是否为0 jmp fff eee: jmp l3 ;fff: . ;与输入a时主要思想一致,不再给出具体代码hhh: .l3:输入为零返回 jnz l4 ;若不是a,b,0,跳转到start重新等待键盘输入 jmp begin ;输入为0,返回上一级,即程序主界面的功能选择l4: jmp start ;(2)电位器调节参数sin

14、vr: lea dx,message3 ;使用电位器设置正弦波参数 lea dx,mess2 int 21h ;去掉返回功能sin1: call sinout lea dx,messab ;装入地址 mov ah,09h ;显示字符串 mov al,00h mov dx,adcs out dx,al in al,dx ;从A/D读入修改的幅度 CMP AL, JE ABAA1: mov a,al ;幅度存到a mov al,00h ;moomyu修改 mov dx,adcs1从A/D读入修改的频率 CMP AL, JE ABBB1: mov b,al ;频率存到b call sinout ;修

15、改幅度和频率后重新调用sinoutmov ah,08hint 21hjz sin1 jmp bg lea dx,message2 ; mov ah,09h ;q jnz sin1 jmp bgABA:inc al jmp A1ABB: jmp B14、正弦波输出设计正弦波数据表SIN DB 128D,135D,141D,148D,155D,161D,167D,174D,180D,186D DB 192D,198D,203D,209D,214D,219D,223D,227D,231D,235D DB 239D,242D,245D,248D,250D,252D,253D,254D,255D DB

16、255D,254D,253D,252D,250D,248D,245D,242D,239D DB 235D,231D,227D,223D,219D,214D,209D,203D,198D,192D DB 186D,180D,174D,167D,161D,155D,148D,141D,135D,128D DB 121D,115D,108D,101D, 95D, 89D, 82D, 76D, 70D DB 64D, 58D, 53D, 47D, 42D, 37D, 33D, 29D, 25D, 21D DB 17D, 14D, 11D, 08D, 06D, 04D, 03D, 02D, 01D, 0

17、0D DB 00D, 01D, 02D, 03D, 04D, 06D, 08D, 11D, 14D, 17D DB 21D, 25D, 29D, 33D, 37D, 42D, 47D, 53D, 58D, 64D DB 70D, 76D, 82D, 89D, 95D,101D,108D,115D,121Dsinout proc near ;输出正弦波 push ax push bx push cx push dx push si mov ax,1h sub cx,cx mov cl,b cmp cl,0 je S_OUT0 mov SI,0hjudge2: mov dx,io8255b ;设8

18、255为C口输入,A口输出 mov al,8bh out dx,al mov dx,io8255c ;从C口输入一数据 in al,dx mov dx,io8255a and al,00000001h mov ah,0 ;判断开关状态 mov c,al cmp c,1 jnz S_OUT2 jmp stadardS_OUT2: mov dl,0ffh ;幅度 mov ah,06h int 21h jnz S_END mov al,SINSI ;从正弦波数据表中取数据 mov bl,a cmp bl,0 mov ah,00h mov ah,00hmul bl ;乘以amov bl,255Ddiv

19、 bl ;除以255push cxneg cladd cl,10 ;b+10作为调用子程序的次数S_OUT1: call sin_delay1 ;频率loop S_OUT1 pop cxmov dx,dacsout dx,al ;输出数据到dac0832inc sicmp si,116 ;共116个数据 jne S_OUT2mov si,0hjmp S_OUT2S_END:pop SI pop dx pop cx pop bx pop ax ret S_OUT0:sub ax,ax mov dx,dacs out dx,al ;S_OUT0输出的是空信号,输出都为零 jmp S_END sin

20、out ENDPstadard: mov a,08h ;输出标准正弦波 mov b,01h call sinout jmp judge25、延时子程序设计sin_delay1 proc near push cx mov cx,0f00h loop $ pop cx retsin_delay1 endp五、方案测试与结果分析将程序运行,可以达到预期的效果。当用键盘输入调节参数时,正弦波形幅度可以从05V以每0.3V为间隔连续调节,频率调节明显,先键入参数名如“a”,显示当前参数值,修改后再键入参数名,则修改参数完成,随后输出波形会发生变化;以电位器调节参数时,幅度、频率变化比较明显;标准波形满足

21、2V,50Hz要求。在运行代码的过程中也遇到了一些问题,主要的问题及解决思路如下:1.堆栈问题问题描述:在延时程序嵌套子延时,用到两次CX值,为保存原始的CX,因而要进行三次堆栈及弹出,过程中发现堆栈和弹出的顺序错乱使得CX发生值的突变,使得延时环节发生错误。解决方法:主要在程序中随时将需要保护的寄存器内容推入堆栈进行保护,同时要注意先进先出,保证堆栈与出栈一一对应。2.频率调节某些情况无法实现b值大小与延时环节的时间t成反比,此时需要用到出发来决定延时程序最外层的CX值大小,即CX=T(程序中设定)b; 发现利用除法效果不明显,且因为除法较为复杂,不容易实现。利用NEG函数指令,对b求补,可以转化为乘法,及CX=T(NEG(b)+20H),可以满足b值越大,延时越小,但不能准确满足延时环节的时间t与b值大小的反比关系。实验表明,频率调节较为明显,基本上满足要求。六、改进与提高通过修改代码基本上实现了波形可调发生器的设计,包括基本功能和一部分扩展功能,但是通过实验,有很多需要改进的地方。1、一部分功能不够完善,例如在利用电位器调节参数时,幅度及频率不是实时改变的,只有改变电位器后,按ENTER键才可以看到变化。2、频率调节,对b值采用求补方法来确定延时时间,不能满足

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1