任意波形发生器设计报告.docx

上传人:b****7 文档编号:16404273 上传时间:2023-07-13 格式:DOCX 页数:17 大小:757.21KB
下载 相关 举报
任意波形发生器设计报告.docx_第1页
第1页 / 共17页
任意波形发生器设计报告.docx_第2页
第2页 / 共17页
任意波形发生器设计报告.docx_第3页
第3页 / 共17页
任意波形发生器设计报告.docx_第4页
第4页 / 共17页
任意波形发生器设计报告.docx_第5页
第5页 / 共17页
任意波形发生器设计报告.docx_第6页
第6页 / 共17页
任意波形发生器设计报告.docx_第7页
第7页 / 共17页
任意波形发生器设计报告.docx_第8页
第8页 / 共17页
任意波形发生器设计报告.docx_第9页
第9页 / 共17页
任意波形发生器设计报告.docx_第10页
第10页 / 共17页
任意波形发生器设计报告.docx_第11页
第11页 / 共17页
任意波形发生器设计报告.docx_第12页
第12页 / 共17页
任意波形发生器设计报告.docx_第13页
第13页 / 共17页
任意波形发生器设计报告.docx_第14页
第14页 / 共17页
任意波形发生器设计报告.docx_第15页
第15页 / 共17页
任意波形发生器设计报告.docx_第16页
第16页 / 共17页
任意波形发生器设计报告.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

任意波形发生器设计报告.docx

《任意波形发生器设计报告.docx》由会员分享,可在线阅读,更多相关《任意波形发生器设计报告.docx(17页珍藏版)》请在冰点文库上搜索。

任意波形发生器设计报告.docx

任意波形发生器设计报告

2008级计算机科学与技术专业

微机接口

课程设计报告

2010-2011学年第一学期

 

项目名称:

任意波形发生器

 

姓名:

_学号:

成绩:

姓名:

学号:

成绩:

指导教师:

一、设计:

1、设计说明:

利用实验仪上的数模转换器DAC0832,将程序中的一组波形的数据转换为电压的变化曲线,并用示波器测量模数转换器的输出端,观察生成的波形

2、设计目标:

设计一个简易波形发生器,要求该系统能通过开关或按钮有选择性的输出正弦波、三角波、方波、及阶梯波等四种波形,并且这四种波形的频率均可通过输入电位器在一定范围内调节

3、实验电路图:

4、设计内容:

(1)主程序

(2)子程序:

方波程序、正弦波程序、锯齿波、三角波、键盘扫描与处理

各模块的流程图如下:

A、主程序和键盘扫描流程:

B、三角波、方波、正弦波、锯齿波解析如下:

三角波的产生较为简单,因为它的上升沿遵循数据加1的规律。

下降沿则按数据减1的规律产生。

所以在波形的上升沿只要判断上一次的数据是否为最大值FFH,如果不是最大值,将原数据加1输出;而在波形的下降沿只要判断上一次数据是否为0,如果不是0,则将原数据减1即可

方波只有两个值,可以采用两个极端值0和FFH

正弦波使用查表法产生查表法是事先将正弦波的数据计算出来,列表放在程序中,运行时直接调取数据

锯齿波与三角波类似,只是下降时直接降至0即可。

各流程图如下:

延时N

方波流程

 

锯齿波流程

三角波流程

二、程序模块代码:

.modelsmall

.stack

;***********定义8255有关参数******************

addrAEQU200h

addrBEQU201h

addrCEQU202h

CTRLEQU203h

addrDAEQU208h

;*******************定义8279有关的参数*******************

Z8279EQU212H;8279的控制口地址

D8279EQU210H;8279的数据口地址

LEDMODEQU00;左边输入,八位显示外部译码八位显示(8279的控制字)

LEDFEQEQU38H;8279扫描频率

;*************以上参数写在主程序开头*****************

.code

start:

moval,90h;方式0,A口输入,B、C口输出

movdx,CTRL

outdx,al

movax,cs

movds,ax

callCSH8279;调用子程序CSH8279

callSMXS;调用子程序SMXS

s:

callKeyPress;调用子程序keyscan

movdi,offsetKeyNum

movsi,offsetXSDATA

moval,[di];波形号

mov[si+6],al

moval,[di+1];暂存值

mov[si],al

moval,[di+2];幅度

mov[si+3],al

callSMXS

movdi,offsetKeyNum

moval,[di]

cmpal,1

jneC1

callA1;跳转到方波

jmps;无条件跳转s

C1:

cmpal,2

jneC2

callA2;跳转到锯齿波

jmps

C2:

cmpal,3

jneC3

callA3;跳转到三角波

jmps

C3:

cmpal,4

jneC4

callA4;跳转到正弦波

C4:

jmps

movah,4ch

int21h

KeyNumDB0,0,0;波形参数,第一个为波形号,第二个为暂存值,第三个为幅度参数

DMBIAODB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H

DB5EH,79H,71H,00h;段码表,1亮,0灭,可以根据需要再设计显示字符

;段中已有的显示字符是0--F和全灭。

数据16代表全灭。

XSDATADB8dup(16);显示缓冲区

;正弦波表

SINDB80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh,0ffh

DB0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h,80h

DB66h,4eh,38h,25h,15h,09h,04h,00h,04h,09h

DB15h,25h,38h,4eh,66h

;*************方波*****************

A1procnear

pushax

pushbx

pushcx

moval,KeyNum[2];求幅值

movbl,33h

mulbl

movdx,addrDA

movcx,255;延时设定

A1DL0:

outdx,al;高电平

loopA1DL0

moval,0

movcx,255;延时设定

A1DL1:

outdx,al;低电平

loopA1DL1

popcx

popbx

popax

Ret

A1endp

;*************锯齿波*****************

A2procnear

pushax

pushcx

pushbx

moval,KeyNum[2]

movbl,33h

mulbl;求幅值

movah,al;最大幅值赋ah

moval,0

movdx,addrDA

A21:

outdx,al;低电平最低点

movcl,al

mulcl

movch,0

A2DL:

nop

loopA2DL;延时

incal

cmpal,ah;是否达最大幅值点

jneA21

popbx

popcx

popax

Ret

A2endp

;*************三角波*****************

A3procnear

pushax

pushbx

moval,KeyNum[2]

movbl,33h

mulbl;求最大幅值

movah,al;传值ah

moval,0

movdx,addrDA

A31:

outdx,al;读取低电平

movcx,3;延时点

A3DL0:

nop

loopA3DL0

incal;线性自增

cmpal,ah;是否达最高点

jneA31;否循环读取

A32:

outdx,al;读取最高幅值

movcx,5;延时点

A3DL1:

nop

loopA3DL1

decal;线性自减

cmpal,0;是否为0

jneA32;否循环

popbx

popax

Ret

A3endp

;*************正弦波*****************

A4procnear

pushdx

pushcx

pushbx

movdx,addrDA

movbl,60

A40:

movcx,33

movdi,offsetSIN;波表首址

A41:

moval,[di];赋波表内容

outdx,al;读取

pushcx

movcx,10

A4DL:

nop

loopA4DL;延时

popcx

incdi;di减1,即逐个取波表内容

loopA41

decbl;波表循环60次

jnzA40

popbx

popcx

popdx

Ret

A4endp

;*************逐行扫描键盘*****************

keyscanPROCNEAR;键盘扫描,返回行码(bh)和列码(bl)

pushax

pushdx

movdx,addrB

moval,0;所有行赋0

outdx,al

movdx,addrA

inal,dx

cmpal,0ffh;列是否全1,判断列,即是否按键

jeKSQ

movcx,10

KDL0:

nop;有按键要消抖

loopKDL0;消抖延时

inal,dx

cmpal,0ffh;重新判断是否按键

jeKSQ

movcx,3

movbh,2ch;00101100,进行右移求三行行号

scan:

SARbh,1;右移一位

movdx,addrB

moval,bh

outdx,al

movdx,addrA

inal,dx

cmpal,0ffh;是否按键

jneKP

loopscan;重扫描下一行

KP:

movbl,al;列值存bl

********判断是否键松开*******

movdx,addrB

moval,0;所有行

outdx,al

movdx,addrA

inal,dx

cmpal,0ffh

jneKP

movcx,10

KDL1:

nop

loopKDL1;消抖延时

inal,dx

cmpal,0ffh

jneKP

KSQ:

andbh,07h

callKeyCtrl

popdx

popax

ret

keyscanEndp

;***********************************按键处理*********************************

KeyCtrlPROCNEAR;按键处理,参数:

行码(bh)和列码(bl)

pushax

pushdx

cmpbl,0ffh

jeKCQ

moval,0;计数值

movcx,08h;用作移位

K2:

SARbl,1

jcks;是否CF为0,是跳转ks

jncp;否,跳转p

ks:

incal;自增

loopK2;循环

p:

movbl,al

cmpbh,06h;第一行

jneR1

movKeyNum[1],bl;键值存入数组keyNum中第二位

R1:

cmpbh,05h;第二行

jneR2

addbl,08h;第二行键值加8

movKeyNum[1],bl;键值存入数组keyNum中第二位

R2:

cmpbh,03h;第三行

jneKCQ

*****按确定键值从数组第二位传给第一位********

cmpbl,5;确定

jnectrl1

moval,KeyNum[1]

movKeyNum,al

jmpKCQ

********幅值修改*********

ctrl1:

moval,KeyNum[2];数组第三位

cmpbl,3;加号

jnectrl2

cmpal,5;幅值是否为5

jeKCQ

incKeyNum[2];修改幅度值

jmpKCQ

ctrl2:

cmpbl,2;减号

jneKCQ

moval,KeyNum[2]

cmpal,0;幅值是否为0

jeKCQ

decKeyNum[2];修改幅度值

KCQ:

movbx,0ffffh

callSMXS

popdx

popax

ret

KeyCtrlEndp

;**********CSH8279子程序是对8279初始化,在主程序的开头调用**********

CSH8279PROCNEAR

PUSHAX

PUSHDX

PUSHDS

PUSHCS

POPDS

MOVDX,Z8279

MOVAL,LEDMOD

OUTDX,AL

MOVAL,LEDFEQ

OUTDX,AL

POPDS

POPDX

POPAX

RET

CSH8279ENDP

;**********SMXS子程序是将放在显示缓冲区XSDATA的数据显示在8个数码管上************

;入口条件:

将要显示的数字按从右到左的顺序事先存放在XSDATA中,最右边的数据放在地址最小的单元。

SMXSPROCNEAR

PUSHAX

PUSHDX

PUSHCX

PUSHBX

PUSHDI

PUSHDS

PUSHCS

POPDS

MOVDI,OFFSETXSDATA

MOVCX,8

DMB:

MOVAL,[DI];查表,将键码放入AL中

LEABX,DMBIAO

XLAT

MOVDX,D8279;将AL中内容写到数码管上

OUTDX,AL

INCDI

LOOPDMB

POPDS

POPDI

POPBX

POPCX

POPDX

POPAX

RET

SMXSENDP

endstart

三、小结

通过这次课程设计,使我得到了一次全面的运用所学的知识分析和解决问题。

加深了我对8255芯片和数模转换的了解以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。

在课程设计的一周,让我们再课堂上学习的理论能够付诸实践,在这个过程中,刚开始我们是迷茫的,不知从何做起,通脱老师的指导,同学间的互相学习帮助,逐渐有了清晰的概念,也对自己的课题有了全面系统的了解。

逐渐由被动转为主动,能够自己去实现一些局部功能,到完成整个课题的设计。

也使我们再课堂学习到的模糊的概念也转化为清晰的认识。

正所谓纸上得来终觉浅,绝知此事要躬行。

学会了如何把理论应用于实际,如何用我们所学的知识去解决正常生活中的问题。

在当今科技发展如此迅速的时代,计算机已经成为了必不可少的工具,它无处不在,学习掌握计算机的技能已成为一项必修课,想要在这个社会有一立足之处,就必须学好计算机,能准确的掌握计算机知识,并熟练的贯彻到生活之中。

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2