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

下载本文档

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

文档简介

1、目录摘要11设计任务及要求21.1初始条件21.2要求完成的主要任务22总设计方案说明32.1设计思路32.2程序设计及程序实现的功能3373程序的调试84小结与体会11参考文献12附录13摘要 微机原理与接口技术作为计算机科学领域的基础知识,尽管计算机科学高速发展,但基本原理依然不变,学习并能掌握好微机原理与接口技术这门知识是非常重要的,通过对这门知识的了解可以简单的编写一些日常生活中经典的控制程序。本课程设计主要是通过应用MF2KI软件和Masm编程,使得在界面上显示出各种具有一定精度的曲线波形,如三角波,正弦和余弦波,主要是针对显示程序的设计和应用及bios的调用。关键词:微机原理 MF

2、2KI Masm 曲线 波形 bios显示任意波形曲线1设计任务及要求1.1初始条件将要显示的曲线事先算好,存储于变量里,可利用查表法或其它方法算出曲线的值,并将曲线在屏幕显示出来,注意数据的精度。1.2要求完成的主要任务1要求能从键盘接受显示曲线的操作状态,如显示,停止,继续显示等功能。2能通过按键选择不同的曲线显示,如正弦,余弦,三角波形等任意曲线。3能通过按键改变显示曲线的幅度及相位。2总设计方案说明2.1设计思路 根据设计题要求,在屏幕上显示任意波形,该设计实现三个波形的显示,正弦波、余弦波和三角波,曲线由离散的点组成,先用matlab对曲线取点,根据比例存入变量中,用命令将屏幕设成6

3、40*480,用命令将所选点的颜色设计成与背景颜色不同的颜色即可将点组成的曲线在屏幕上显示出来。同时用不同的按键输入实现曲线的的选择,暂停,继续,退出及曲线相位和幅度的变化。2.2程序设计及程序实现的功能 主程序流程图如下图所示:图2-1 总程序流程图 主程序的编写如下:(具体程序看附录) start: mov ax,data mov ds,ax mov ah,0 mov al,12h int 10h input: lea dx,info1;输出字符串 mov ah,9 int 21h mov ah,08;读键盘字符 int 21h cmp al,'s'是否是s jz san

4、cmp al,'z'是否是z jz zheng cmp al,'y'是否是y jz yu cmp al,'q'是否是q jz exit cmp al,'Q'是否是Q jz exit mov dx,offset info2;输出字符 mov ah,09 int 21h jmp input san: call sanjiaobo jmp input zheng: call zhengxian jmp input yu: call yuxian jmp input exit: mov ah,4ch int 21h ;子程序的编写 end

5、 start 波形子程序的流程图如下图所示:图2-2 三角波子程序流程图(“按提示输入”接总程序) 三角波的子程序编写如下:(其中调用具体子程序见附录) sanjiaobo proc near mov ax,data mov ds,ax mov ax,stacks mov ss,ax setscreen call zuobiao call main1 key_right: mov ah,0h int 16h mov bl,al mov al,ah ;取扫描码 cmp al,4dh ;是否为向右键 jne key_left call clear1 add hoffset,2 cmp hoffse

6、t,140 jge wait0 call zuobiao call main1 jmp key_right wait0: mov hoffset,139 ;遇到右边界时在该处一直画 call zuobiao call main1 jmp key_right key_left: cmp al,4bh ;是否为向左键 jne key_up call clear1 sub hoffset,2 cmp hoffset,-140 jle wait1 call zuobiao call main1 jmp key_right wait1: mov hoffset,-140 call zuobiao cal

7、l main1 jmp key_right key_up: cmp al,48h ; 是否为向上键 jne key_down call clear1 add voffset,1 cmp voffset,60 jge wait2 call zuobiao call main1 jmp key_right wait2: mov voffset,60 call zuobiao call main1 jmp key_right key_down: cmp al,50h ;是否为向下键 jne wait4 call zuobiao call clear1 sub voffset,1 cmp voffse

8、t,0 jle wait3 call zuobiao call main1 trsfer: jmp key_right wait3: mov voffset,0 call zuobiao call main1 jmp key_right wait4: mov al,bl cmp al,1bh jne trsfer jmp input retsanjiaobo endp 正弦波,余弦波子程序的编写与之相类似。(1) 运行程序后,按提示输入y,z,s分别选择余弦波,正弦波,三角波在屏幕上显示;(2) 按和键可以左右任意改变相位,按和可以上下任意改变幅度;(3) 按Esc键可以重新进行波形选择,可以

9、按“q”或“Q”退出程序。3程序的调试 运行程序,从键盘输入s(三角波)得如下图形:图3-1 三角波按下键,改变三角波的幅度和相位得如下图形:图3-2 改变幅度和香味后的三角波 按Esc键暂停,再从键盘输入y(余弦波)得图形如下图所示: 图3-3 余弦波 按下键,改变余弦波的幅度和相位得如下图形:图3-4 改变相位和幅度后的余弦波 按Esc键暂停,再从键盘输入z(正弦波)得图形如下图所示:图3-5 正弦波 按下键,改变正弦波的幅度和相位得如下图形: 图3-6 改变相位和幅度后的正弦波按Esc键暂停后,再输入“q”或“Q”可退出程序。4小结与体会 通过将近两周的微机原理课程设计,我进一步了解了微

10、机的指令系统和微机的汇编程序。在刚开始编程的时候,我几乎无从下手,不知道怎样去设计从键盘输入、怎样显示输出,怎么将数据在ASCII码与十六进制数之间相互转换,怎么通过汇编绘制条形图等。向同学请教,学到了很多,最后找老师要了参考程序,自己进行了完善,收获良多。 在编程的过程中,我学到了很多平时学不到、也想不到的地方。之前的微机原理及接口技术的学习,我只是对汇编语言有了一些初步的了解,以及一些初步编程的方法,而这将近两周的课程设计,让我对编程知识有了更深层次的了解,以前上课学都是一些枯燥的东西,感觉没多大用处,但是通过课程设计把所学的东西用在了实践上,设计出来一些有用的东西,尽管有好多次总是运行不

11、了,找来找去总是是一些小小的错误,但最终毕竟成功了,同时,提高了自己的思维能力和细心。而且,通过此次课程设计,我更加深深地感到自己上机编程能力很不足,编的程序可读性不太好。我会在以后的学习过程中,再接再厉,掌握汇编的方法和技巧。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在徐老师的辛勤指导下,终于游逆而解。掌握了一些编程的一些基本技巧,比如子程序的编写与调用,bios中断的调用,在此之间,虽然我遇到了这样或那样的问题,但经过自己的努力和不懈探求,最终克服了种种难关,在此谢谢帮助自己的同学和老师。参考文献【1】龚尚福.微机原理与接口技术.西安电子科技大学出版社,2003年【2】

12、宋杰等微机原理与接口技术课程设计机械工业出版社 ,2005年【3】陈希,蒋乐民.微机原理与接口技术. 北京邮电大学出版社,2006年【4】李芷.微机原理与接口技术.电子工业出版社,2002年【5】钱晓捷.汇编语言程序设计(第二版).电子工业出版社,2003年附录 程序清单如下: setscreen macro mov ah,0 mov al,12h int 10h endm data segment info1 db 0dh,0ah,'please choose the letter y(cos),s(treeangle),z(sin):' db 0dh,0ah,&#

13、39;input q/Q to quit','$' info2 db 0dh,0ah,'choose error!','$' sanjiao db 00,02,04,06,08,10,12,14,16,18,20,22 db 24,26,28,30,32,34,36,38,40,42,44,46 db 48,50,52,54,56,58,60,62,64,66,68,70 db 72,74,76,78,80,82,84,86,88,90,92,94 db 96,98,100,102,104,106,108,110,112,114,116,

14、118 db 120,122,124,126,128,130,132,134,136,138,140,142 db 144,146,148,150,152,154,156,158,160,162,164,166 db 168,170,172,174,176,178 cose db 200,200,200,200,199,199,199,198,198,197,196,196 db 195,194,193,192,191,190,189,188,187,185,184,183 db 181,180,178,177,175,173,171,170,168,166,164,162 db 160,15

15、8,155,153,151,149,146,144,141,139,136,134 db 131,129,126,123,120,118,115,112,109,106,103,100 db 97,94,91,88,85,81,78,75,72,68,65,62 db 58,55,52,48,45,42,38,35,31,28,24,21 db 17,14,10,07,04,00 sine db 00,03,07,10,14,17,21,24,28,31,35,38 db 42,45,48,52,55,58,62,65,68,72,75,78 db 81,85,88,91,94,97,100,

16、103,106,109,112,115 db 118,120,123,126,129,131,134,136,139,141,144,146 db 149,151,153,155,158,160,162,164,166,168,170,171 db 173,175,177,178,180,181,183,184,185,187,188,189 db 190,191,192,193,194,195,196,196,197,198,198,199 db 199,199,200,200,200,200 angle dw 0 temp dw 0 hoffset dw 0 voffset dw 50 c

17、ount dw 50 d3 dw 0 data ends stacks segment db 64 dup(?) stacks ends code segment assume cs:code,ds:data,ss:stacks start: mov ax,data mov ds,ax mov ah,0 mov al,12h int 10h input: lea dx,info1;输出字符串 mov ah,9 int 21h mov ah,08;读键盘字符 int 21h cmp al,'s'是否是s jz san cmp al,'z'是否是z jz zheng

18、 cmp al,'y'是否是y jz yu cmp al,'q'是否是q jz exit cmp al,'Q'是否是Q jz exit mov dx,offset info2;输出字符 mov ah,09 int 21h jmp input san: call sanjiaobo jmp input zheng: call zhengxian jmp input yu: call yuxian jmp input exit: mov ah,4ch int 21h sanjiaobo proc near mov ax,data mov ds,ax

19、mov ax,stacks mov ss,ax setscreen call zuobiao call main1 key_right: mov ah,0h int 16h mov bl,al mov al,ah ;取扫描码 cmp al,4dh ;是否为向右键 jne key_left call clear1 add hoffset,2 cmp hoffset,140 jge wait0 call zuobiao call main1 jmp key_right wait0: mov hoffset,139 ;遇到右边界时在该处一直画 call zuobiao call main1 jmp

20、key_right key_left: cmp al,4bh ;是否为向左键 jne key_up call clear1 sub hoffset,2 cmp hoffset,-140 jle wait1 call zuobiao call main1 jmp key_right wait1: mov hoffset,-140 call zuobiao call main1 jmp key_right key_up: cmp al,48h ; 是否为向上键 jne key_down call clear1 add voffset,1 cmp voffset,60 jge wait2 call

21、zuobiao call main1 jmp key_right wait2: mov voffset,60 call zuobiao call main1 jmp key_right key_down: cmp al,50h ;是否为向下键 jne wait4 call zuobiao call clear1 sub voffset,1 cmp voffset,0 jle wait3 call zuobiao call main1 trsfer: jmp key_right wait3: mov voffset,0 call zuobiao call main1 jmp key_right

22、wait4: mov al,bl cmp al,1bh jne trsfer jmp input ret sanjiaobo endp clear1 proc push ds ;保护现场 push ax push bx push cx push dx;查表确定三角波函数值,逐点绘制三角波 mov angle,0 again : lea bx,sanjiao mov ax,angle cmp ax,180 jl wanglong1 sub ax,180 wanglong1: cmp ax,90 jl wanglong2 ;小于等于转移 je wanglong22 ;ZF标志为1,则转移 neg

23、ax ;NEG是求反指令 add ax,181 wanglong22: sub ax,1 wanglong2: mov bx,ax mov al,sanjiaobx cwd imul voffset idiv count push ax mov ah,0 cmp angle,180 neg al add al,240 jmp ok ok: mov temp,ax pop ax mov ah,0ch ;画点 mov al,00h mov cx,angle add cx,140 add cx,hoffset mov dx,temp int 10h add angle,1 cmp angle,360

24、 jle again pop dx ;恢复现场 pop cx pop bx pop ax pop ds ret clear1 endp ;画曲线子函数 main1 proc push ds push ax push bx push cx push dx ;查表确三角波函数值,逐点绘制三角波 mov angle,0 again1: lea bx,sanjiao mov ax,angle cmp ax,180 jl wang sub ax,180 wang: cmp ax,90 jl long je long1 neg ax add ax,181 long1: sub ax,1 long: mov

25、 bx,ax mov al,sanjiaobx cwd ;缩放 imul voffset idiv count push ax mov ah,0 cmp angle,180 neg al add al,240 jmp wanglong wanglong: mov temp,ax pop ax mov ah,0ch ;画点 mov al,09h mov cx,angle add cx,140 add cx,hoffset mov dx,temp int 10h add angle,1 cmp angle,360 jle again1 pop dx pop cx pop bx pop ax pop

26、 ds ret main1 endp zhengxian proc near mov ax,data mov ds,ax mov ax,stacks mov ss,ax setscreen call zuobiao call smain skey_right: mov ah,0h int 16h mov bl,al mov al,ah ;取扫描码 cmp al,4dh ;是否为向右键 jne skey_left call sclear add hoffset,2 cmp hoffset,140 jge swait0 call zuobiao call smain jmp skey_right

27、swait0: mov hoffset,139 ;遇到右边界时在该处一直画 call smain jmp skey_right skey_left: cmp al,4bh ;是否为向左键 jne skey_up call sclear sub hoffset,2 cmp hoffset,-140 jle swait1 call zuobiao call smain jmp skey_right swait1: mov hoffset,-140 call zuobiao call smain jmp skey_right skey_up: cmp al,48h ; 是否为向上键 jne skey

28、_down call sclear add voffset,1 cmp voffset,60 jge swait2 call zuobiao call smain jmp skey_right swait2: mov voffset,60 call zuobiao call smain jmp skey_right skey_down: cmp al,50h ;是否为向下键 jne swait4 call sclear sub voffset,1 cmp voffset,0 jle swait3 call zuobiao call smain strsfer: jmp skey_right swait3: mov voffset,0 call zuobiao call smain jmp skey_right swait4: mov al,bl cmp al,1bh jne strsfer jmp inpu

温馨提示

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

评论

0/150

提交评论