任意波形发生.docx

上传人:b****6 文档编号:8079714 上传时间:2023-01-28 格式:DOCX 页数:13 大小:166.56KB
下载 相关 举报
任意波形发生.docx_第1页
第1页 / 共13页
任意波形发生.docx_第2页
第2页 / 共13页
任意波形发生.docx_第3页
第3页 / 共13页
任意波形发生.docx_第4页
第4页 / 共13页
任意波形发生.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

任意波形发生.docx

《任意波形发生.docx》由会员分享,可在线阅读,更多相关《任意波形发生.docx(13页珍藏版)》请在冰豆网上搜索。

任意波形发生.docx

任意波形发生

泉州师范学院

2008年-2009年第二学期

2006级通信工程专业

 

微机接口课程设计报告

项目名称:

_______任意波形发生器

(2)_______

 

姓名:

___________学号:

成绩:

______

姓名:

学号:

成绩:

_____

 

指导教师:

(高级工程师)

引言

微机原理和接口技术是一门实践性强的学科,其中很多的原理、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。

在进行课程设计的过程中,可以让学生体验分析问题、提出解决方案、通过编程等手段实现解决方案、不断调试最终达到设计要求的全过程,从而帮助学生系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。

微机原理课程设计是机械设计制造及其自动化专业的一门重要的专业实践课程。

本课程设计以MCS-51系列单片机为核心,综合运用微机原理、数字电路及微机接口技术的知识,使学生掌握微型计算机接口的方法和原理,具备一定的微机应用开发的实践能力。

一、项目内容

1、利用实验仪上的数模转换器DAC0832,将程序中的一组波形的数据转换为电

压的变化曲线,并用示波器测量模数转换器的输出端,观察生成的波形。

2、随机用键盘输入波形数据。

要求每个输入的数据要显示在8个发光管上。

3、已输入的波形数据可以用键盘上的按键查看和更改。

并令数据从数模转换器上

输出。

输出的最大幅度要达到5V,最小幅度为0V。

4、在输出波形的同时可以用数字按键输入波形的频率。

频率的范围自己设定。

二、电路原理分析

(1)键值读取的方法:

键值的得到可以用扫描法得到。

各个键的键值:

键名

(行码)

Y2Y1Y0

(列码)

RL7RL6RL5RL4RL3RL2RL1RL0

0

110

1

110

2

110

3

110

4

110

5

110

6

110

7

110

01111111

8

101

9

101

A

101

B

101

C

101

D

101

E

101

F

101

01111111

.

011

011

-

011

+

011

:

011

REG

011

011

011

01111111

读出的键值分别存在两个字节中,一字节行码,一字节列码。

如果测出是第1和第2行的键按下,就调用数字键处理程序子程序。

在数字键处理程序中,将列码向右位(用SAR指令),每移一次计数一次,移出的是0,就停止计数。

这个计数值就是键值,如0的行码中,最右边的一位就是0,所以计数值应是0。

子程序返回键值。

可以得到键上的数字。

注意第2行的键值比第1行多了8,要记得加上。

第3行的键,可以用来做功能键,如果测出是第3行键,可调用另一个功能键子程序,在子程序中可以采用跳跃表的方法转向各键的处理程序。

可以先预留出各个功能键的分支,在分支的标号后面加一条RET指令,待需要时再加上相应的键处理子程序。

(2)电路图

D/A转换模块电路

 

连线情况:

•PA0-PA7接到RL0-RL7八列键的列值。

•PC0,PC1,PC2接到Y0Y2Y3三行键的行码。

•PB0-PB7接到DL1-DL8,显示数/模转换的数值。

三、设计方案及分析

(1)随机用键盘输入波形数据,通过A\D转换把数值数字

显示在数码管上显示出,并将数值保存在预先划定的内存空间,以便后面使用。

功能键设置方面:

当检测到键值为19时,数码管显示下一个保存值,为18时显示前一个数值,若是17则进行数模转换,在示波器上输出波形,当按下键17时从之前保存的数值取出更改输出波形的频率。

(2)程序框图

主程序:

键扫描:

键盘扫描

有键按下?

设置行号cl=0ffh

判断该行有键按下?

保存键值

判断三行扫完?

保存键值

消抖

有键按下?

初始化

功能键:

四、源程序

datasegment

data1db1,2

data2db30dup(?

data3db0

dataends

codesegment

assumecs:

code

portaequ200h

portbequ201h

portcequ202h

pctrlequ203h

start:

moval,90h;设置工作方式零,A端口输入,B,C端口输出

movdx,pctrl

outdx,al;设置完成

movch,0;判断是第几次按键

movsi,0;si初始化

movdi,0;指针初始化

key:

movdx,portc;键盘扫描

moval,00h

outdx,al;使所有行线为零

movdx,porta;通过A端口读入列值

inal,dx

cmpal,0ffh;判断有无按键按下

jzkey;没有,则继续扫描判断

movbx,0ffh

dey:

decbx;延时消抖

jnzdey

inal,dx;重新判断来确定有无按键按下

cmpal,0ffh

jzkey

movcl,0feh;设置行号

x0:

movdx,portc

moval,cl

outdx,al

movdx,porta;扫描该行有无按键按下,有则将列值保存到al

inal,dx

cmpal,0ffh

jnzx2

x1:

rolcl,1;判断三行是否扫描完,是,则保存键的位置;否,则继续扫描

jcx0

jmpkey

x2:

movah,cl;保存行值到ah中

cmpch,1

jzk0;若是第二次按键,则跳转,不是,则向下进行

incch;ch自增1

callswitch;键值转换

cmpal,19

jznext;

cmpal,17;判断按下值是否为17

jzm1;是则进行跳转延续,进行数摸转换

cmpal,18;功能键显示替换前一个数值

jzback1

cmpal,16;输出频率按键

jzpl

notal

movdx,porta;读出A口将键值保存起来

outdx,al

notal

movcl,4

rolal,cl;将按键值左移4位

pushax;将按键值压栈保护

freekey:

movdx,portc;按键释放处理

moval,00h

outdx,al

movdx,porta

inal,dx

cmpal,0ffh

jzkey

jmpfreekey

m1:

jmpsm1

k0:

movch,0;归零

callswitch

cmpal,19;显示下一个数值键,比较按下键值是否等于19

jznext;是则跳转

cmpal,18;判断是否显示上一个数值

jzback

cmpal,17;判断按下值是否为17

jzsm1;是则进行跳转延续,进行数摸转换

cmpal,16;频率按键

jzpl

movdl,al

popax

addal,dl;键值组装

notal

movdx,portb;

outdx,al

pushbx

savedata:

movbx,offsetdata2;存入数据调用单元data2

notal

mov[bx+si],al

incsi

cmpsi,30;指针超过则清零

jzsi0

popbx

x3:

jmpfreekey;二次按键释放处理

si0:

movsi,0

jmpx3

back1:

jmpback

pl:

movbx,offsetdata2

decsi

moval,[bx+si]

movdata3,al

jmpsm1

next:

;显示后一个值

pushbx

movbx,offsetdata2

incsi

moval,[bx+si]

notal

movdx,portb

outdx,al

popbx

calldelay65

jmpkey

back:

pushbx;显示前一个值

movbx,offsetdata2

decsi

moval,[bx+si]

notal

movdx,portb

outdx,al

popbx

calldelay65

jmpkey

sm1:

pushbx

movbx,offsetdata2

moval,[bx+di]

calldac;调用数摸转换子程序

calldelay

incdi

cmpdi,30

jzm2

jmpsm1

popbx

m2:

jmpkey

switchprocnear;键值转化子程序

movbl,-1

s1:

incbl

roral,1

jcs1

s2:

rorah,1

jncs3

addbl,8

jmps2

s3:

moval,bl

ret

switchendp

 

delay65PROCNEAR;延时650ms子程序

pushcx

movcx,65500

L:

nop

nop

loopL

popcx

ret

delay65ENDP

delayprocnear

notal

moval,data3

delay1:

decal

cmpal,0

jnzdelay1

ret

delayendp

dacprocnear

movdx,208h

outdx,al

ret

dacendp

codeends

endstart

五、总结

1、跳转指令无效。

解决:

由于跳转范围太远无法,需在适当位置加一中转点进行接力

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

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

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