微机原理课程设计正文 电气0902高越.docx
《微机原理课程设计正文 电气0902高越.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计正文 电气0902高越.docx(37页珍藏版)》请在冰豆网上搜索。
微机原理课程设计正文电气0902高越
摘要
在我们日常生活中,以及一些科学研究中,三角波、正弦波、矩形波是常用的基本测试信号。
此外,如在示波器、电视机等仪器中,为了使电子按照一定规律运动,以利用荧光屏显示图像,常用到锯齿波产生器作为时基电路。
例如,要在示波器荧光屏上不失真地观察到被测信号波形,要求在水平偏转板加上随时间作线性变化的电压——锯齿波电压,使电子束沿水平方向匀速搜索荧光屏。
而电视机中显像管荧光屏上的光点,是靠磁场变化进行偏转的,所以需要要用锯齿波电流来控制,对于三角波,方波同样有这不可忽视的作用而函数发生器是指一般能自动产生方波正弦波三角波以及锯齿波阶梯波等电压波形的电路或仪器。
因此信号发生器是我们在学习,科学研究等方面不可缺少的工具。
关键词:
信号发生器,波形,显示
1.总体设计思路、基本原理和框图
1.1任务分析
任务要求可以显示正弦,方波和任意波形曲线,因此,根据题目要求设计一个程序可以显示正弦曲线,方波曲线,三角波。
由任务要求分析可知,所编的程序应该包括按键检测,波形获取,屏幕显示等几个部分。
波形曲线可以看成一个函数,屏幕是由一个个像素点组成,它可以看成一个笛卡尔坐标系,曲线的每一个点对应着一个横坐标,对应着一个纵坐标(函数值),不同的曲线有不同的函数,只要找到曲线上点的坐标(函数值)就可以绘制出不同的曲线,所以,问题的关键就在于如何获得并显示出不同波形曲线的函数值。
1.2总体设计思路
通过汇编语言产生三角波和正弦波,并控制波形的幅值和相位。
三角波要分两段来产生,但因它的上升斜坡和下降斜坡都是线性关系,所以只要由数字量的增减来控制就可以了,产生上升斜坡时让输出值从零开始逐渐递增;相反,产生下降斜坡时,让输出值从最大幅值逐渐递减。
而正弦波是三角函数关系,通常可以用以下两种方法产生:
(1)查表法:
该方法的优点是速度快,但在精度高的情况下要求的存储器容量也要增大。
此种方法应用在对精度要求不高的场合。
(2)泰勒级数展开法:
在某些时候这是一种比查表法更为有效的方法。
与查表法相比,这种方法需要的存储单元很少,而且精度高。
其泰勒级数展开式如下:
sin(x)=x(1-(1/6)*x^2*(1-(1/20)*x^2*(1-(1/42)*x^2*(1-(1/72)*x^2))))
由于时间的原因,本实验中采用查表法,造一张正弦数字量表,即查函数表得到的值转换成十六进制数填表。
D/A转换取值范围为一个周期,采样点越多,精度越高,本实验中采样点为256点/周期。
正弦数字量表中的值为参考值,对于不同幅值的正弦波可以通过把表中的每个值乘以相同的倍数得到,其频率由改变输出点之间的延时来实现。
方波,只需确定其极值,在第一时间段为正,在第二时间段为负,以此类推。
1.3程序流程图
1.3.1程序流程图
图1.1原理框图
1.3.2程序流程说明
程序从初始化开始,首先让指针指向提示信息一,即在屏幕上显示:
“1sin;2cos;3triangle;4clear;E/eexit;right/leftchangephase;up/downchangeamplitude”;
当有键按下后,如果键是1,则转向执行产生正弦波的程序;
如果键不是1,则看键是否为2。
如果键是2,则转向执行产生方波的程序;
如果键也不是2,则看是否为3。
如果是3,则转向执行产生三角波的程序;
如果也不是3,则看是否为4。
如果是4,则转向执行清屏的程序;
如果也不是4,则看是否为e或者E。
如果是e或者E,则转向执行结束程序。
以正弦波为例,当程序判断为按键1时,继续判断是否为“→”,“←”,“↑”,“↓”若为是则执行右移,左移,幅度变大,幅度减小。
其他波形同正弦波,这里不一一累述。
2.程序设计与实现
2.1编程环境介绍
本次课程设计使用的软件是MASMPlus,它是一个使用纯MASM编写的个人免费版编辑器。
MASMPlus代码辅助书写非常方便,函数原型参数突出显示,标志参数自动列出,全局搜索可以搜索整个工程,全部关键字列出,自动大小写支持全部关键字,结构类型变量成员列出,鼠标提示关键字信息,同时,输入与列出遵守一定的编程规则,不会误导使用者。
同时,MASMPlus支持插件开发。
MASMPlus是汇编的理想软件。
2.2设置屏幕显示方式
IBM-PC的标准显示适配器,一种是单色显示,它只能显示黑白字母、数字、符号和菱形等简单的图形字符,它是以文本方式工作的;另一种是彩色/图形适配器EGA和VGA,它能以文本和图形两种方式工作。
在彩色/图形适配器中把屏幕分成M*N个点阵,每个坐标上的图像元素就是一个像素。
通过调用BIOS中断int10h的0号功能可以设置屏幕的显示方式。
调用方式如下:
入口参数:
AH=0(功能号),AL=设置方式。
部分显示设置方式调用参数如表5-1。
出口参数:
无。
表5-1部分显示设置方式表
调用参数AL
显示方式
00H
40*25黑白字符方式
01H
40*25彩色字符方式
02H
80*25黑白字符方式
03H
80*25彩色字符方式
04H
320*200彩色图形方式
11H
640*480单色图形
12H
640*48016色图形
本设计中选用04号功能,设置屏幕分辨率为320*200,彩色图形方式,字符分辨率为80*25。
其中屏幕的最左上角坐标为(0,0)。
程序模块如下:
;设置屏幕显示方式宏
setscreenmacro
movah,0
moval,04h
int10h
endm
2.3输出文本信息
为了拥有一个良好的人机交互界面,在程序设计中,文本提示信息的输出有着非常重要的作用。
汇编语言中,可以通过调用DOS中断,int21h处理输入和输出信息,同时还可以通过BIOS中断int10h设置输出字符的起始位置。
设置输出字符的起始位置模块如下:
movah,2
movdh,X;第一个字符输出的行坐标
movdl,Y;第一个字符输出的列坐标
int10H
显示字符串需要调用int21h中断的09号功能。
程序模块如下:
;设置输出宏,带参数
outputmacromess;mess为字符串变量名
movah,2
movdh,22
movdl,1
int10H;设置字符输出开始位置
movdx,offsetmess
movah,9
int21h
endm
宏执行完成后,将在22行第一列开始输出变量mess的字符串。
2.4键盘处理子程序
键盘处理使用BIOS或者DOS键盘中断,本程序中使用DOS键盘中断,调用如下:
movah,0ch;清楚键盘缓冲区
movah,7;等待从键盘输入一个字符,不回显
int21h;返回参数AL=按下键的ASC码
不同的按键处理如下:
cmpal,'1';若为1,跳到正弦输出过程
jzpan1
………
cmpal,'e';若为q,则退出
jzquit
cmpal,'E'
jzquit
jmpinkey;不断检测键盘
2.5绘制图形
本设计选用的屏幕显示方式为320*200彩色图形方式,即横坐标有320个点,纵坐标有200个点,默认左上角为坐标原点(0,0)。
要画出波形曲线,则要每个横坐标都对应着一个纵坐标的值。
值不同绘制出的波形曲线也不同。
把不同的曲线纵坐标的值储存在表中,通过查表可以得到不同曲线。
每种曲线取128个点,然后在屏幕上绘制出这些点,从而显示出相应的波形曲线。
屏幕上的图形是由多个像素点组成,所以各种曲线也由多个点组成。
在指定的坐标位置上写像素点的方式如下:
movah,0ch
moval,color;;像素点的颜色(0~3)
movcx,column;列号
movdx,row;行号
int10h
2.6绘制坐标系
由于屏幕默认的原点为左上角为(0,0),要在屏幕中间绘制曲线,所以在绘制前要进行坐标的变换,转化为笛卡尔坐标系,该子程序如下:
;绘制笛卡尔坐标系
draw_zuobiaoprocnear
movcx,0
d_heng:
;绘制横轴
movah,0ch
moval,01h;像素的颜色
movdl,100
int10h
inccx
cmpcx,320
jned_heng
movcx,0
movdl,0
d_zong:
;;绘制纵轴
movah,0ch
moval,03h
int10h
incdl
cmpdl,200
jned_zong
movcx,320
movdl,100
;绘制横轴箭头
heng_j1:
movah,0ch
moval,03h;像素的颜色
int10h
subcx,2
subdl,1
cmpcx,300
jneheng_j1
movcx,320
movdl,100
heng_j2:
movah,0ch
moval,03h;像素的颜色
int10h
subcx,2
adddl,1
cmpcx,300
jneheng_j2
ret
draw_zuobiaoendp
2.7清屏过程
清屏程序的设计原理,是用背景色的像素点重新在全屏进行绘制。
clear_screenprocnear
movcx,0
movdl,0
pushax
clear1:
movah,0ch
moval,00h;背景色重新刷屏
int10h
inccx
cmpcx,320
jneclear1
movcx,0
incdl
cmpdl,200
jneclear1
calldraw_zuobiao
popax
ret
clear_screenendp
2.8绘制波形曲线
根据不同的按键值,绘制不同的波形曲线。
如:
‘1’键按下,则调用以下子程序
pan1:
;画正弦
leasi,sine
movrow,0
movcol,0
calldraw_sine
ret
draw_sineprocnear
callclear_screen
movcx,col
movtemp,1;temp储存曲线类型,为变换使用
calldraw_line
ret
draw_sineendp
画线过程,先绘制第一周期
draw_lineprocnear
pushsi
movax,col
addbx,ax
calld_line
popsi
calldraw_line1
d_line:
movah,0ch
moval,colour_temp;像素的颜色
movdl,[si]
int10h
incsi
inccx
cmpcx,bx
jld_line
ret
draw_lineendp
;绘制第二周期
draw_line1procnear
movcx,bx
addbx,128
calld_line1
callinkey
d_line1:
movah,0ch
moval,colour_temp;像素的颜色
movdl,[si]
int10h
incsi
inccx
cmpcx,bx
jld_line
ret
draw_line1endp
2.9相位及幅值的改变
相位的改变原理是当左/右方向键之一按下时,将曲线绘制的起始点向左/右平移10个像素点,然后重新绘制。
幅值的改变原理是当上/下方向键之一按下时,改变si指针,指向另外一个幅值的函数表,重新绘制波形曲线。
如:
;改变相位,右方向键按下一次曲线右移10个像素点
key_rightprocnear
movcx,col
addcx,10
movcol,cx
cmptemp,1
jzright1
cmptemp,2
jzright2
cmptemp,3
jzright3
ret
key_rightendp
;波形重绘
right1:
leasi,sine
jzdraw_sine
ret
right2:
leasi,cosine
jzdraw_cos
ret
right3:
leasi,triangle
jzdraw_tri
ret
3.程序调试及结果
通过运行程序可实现正弦波,方波,三角波。
以及三种波形的幅值和相位改变,实现三种频段的调幅,调相位。
调节时如重新回到初始页面,按数字键“4”,即可完成清屏指令并返回最初界面。
按e/E退出程序。
以下位移及幅值改变以正弦波为例。
按下数字‘1’,显示两个周期的正弦波形曲线3-1(a),
3-1
按下方向键下,则曲线幅值减小,如图3-2
3-2
按下方向键上,幅值增大,如图3-3;
3-3
按下方向键右,曲线向右移动,如图3-4
3-4
按下方向键左,曲线向左移动,如图3-5
3-5
按下数字‘2’,显示两个周期的方波形曲线,如图3-6
3-6
按下数字‘3’,显示两个周期的三角波形曲线,如图3-7
3-7
按下数字‘4’,实现清屏;如图3-8。
3-8(h)
按下E/e键,程序成功退出
4.总结与体会
4.1课程设计中遇到的问题
由于以前对信号发生器了解太少,刚拿到题目不知从何下手,经过去图馆,上网查资料才得以了解信号发生器。
在如何可以用汇编语言画出波形这一问题上,还是在网上查阅了很多资料,小组同学一起奋斗,最终才得以解决的。
4.2课程设计的收获、体会
通过本次课程设计,了解了Intel系列微型机的基本组成以及计算机中数和字符的表示方法;熟练掌握Intel8086指令系统及寻址方式,伪指令及汇编语言程序格式;掌握基本程序设计方法、I/O程序设计方法以及DOS调用;掌握宏汇编的基本概念和方法;了解汇编语言程序与高级语言程序的连接方法,熟悉上机操作和程序调试技术,初步具备软件设计的能力。
但在将计算机理论知识转化为计算机应用知识的同时,也发现了许多薄弱环节,比如说用汇编语言编程是我的弱项,对计算机领域各门学科的交叉应用还有待加强与提高,更增加了小组同学的团队协作能力。
总之,这次的课程设计给了我一个难得的锻炼的机会,通过自己综合运用课堂上学到的知识,提升了自己解决问题的能力,同时也感谢老师为我们的耐心答疑与指导。
参考文献
[1]潘名莲.微计算机原理.北京:
电子工业出版社,2004.7
[2]李志民.计算机原理与汇编语言程序设计.长沙:
中南大学出版社,2001.8
[3]许骏.微型计算机系统原理及应用.广州:
华南理工大学出版社,1996.5
[4]宫云战.微型计算机原理与应用基础教程.北京:
机械工业出版社,1999.5
[5]荀殿栋.微处理器应用技术与实例.北京:
电子工业出版社,1997.11
附录1;
;*********************宏设置*******************************************************************************************************************************
setscreenmacro;设置屏幕显示方式
movah,0
moval,04h;设置彩色4色,320*200,文本80*25
int10h
endm
outputmacromess;输出宏
MOVAH,2
MOVDH,22;行坐标0-25
MOVDL,1;列坐标0-80
INT10H;设置标题开始位置80*25
movdx,offsetmess
movah,9
int21h
endm
;*********************堆栈段*******************************************************************************************************************************
stacksegment
db250dup(?
)
stackends
;*********************数据段*******************************************************************************************************************************
datasegment
menudb'1sin;2cos;3triangle;4clear;E/eexit;right/leftchangephase;up/downchangeamplitude',0ah,0dh,'$';按键提示菜单
;正弦表
sinedb100,98,96,94,92,90,88,86
db84,82,81,79,77,75,74,72
db71,69,68,66,65,64,63,62
db61,61,60,59,59,59,58,58
db58,58,58,59,59,59,60,61
db61,62,63,64,65,66,68,69
db71,72,74,75,77,79,81,82
db84,86,88,90,92,94,96,98
db100,102,104,106,108,110,112,114
db116,118,119,121,123,125,126,128
db129,131,132,134,135,136,137,138
db139,139,140,141,141,141,142,142
db142,142,142,141,141,141,140,139
db139,138,137,136,135,134,132,131
db129,128,126,125,123,121,119,118
db116,114,112,110,108,106,104,102;小幅值
sine1db100,99,98,97,96,95,94,93
db92,91,90,89,88,88,87,86
db85,85,84,83,83,82,82,81
db81,81,80,80,80,80,80,80
db80,80,80,80,80,80,80,81
db81,81,82,82,83,83,84,85
db85,86,87,88,88,89,90,91
db92,93,94,95,96,97,98,99
db99,100,101,102,103,104,105,106
db107,108,109,110,111,111,112,113
db114,114,115,116,116,117,117,118
db118,118,119,119,119,119,119,119
db119,119,119,119,119,119,119,118
db118,118,117,117,116,116,115,114
db114,113,112,111,111,110,109,108
db107,106,105,104,103,102,101,100
sine2db100,96,92,88,84,80,76,73;大幅值
db69,65,62,58,55,52,49,46
db43,40,38,35,33,31,29,27
db26,24,23,22,21,20,20,20
db20,20,20,20,21,22,23,24
db26,27,29,31,33,35,38,40
db43,46,49,52,55,58,62,65
db69,73,76,80,84,88,92,96
db99,103,107,111,115,119,123,126
db130,134,137,141,144,147,150,153
db156,159,161,164,166,168,170,172
db173,175,176,177,178,179,179,179
db179,179,179,179,178,177,176,175
db173,172,170,168,166,164,161,159
db156,153,150,147,144,141,137,134
db130,126,123,119,115,111,107,103
;方波表
cosinedb58,58,58,58,58,58,58,58
db58,58,58,58,58,58,58,58
db58,58,58,58,58,58,58,58
db58,58,58,58,58,58,58,58
db58,58,58,58,58,58,58,58
db58,58,58,58,58,58,58,58
db58,58,58,58,58,58,58,58
db58,58,58,58,58,58,58,58
db58,58,58,58,142,142,142,142
d