微机原理课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
--显示任意波形曲线
武汉理工大学《微机原理与接口技术》课程设计
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
书
目录
摘要 ........................................................................................................................................... 1
1设计任务及要求 ..................................................................................................................... 2
1.1初始条件 ....................................................................................................................... 2
1.2要求完成的主要任务 .................................................................................................... 2 2总设计方案说明 ..................................................................................................................... 3
2.1设计思路 ....................................................................................................................... 3
2.2程序设计及程序实现的功能 ........................................................................................ 3
2.2.1程序设计 ............................................................................................................. 3
2.2.2总程序实现的功能 .............................................................................................. 7 3程序的调试 ............................................................................................................................. 8
4小结与体会 ........................................................................................................................... 11
参考文献 ................................................................................................................................. 12
附录 ......................................................................................................................................... 13
武汉理工大学《微机原理与接口技术》课程设计说明书
摘要
微机原理与接口技术作为计算机科学领域的基础知识,尽管计算机科学高速发展,但基本原理依然不变,学习并能掌握好微机原理与接口技术这门知识是非常重要的,通过对这门知识的了解可以简单的编写一些日常生活中经典的控制程序。
本课程设计主要是通过应用MF2KI软件和Masm编程,使得在界面上显示出各种具有一定精度的曲线波形,如三角波,正弦和余弦波,主要是针对显示程序的设计和应用及bios的调用。
关键词:微机原理 MF2KI Masm 曲线 波形 bios
1
武汉理工大学《微机原理与接口技术》课程设计说明书
显示任意波形曲线 1设计任务及要求
1.1初始条件
将要显示的曲线事先算好,存储于变量里,可利用查表法或其它方法算出曲线的值,并将曲线在屏幕显示出来,注意数据的精度。
1.2要求完成的主要任务
1(要求能从键盘接受显示曲线的操作状态,如显示,停止,继续显示等功能。 2(能通过按键选择不同的曲线显示,如正弦,余弦,三角波形等任意曲线。 3(能通过按键改变显示曲线的幅度及相位。
2
武汉理工大学《微机原理与接口技术》课程设计说明书
2总设计方案说明
2.1设计思路
根据设计题要求,在屏幕上显示任意波形,该设计实现三个波形的显示,正弦波、余弦波和三角波,曲线由离散的点组成,先用matlab对曲线取点,根据比例存入变量中,用命令将屏幕设成640*480,用命令将所选点的颜色设计成与背景颜色不同的颜色即可将点组成的曲线在屏幕上显示出来。同时用不同的按键输入实现曲线的的选择,暂停,继续,退出及曲线相位和幅度的变化。
2.2程序设计及程序实现的功能
2.2.1程序设计
主程序流程图如下图所示:
开始
是判断是否退出结束
否
按提示输入
y(余弦波)/z(正弦波)/s(三角波)
显示
改变幅度、相位
执行
否是判断是否暂停
图2-1 总程序流程图
3
武汉理工大学《微机原理与接口技术》课程设计说明书
主程序的编写如下:(具体程序看附录)
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
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 start
4
武汉理工大学《微机原理与接口技术》课程设计说明书
波形子程序的流程图如下图所示:
开始
按提示输入显示
是否改变幅度、相位
判断al是否等于1bh,显示即是否输入Esc键
图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 hoffset,140
jge wait0
call zuobiao
call main1
jmp key_right
5
武汉理工大学《微机原理与接口技术》课程设计说明书
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
call 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
6
武汉理工大学《微机原理与接口技术》课程设计说明书
cmp voffset,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
ret
sanjiaobo endp
正弦波,余弦波子程序的编写与之相类似。
2.2.2总程序实现的功能
(1)运行程序后,按提示输入y,z,s分别选择余弦波,正弦波,三角波在屏幕上显示; (2)按和键可以左右任意改变相位,按和可以上下任意改变幅度; “,”“,”“,”“,”
(3)按Esc键可以重新进行波形选择,可以按“q”或“Q”退出程序。
7
武汉理工大学《微机原理与接口技术》课程设计说明书 3程序的调试
运行程序,从键盘输入s(三角波)得如下图形:
图3-1 三角波
按下键,改变三角波的幅度和相位得如下图形: “,”和“,”
图3-2 改变幅度和香味后的三角波
8
武汉理工大学《微机原理与接口技术》课程设计说明书
按Esc键暂停,再从键盘输入y(余弦波)得图形如下图所示:
图3-3 余弦波
按下键,改变余弦波的幅度和相位得如下图形: “,”和“,”
图3-4 改变相位和幅度后的余弦波
9
武汉理工大学《微机原理与接口技术》课程设计说明书
按Esc键暂停,再从键盘输入z(正弦波)得图形如下图所示:
图3-5 正弦波
按下键,改变正弦波的幅度和相位得如下图形: “,”和“,”
图3-6 改变相位和幅度后的正弦波
按Esc键暂停后,再输入“q”或“Q”可退出程序。
10
武汉理工大学《微机原理与接口技术》课程设计说明书
4小结与体会
通过将近两周的微机原理课程设计,我进一步了解了微机的指令系统和微机的汇编程序。在刚开始编程的时候,我几乎无从下手,不知道怎样去设计从键盘输入、怎样显示输出,怎么将数据在ASCII码与十六进制数之间相互转换,怎么通过汇编绘制条形图等。向同学请教,学到了很多,最后找老师要了参考程序,自己进行了完善,收获良多。
在编程的过程中,我学到了很多平时学不到、也想不到的地方。之前的《微机原理及接口技术》的学习,我只是对汇编语言有了一些初步的了解,以及一些初步编程的方法,而这将近两周的课程设计,让我对编程知识有了更深层次的了解,以前上课学都是一些枯燥的东西,感觉没多大用处,但是通过课程设计把所学的东西用在了实践上,设计出来一些有用的东西,尽管有好多次总是运行不了,找来找去总是是一些小小的错误,但最终毕竟成功了,同时,提高了自己的思维能力和细心。而且,通过此次课程设计,我更加深深地感到自己上机编程能力很不足,编的程序可读性不太好。我会在以后的学习过程中,再接再厉,掌握汇编的方法和技巧。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在徐老师的辛勤指导下,终于游逆而解。掌握了一些编程的一些基本技巧,比如子程序的编写与调用,bios中断的调用,在此之间,虽然我遇到了这样或那样的问题,但经过自己的努力和不懈探求,最终克服了种种难关,在此谢谢帮助自己的同学和老师。
11
武汉理工大学《微机原理与接口技术》课程设计说明书
参考文献
【1】龚尚福.《微机原理与接口技术》.西安电子科技大学出版社,2003年 【2】宋杰等(《微机原理与接口技术课程设计》(机械工业出版社 ,2005年 【3】陈希,蒋乐民.《微机原理与接口技术》. 北京邮电大学出版社,2006年 【4】李芷.《微机原理与接口技术》.电子工业出版社,2002年 【5】钱晓捷.《汇编语言程序设计》(第二版).电子工业出版社,2003年
12
武汉理工大学《微机原理与接口技术》课程设计说明书
附录
程序清单如下:
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,'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,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,158,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,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
13
武汉理工大学《微机原理与接口技术》课程设计说明书
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
count 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
cmp al,'y';是否是y
jz yu
cmp al,'q';是否是q
jz exit
cmp al,'Q';是否是Q
jz exit
14
武汉理工大学《微机原理与接口技术》课程设计说明书
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
mov ax,stacks
mov ss,ax
setscreen
all zuobiao c
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
15
武汉理工大学《微机原理与接口技术》课程设计说明书
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
call 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
16
武汉理工大学《微机原理与接口技术》课程设计说明书
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
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
;查表确定三角波
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
值,逐点绘制三角波
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,则转移
17
武汉理工大学《微机原理与接口技术》课程设计说明书
neg ax ;NEG是求反指令
add ax,181
wanglong22: sub ax,1
wanglong2: mov bx,ax
mov al,sanjiao[bx]
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
jle again
pop dx ;恢复现场
pop cx
pop bx
pop ax
pop ds
ret
clear1 endp
;画曲线子函数
18
武汉理工大学《微机原理与接口技术》课程设计说明书
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 bx,ax
mov al,sanjiao[bx]
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
19
武汉理工大学《微机原理与接口技术》课程设计说明书
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 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
20
武汉理工大学《微机原理与接口技术》课程设计说明书
jmp skey_right
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_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
21
武汉理工大学《微机原理与接口技术》课程设计说明书
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 input
ret
zhengxian endp
sclear proc
push ds
push ax
push bx
;查表确定正弦波函数值,逐点绘制正弦
mov angle,0
sagain1: lea bx,sine
mov ax,angle
cmp ax,180
jl snext1
sub ax,180
snext1: cmp ax,90
jl snext2
je snext22
neg ax
add ax,181
snext22: sub ax,1
snext2: mov bx,ax
mov al,sine[bx]
cwd
imul voffset
22
武汉理工大学《微机原理与接口技术》课程设计说明书
idiv count
push ax
mov ah,0
cmp angle,180
jge sbig
neg al
add al,240
jmp sok
sbig: add ax,240
sok: 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
jle sagain1
pop bx
pop ax
pop ds
ret
sclear endp
;画曲线子函数
smain proc
push ds
push ax
push bx ;查表确定正弦波函数值,逐点绘制正弦波
mov angle,0
sagain: lea bx,sine
mov ax,angle
23
武汉理工大学《微机原理与接口技术》课程设计说明书
cmp ax,180
jl squad1
sub ax,180
squad1: cmp ax,90
jl squad2
je squad22
neg ax
add ax,181
squad22: sub ax,1
squad2: mov bx,ax
mov al,sine[bx]
cwd ;缩放
imul voffset
idiv count
push ax
mov ah,0
cmp angle,180
jge sbigdis
neg al
add al,240
jmp sready
sbigdis: add ax,240
sready: mov temp,ax
pop ax
mov ah,0ch ;画点
mov al,0bh
mov cx,angle
add cx,140
add cx,hoffset
mov dx,temp
int 10h
add angle,1
cmp angle,360
jle sagain
pop bx
24
武汉理工大学《微机原理与接口技术》课程设计说明书
pop ax
pop ds
ret
smain endp
yuxian proc near
mov ax,data
mov ds,ax
mov ax,stacks
mov ss,ax
setscreen
call zuobiao
call cmain
ckey_right: mov ah,0h
int 16h
mov bl,al
mov al,ah ;取扫描码
cmp al,4dh ;是否为向右键
jne ckey_left
call cclear
add hoffset,2
cmp hoffset,140
jge cwait0
call zuobiao
call cmain
jmp ckey_right
cwait0: mov hoffset,139 ;遇到右边界时在该处一直画
call zuobiao
call cmain
jmp ckey_right
ckey_left: cmp al,4bh ;是否为向左键
jne ckey_up
call cclear
sub hoffset,2
cmp hoffset,-140
jle cwait1
25
武汉理工大学《微机原理与接口技术》课程设计说明书
call zuobiao
call cmain
jmp ckey_right
cwait1: mov hoffset,-140
call cmain
jmp ckey_right
ckey_up: cmp al,48h ; 是否为向上键
jne ckey_down
call cclear
add voffset,1
cmp voffset,60
jge cwait2
call zuobiao
call cmain
jmp ckey_right
cwait2: mov voffset,60
call zuobiao
call cmain
jmp ckey_right
ckey_down: cmp al,50h ;是否为向下键
jne cwait4
call cclear
sub voffset,1
cmp voffset,0
jle cwait3
call zuobiao
call cmain
ctrsfer: jmp ckey_right
cwait3: mov voffset,0
call zuobiao
call cmain
jmp ckey_right
cwait4: mov al,bl
cmp al,1bh
jne ctrsfer
26
武汉理工大学《微机原理与接口技术》课程设计说明书
jmp input
ret
yuxian endp
cclear proc
push ds
push ax
push bx
;查表确定余弦波函数值,逐点绘制余弦
mov angle,0
cagain1: lea bx,cose
mov ax,angle
cmp ax,180
jl cnext1
sub ax,180
cnext1: cmp ax,90
jl cnext2
je cnext22
neg ax
add ax,181
cnext22: sub ax,1
cnext2: mov bx,ax
mov al,cose[bx]
cwd
imul voffset
idiv count
push ax
mov ah,0
cmp angle,90
jge cbig
cnext3: neg al
add al,240
jmp cok
cbig: cmp angle,270
jge cnext3
27
武汉理工大学《微机原理与接口技术》课程设计说明书
add ax,240
cok: 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
jle cagain1
pop bx
pop ax
pop ds
ret
cclear endp
;画曲线子函数
cmain proc
push ds
push ax
push bx
;查表确定余弦波函数值,逐点绘制余弦波
mov angle,0
cagain: lea bx,cose
mov ax,angle
cmp ax,180
jl cquad1
sub ax,180
cquad1: cmp ax,90
jl cquad2
je cquad22
28
武汉理工大学《微机原理与接口技术》课程设计说明书
neg ax
add ax,181
cquad22: sub ax,1
cquad2: mov bx,ax
mov al,cose[bx]
cwd ;缩放
imul voffset
idiv count
push ax
mov ah,0
cmp angle,90
jge cbigdis
cquad3: neg al
add al,240
jmp ready
cbigdis: cmp angle,270
jge cquad3
add ax,240
ready: mov temp,ax
pop ax
mov ah,0ch ;画点
mov al,0fh
mov cx,angle
add cx,140
add cx,hoffset
mov dx,temp
int 10h
add angle,1
cmp angle,360
jle cagain
pop bx
pop ax
pop ds
ret
cmain endp
29
武汉理工大学《微机原理与接口技术》课程设计说明书
zuobiao proc
mov ah,0
mov al,12h
int 10h
drawaxis1: ;画坐标轴
mov dx,240
mov cx,60
xaxis1: ;画X轴
mov ah,0ch
mov al,05h
int 10h
inc cx
cmp cx,600
jnz xaxis1
mov dx,20
mov cx,140
yaxis1: ;画Y轴
mov ah,0ch
mov al,05h
int 10h
inc dx
cmp dx,460
jnz yaxis1
mov dx,240
mov cx,600
arrow1_x1: ;画X轴箭头
mov ah,0ch
mov al,05h
int 10h
dec cx
dec dx
cmp cx,594
jnz arrow1_x1
mov dx,240
30
武汉理工大学《微机原理与接口技术》课程设计说明书
mov cx,600
arrow1_x2:
mov ah,0ch
mov al,05h
int 10h
dec cx
inc dx
cmp cx,594
jnz arrow1_x2
mov dx,20
mov cx,140
arrow1_y1: ;画Y轴箭头
mov ah,0ch
mov al,05h
int 10h
inc dx
dec cx
cmp dx,26
jnz arrow1_y1
mov dx,20
mov cx,140
arrow1_y2:
mov ah,0ch
mov al,05h
int 10h
inc dx
inc cx
cmp dx,26
jnz arrow1_y2
ret
zuobiao endp
code ends
end start
31