微机原理课程设计电子琴设计Word下载.docx

上传人:b****3 文档编号:17271864 上传时间:2022-11-30 格式:DOCX 页数:12 大小:81.60KB
下载 相关 举报
微机原理课程设计电子琴设计Word下载.docx_第1页
第1页 / 共12页
微机原理课程设计电子琴设计Word下载.docx_第2页
第2页 / 共12页
微机原理课程设计电子琴设计Word下载.docx_第3页
第3页 / 共12页
微机原理课程设计电子琴设计Word下载.docx_第4页
第4页 / 共12页
微机原理课程设计电子琴设计Word下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

微机原理课程设计电子琴设计Word下载.docx

《微机原理课程设计电子琴设计Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计电子琴设计Word下载.docx(12页珍藏版)》请在冰豆网上搜索。

微机原理课程设计电子琴设计Word下载.docx

三、设计目的:

通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。

四、设计要求:

1.可以弹出7个音阶。

2.弹奏简短音乐。

3.通过改变键盘输入来改变8254输出频率,实现扬声器发音

五、设计原理:

音符与频率的关系如表所示,而持续时间则取决于乐曲的速度和每个音符持续的长短。

在拍号为4/4的乐曲中,每小节包含4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续半拍等等。

根据乐曲进行速度,假设一个全音符分配1S时间,则每拍持续时间为250MS。

如果持续时间的最小单位是10MS,则相应的拍长时间数据为25,该数据存放在BX寄存器中,从而可以确定每个音符的持续时间。

音符

1

2

3

4

5

6

7

频率

131

147

165

175

196

220

247

262

294

330

349

392

440

494

523

六、元器件功能简介:

1.8255引脚功能

RESET:

复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:

片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。

RD:

读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:

写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。

D0~D7:

三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

PA0~PA7:

端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:

端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:

端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

A1、A0:

端口地址总线,8255中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址。

本实验用到的引脚有PA0-PA3、PC0-PC3、D0-D7、A0、A1、WR、RD、CS、和GND。

图1.8255的控制字格式

2.8254可编程计数/定时器

芯片完成对外部脉冲信号的各种处理。

8254芯片内部具有三个独立的16位计数器,它可用程序设置成多种工作方式,按十进制计数或二进制计数,最高计数速率可达10MHz。

8254的全部功能是由CPU编程设定的。

CPU通过输出指令给8254装入控制字,从而设定其功能。

8254控制字格式如下:

D7D6D5D4D3D2D1D0

SC1

SC0

RL1

RL0

M2

M1

M0

BCD

各位的功能见表1~表4:

表1SC1、SC0-计数器选择

SC1SC0

选择计数器

00

选择0#

01

选择1#

10

选择2#

11

使用方法参见8254使用说明

表2RL1、RL0-CPU读/写操作

RL1RL0

操作类型

计数器封锁操作

读/写计数器低8位

读/写计数器高8位

先读/写低8位,后读/写高8位

表3M2、M1、M0-工作方式选择

M3M2M1

计数工作方式

000

方式0

001

方式1

010

方式2

011

方式3

100

方式4

101

方式5

表4BCD-计数方式选择

数码形式

十六位二进制计数

四位十进制(BCD)码计数

七、设计原程序及注解

程序代码:

MY8255_AEQU0600H

MY8255_BEQU0602H

MY8255_CEQU0604H

MY8255_MODEEQU0606H

MY8254_MODEEQU06C6H

MY8254_AEQU06C0H;

进行宏定义

DATASEGMENT

FREQ_LISTDW441D,495D,556D,589D,661D,742D,833D,882D,

262D,294D,330D,373D,402D,450D,494D,-1D

DATAENDS;

建立数据段

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX;

实现段寄存器DS的初始化

MOVDX,MY8255_MODE

MOVAL,81H

OUTDX,AL;

写8255芯片的控制字,实

现工作在方式0,A端口和B端口输出,C端口输入

MOVDX,MY8254_MODE

MOVAL,36H

OUTDX,AL;

使8254工作在方式3,A

口输入,运用计数器0,二进制方式

BEGIN:

CALLCCSCAN;

扫描

JNZINK1;

有键按下时跳到INK1

JMPBEGIN;

没见按下时循环执行

BEGIN

;

确定按下键的位置

INK1:

MOVCH,0FEH;

确定按下键在第一列

MOVCL,00H;

将CL清零

COLUM:

MOVAL,CH

MOVDX,MY8255_A;

将8255的A口地址赋给DX

OUTDX,AL;

将CPU中的AL值送到8255

的A口中,即送到x1、x2、

x3、x4中

MOVDX,MY8255_C;

将8255的C口地址赋给DX

INAL,DX;

将C口的值送到AL中

L1:

TESTAL,01H;

检验按下键是否在L1

JNZL2;

不是L1则跳到L2

MOVAL,00H;

为了后面用来与FREQ_LIST

数据段中数对应

JMPKCODE;

强制跳转到KCODE

L2:

TESTAL,02H;

检验按下键是否在L2

JNZL3;

不是L2则跳到L3

MOVAL,04H;

数据段中数对应。

JMPKCODE;

L3:

TESTAL,04H;

检验按下键是否在L23

JNZL4;

不是L3则跳到L4

MOVAL,08H;

L4:

TESTAL,08H;

检验按下键是否在L4

JNZNEXT;

不是L4则跳到NEXT

MOVAL,0CH;

KCODE:

ADDAL,CL;

实现AL与CL的无进位加法

MOVDL,2D

MULDL;

将AL乘以2结果保存到AX中

PLAY:

MOVSI,OFFSETFREQ_LIST;

使SI指向FREQ_LIST的首地址

ADDSI,AX;

通过SI加AX实现指针SI的移动

MOVDX,0FH

MOVAX,4240H;

被除数为0F4240H

DIVWORDPTR[SI];

除数为SI所指的数据

MOVDX,MY8254_A;

OUTDX,AL;

输出商的低4位

MOVAL,AH

输出商的高4位

MOVCX,8D;

输入计数值CX

NEXT3:

CALLDALLY;

调用延时子程序DALLY

LOOPNEXT3;

CX不为0重复执行NEXT3

MOVSI,30D

除数为SI=30所指的数据

OUTDX,AL

MOVAL,AH

实现静音,结束一个音符的发音

JMPBEGIN;

跳转到BEGIN,重复扫描

NEXT:

INCCL;

使CL加1,为了后面用来与

FREQ_LIST数据段中数对应

MOVAL,CH

TESTAL,08H

JZKERR;

无键按下时跳转到KERR

ROLAL,1D;

向左移位

MOVCH,AL

JMPCOLUM;

强制跳转到COLUM

KERR:

跳到BEGIN重新开始扫描

键盘扫描子程序

CCSCAN:

MOVAL,00H

MOVDX,MY8255_A

使8255芯片A端口输出

为0,既使x1、x2、x3、

X4为0

MOVDX,MY8255_C

INAL,DX;

将从C端口输入的y1、y2、y3、y4送到AL中

NOTAL;

将AL取反

ANDAL,0FH;

将AL前4位清零

RET

延时子程序

DALLY:

PUSHCX;

将CX压栈

MOVCX,000FH

T1:

MOVAX,0009FH

T2:

DECAX;

使AX减1

JNZT2;

AX不为0重复T2

LOOPT1;

CX不为0重复T1

POPCX;

将CX出栈

CODEENDS;

代码段定义结束

ENDSTART;

程序结束

八、程序流程图:

九、程序接线图:

右图Y组对应8255芯片的C口(Y值为1)与+5V连L1L2L3L4

13

14

15

16

9

10

11

12

8

Y4

Y3X组对应8255芯片的A口(X值为0)

Y2当有键按下时如5键,其对应的Y值

Y2为0,则8255芯片由C口输入的数Y1

值为1101给AL。

X1X2X3X4

总结

本学期我们有一周的微机原理课设,虽然时间不是很长,但对我而言收获却很多,也体会到了电子设计行业工作的辛苦,经过老师细心的讲解和我们的不懈努力,最终我组能够把学到的知识运用到实际中去,这让我对本学科的学习产生了更加浓厚的兴趣,但一切都是值得的。

这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件结合也没有这么复杂,实现的功能都比较简单,可是这次要实现的功能相对来说比较复杂,要求掌握的知识比较综合。

经过一周的实训,汇编语言的一些编程设计等操作可以较为熟练,微机原理课程所涉及到的领域和应用的范围也得到了更多的了解,总的来说,实训的一周是丰富而有成功的。

刚开始学习汇编语言是相当吃力的,许多内容在以前没有接触过,许多源代码不能理解,实训的头两天就是很简单的试着操作这些内容一点点的积累掌握,回去后不理解的地方赶紧询问其他同学以便在第二天上机时应用好,经过不懈的努力,终于将一个简单的电子琴程序设计完成。

汇编语言是一门较难的计算机内容,开始学习的时候较为困难,但是平时的课堂的学习和这一次的集中的上机实训,使我不但能够较好的了解并掌握了一些汇编语言的知识和技能,相信在以后的社会生活中也可以得到应用。

在最后的答辩前,我对几天来在对几个程序的编排和改进上所遇到的问题又进行了认真的总结,使我对整个程序都有了很深的了解,而且也可以熟练的操作和应用到程序中去,也顺利的通过了答辩。

这是一次成功的实训,也是应值得远记住的一次实训,在这次实训中我充分感受到了集体的力量,在我组组员的共同努力下,我们的电子琴程序从无到有、功能从弱到强,一步步的走向成功,这段经历将成为我生活中一段宝贵的精神财富。

参考文献:

1、《8088/8086汇编语言程序设计》中央广播电视大学出版社

4、《微机原理与应用》大连理工大学出版社

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

当前位置:首页 > 外语学习 > 英语学习

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

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