微机原理课程设计之函数发生器2.docx
《微机原理课程设计之函数发生器2.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计之函数发生器2.docx(10页珍藏版)》请在冰豆网上搜索。
微机原理课程设计之函数发生器2
《微机原理》
课程设计报告
题目:
函数发生器的设计
(二)
专业班级:
电子信息科学与技术0810班
设计学生:
邓
完成时间:
2010年12月15日
湖南文理学院物理与电子科学学院
设计题目
函数发生器的设计
(二)
设计要求
要求:
设计一个三角波发生器,可利用键盘改变其输出波形的幅值。
例如,可利用1-5这5个数字键改变其输出波形的幅值,当按下1-5数字键时使D/A输出幅值从1V增加到5V。
通过D/A课程设计,使学生了解在现有的实验装置上的硬件线路连接,正确地掌握汇编语言程序的编辑、编译、链接、下载、调试,学会从硬件到软件设计步骤的全过程,综合提高设计与运用微机测控系统的能力。
按设计要求制订方案;并正确地实现系统功能。
理解设计方案后再自己动手修改程序,并正确联线、构成硬件电路,通过独立调试实现设计方案。
写出实践报告
设
计
思
路
(1)硬件设计思路
一级输入按题意采用单缓冲方式,即经寄存器锁存,假设第一级有锁存,第二级直通,那么第二级的控制端
和
处于有效电平状态,使二级锁存寄存器一直处于打开状态,第二级寄存器具有锁存功能的条件是ILE,
,
都要满足有效电平时,第二级寄存器才开放,为减少控制线条数,是ALE一直处于高电平状态,控制
和
端,电路连接如原理图。
(2)软件设计思路
首先单缓冲方式下,输出数据的指令仅需要一条输出指令即可。
原理图中,
端经与译码电路的输出端相连,器地址既是选中该0832芯片的片选信号,也是第一级寄存器打开的控制信号。
另外由于CPU的控制信号
与0832的写信号
相连,当执行OUT指令时,CPU的
写信号有效,与
信号一起打开第一级寄存器,输入数据被锁存。
系统设计原理图
D0~D7
CPU
A0~A15
D0~D7
译码器
0832
+12V
7
6
5
1
10K
-12V
2
3
12
11
9
4
Vout
Iout1
Iout2
Rfb
程序流程图
源程序:
codesegment
hcdb?
assumecs:
code
org1000h
start:
calldispkey;键扫
moval,byteptrds:
[0752h]
cmpal,20h
jnzy1
jmpy2
y1:
movhc,al;hc缓存键值
movbh,al
y2:
movbh,hc
moval,bh
movah,32h
mulah
movbh,al
movbl,0h
begin:
movcx,55h;掩盖波形直线部分
up:
incbl;上升部分
movdx,20h
moval,bl
outdx,al
cmpbl,bh
jcup
down:
movdx,20h;下降部分
moval,bl
outdx,al
decbl
cmpbl,0h
jnzdown
loopup
jmpstart
dispkey:
calldisp;键盘扫描程序
callkey
movah,al
movbl,ds:
[0748h]
movbh,ds:
[0749h]
moval,01h
movdx,0ff21h
outdx,al
cmpah,bh
movbh,ah
movah,bl
jzdisk4
movbl,88h
movah,88h
disk4:
decah
cmpah,82h
jzdisk6
cmpah,0eh
jzdisk6
cmpah,00h
jzdisk5
movah,20h
decbl
jmpdisk7
disk5:
movah,0fh
disk6:
movbl,ah
movah,bh
disk7:
movbyteptrds:
[0748h],bl
movbyteptrds:
[0749h],bh
movbyteptrds:
[0752h],bh
moval,ah
ret
disp:
pushcx
movdx,077fh
movah,20h
disp0:
movcx,00ffh
movbx,dx
movbl,ds:
[bx]
movbh,0h
pushdx
movdx,0ff22h
moval,BYTEPTRcs:
[bx+OFFSETdata1]
outdx,al
movdx,0ff21h
moval,ah
outdx,al
disp1:
loopdisp1
popdx
decdx
shrah,01h
jnzdisp0
popcx
ret
data1:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
db80h,90h,88h,83h,0c6h,0a1h,86h,8eh
db0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh
db90h,0a3h,0a1h,86h,8fh
key:
moval,0ffh
movdx,0ff22h
outdx,al
movbl,00h
movah,0feh
movcx,08h
key1:
moval,ah
movdx,0ff21h
outdx,al
shlal,01h
movah,al
nop
nop
nop
nop
nop
nop
movdx,0ff23h
inal,dx
notal
nop
nop
andal,0fh
jnzkey2
incbl
loopkey1
jmpnkey
key2:
testal,01h
jekey3
moval,00h
jmpkey6
key3:
testal,02h
jekey4
moval,08h
jmpkey6
key4:
testal,04h
jekey5
moval,10h
jmpkey6
key5:
testal,08h
jenkey
moval,18h
key6:
addal,bl
cmpal,10h
jncfkey
movbl,al
movbh,0h
moval,BYTEPTRcs:
[bx+OFFSETdata2]
ret
nkey:
moval,20h
fkey:
ret
data2:
db07h,04h,08h,05h,09h,06h,0ah,0bh
DB01h,00h,02h,0fh,03h,0eh,0ch,0dh
CODEENDS
ENDSTART
设计总结:
回顾起此次课程设计,我学到很多很多的东西,不仅巩固了以前所学过的知识,加深了对《微机原理》的理解,而且学到了很多在书本上所没有学到过的内容。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。
而且在做课程设计的过程中,不仅是考验自己所学的《微机原理》知识,更是要锻炼自己的分析问题的能力和解决实际问题的能力,而在在此次课程设计过程中得到了充分的体现。
例如在改变频率的设计过程中,由于数据的出栈、入栈的混乱,导致程序没有波形输出,还好在师兄的指点下,才发现了问题,主要是由于在程序的跳转过程中,PUSH和POP指令并没有成对的使用,导致入栈、出栈混乱。
最后修改时,只能不用PUSH和POP指令,改用寄存器来暂存数据,特别是在调用延迟的程序段时,由于AX的混乱使用,导致延迟改变,波形无法正常输出。
最后才修改好,能正常的输出波形,并且能完成频率三级调节。
虽然在设计的过程遇到了各种各样的问题,但同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识。