华北电力大学微机原理课程设计报告.docx

上传人:b****5 文档编号:11572541 上传时间:2023-03-19 格式:DOCX 页数:16 大小:145.64KB
下载 相关 举报
华北电力大学微机原理课程设计报告.docx_第1页
第1页 / 共16页
华北电力大学微机原理课程设计报告.docx_第2页
第2页 / 共16页
华北电力大学微机原理课程设计报告.docx_第3页
第3页 / 共16页
华北电力大学微机原理课程设计报告.docx_第4页
第4页 / 共16页
华北电力大学微机原理课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

华北电力大学微机原理课程设计报告.docx

《华北电力大学微机原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《华北电力大学微机原理课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。

华北电力大学微机原理课程设计报告.docx

华北电力大学微机原理课程设计报告

 

 

课程设计报告

(2013—2014年度第一学期)

课程:

微机原理及应用

题目:

电子琴及电子播放器

院系:

自动化系

班级:

自动化1103

学号:

201111010122

201109010113

201102020331

学生姓名:

詹文超

靳朝阳

张晓

指导教师:

张妍

设计周数:

一周

成绩:

日期:

2014年1月10日

微机原理及应用课程设计报告

一、目的与要求

1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。

2.掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。

3.培养学生分析问题、解决问题的能力。

4.培养学生对微型计算机应用系统的基本设计能力。

5.提高学生的实践动手能力和创新能力。

二、主要内容

1.电子琴及电子播放器

2.系统介绍

本设计不仅可以实现小键盘电子琴演奏,还可以通过拨码开关播放不同的电子音乐,主要有小星星,两只老虎和欢乐颂。

硬件设计用到8253和8255芯片,8253工作在方式3,产生一定的频率方波,同时对应着不同音调;8255为可编程接口芯片,用于整个系统的开关控制功能。

3.系统实现的功能

系统主要实现三个功能:

1、自动演奏3首歌曲;

2、利用小键盘手动演奏;

3、歌曲之间的相互切换。

4.所用芯片的工作原理

(1)8253原理

8253有3个独立的计数通道,每个通道结构相同,例若clk0给定频率,向控制字寄存器写入控制字,并向计数器0写入计数初值,采用不同的方式即可产生不同的频率。

8253的内部结构

(1).数据总线缓冲器

实现8253与CPU数据总线连接的8位双向三态缓冲器,用以传送CPU向8253的控制信息、数据信息以及CPU从8253读取的状态信息,包括某时刻的实时计数值。

(2).读/写控制逻辑

控制8253的片选及对内部相关寄存器的读/写操作,它接收CPU发来的地址信号以实现片选、内部通道选择以及对读/写操作进行控制。

(3).控制字寄存器

在8253的初始化编程时,由CPU写入控制字,以决定通道的工作方式,此寄存器只能写入,不能读出。

(4).计数通道0#、1#、2#:

这是三个独立的,结构相同的计数器/定时器通道,每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器,锁存器在计数器工作的过程中,跟随计数值的变化,在接收到CPU发来的读计数值命令时,用以锁存计数值,供CPU读取,读取完毕之后,输出锁存器又跟随减1计数器变化。

(5).8253外部引脚

8253芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。

8253芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下:

1.D7~D0:

双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信息。

2.

来自于CPU的读控制信号输入引脚,低电平有效。

3.

来自于CPU的写控制信号输入引脚,低电平有效。

4.

芯片选择信号输入引脚,低电平有效。

(6).8253端口地址

 

(2)8255原理

8255有3种工作方式:

方式0,方式1,方式3,本次设计用方式0。

在这种方式下,任何一个端口可以通过方式控制字规定作为输入口,也可作为输出口;8255A有两个控制字:

方式选择控制字和端口C置位/复位控制字。

方式选择控制字的最高位总是1,而端口C置位/复位控制字的最高位总是0,用来区分两个控制字。

8255初始化方式如下图

 

5.系统分析

(1)系统原理

在了解8253,8255工作原理之后,我们利用2个开关从8255芯片A口输入不同数值,00,01,10,11.利用编程区分4中状态,跳入4个循环,即可演奏3首歌曲和手动电子琴。

8253则是事先算好初值,送如计数器。

每个频率可产生不同的音。

每个音之间停顿相应时间,每个句子之间停顿相应时间,即可演奏完每首歌曲。

每首歌曲和每个句子末尾有数字1,2判断是否停顿或者跳入下一首歌,实现每首歌之间的转换。

小键盘演奏则是利用一些算法得知每个健的值会存入al寄存器中,利用al中的值,判断al大小,设置数据段7个健值,取出响应频率设置循环即可弹奏。

(2)系统思路分析

系统从实现一个音开始,到完成一首歌的编曲,之后加入判断语句,进行第二首,第三首歌的编曲即已完成自动播放部分。

之后单独进行小键盘分析,取出主要部分,判断出运作原理利用最终al的值进行频率换算。

融入前一部分完成的歌曲中,反复调试完成。

 

6.系统流程图

3.实验总结

1.实验要点和问题分析

(1)计数值足够,所以只采用1个计数器,计数初值在程序中计算不便,所以定义数据段,根据clk0的频率和要产生的频率,计算初值,写入数据段;

(2)改变开关状态,读入数据相应跳转,3首固定歌曲都跳入同一循环W1进行演唱,简短程序;

(3)演唱完一首歌曲才可以进入下首歌曲,所以要在这首歌曲演唱完之前,改变开关状态;

(4)每首歌曲句末为1,2是判断是否加停顿和换歌;

(4)为防止程序太长,超出跳转地址,每次判断都跳到Wo处,简短程序;

(6)小键盘的程序需要看懂如何判别是那个健,最终值存入al中,根据al的值为1-7定义数据段1-7的频率,用si+al*2的值作为地址即可取出相应频率。

(7)1-7之外的数据不要等待,1-7的键入后,去掉停顿,按键长按则一直发生,可控制长短调。

2.实验心得

本次试验从最开始的尝试到最后全部完成,历经很长时间,做了很多努力,让我们都非常欣慰,在做实验的过程中,不断尝试,优化,大大提高了我们的团队合作能力和专业知识的掌握,关键是学和玩相结合,设计的过程虽然有点辛苦,但都很开心,我认为这点很重要。

希望每次的实验都可以从兴趣而发,以乐趣结束,不再为书本而苦恼。

相信我们会越做越好。

另外感谢老师的耐心指导,给了我们很大的帮助。

本次课设圆满成功。

四.参考文献

微机原理及应用马平姚万业王柄谦中国电力出版社2003年4月第一版

 

附录

程序代码设计

DATASEGMENT

TIME_CTREQU0A003H;8253地址

TIME_R0EQU0A000H

TIME_R1EQU0A001H

OUTBITequ09002h;位控制口

IN_KEYequ09001h;键盘读入口

Musicdw0,3816,3401,3030,2865,2551,2273,2024

KeyTable:

;键码定义

db16h,15h,14h,0ffh

db13h,12h,11h,10h

db0dh,0ch,0bh,0ah

db0eh,03h,06h,09h

db0fh,02h,05h,08h

db00h,01h,04h,07h

FREQ1DW2,3816,3816,2551,2551,2273,2273,2551,2;小星星

DW2865,2865,3030,3030,3401,3401,3816,2

DW2551,2551,2865,2865,3030,3030,3401,2

DW2551,2551,2865,2865,3030,3030,3401,2

DW3816,3816,2551,2551,2273,2273,2551,2

DW2865,2865,3030,3030,3401,3401,3816,1

FREQ2DW2,3816,3401,3030,3816,3816,3401,3030,3816,2;两只老虎

DW3030,2865,2551,2,3030,2865,2551,2

DW2551,2273,2551,2865,3030,3816,2

DW2551,2273,2551,2865,3030,3816,1

 

FREQ3DW2,3030,3030,2865,2551,2551,2865,3030,3401,3816,3816;欢乐颂

DW3401,3030,3030,3401,3401,2

DW3030,3030,2865,2551,2551,2865,3030,3401,3816,3816

DW3401,3030,3401,3816,3816,1

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAL,00110111B;8253初始化

MOVDX,TIME_CTR

OUTDX,AL

MOVDX,8003H;8255初始化

MOVAL,90H

OUTDX,AL

W0:

MOVDX,8000H;开关判断

INAL,DX

ANDAL,03H

CMPAL,0

JNAMLoop;电子琴

CMPAL,01H

JNASONG1;歌曲1

CMPAL,02H

JNASONG2;歌曲2

JMPSONG3;歌曲3

SONG1:

LEASI,FREQ1

JMPW1

SONG2:

LEASI,FREQ2

JMPW1

SONG3:

LEASI,FREQ3

JMPW1

W1:

MOVAX,[SI];取节奏

MOVDX,TIME_R0

OUTDX,AL

MOVAL,AH

OUTDX,AL

INCSI

INCSI

CALLDELAY1

MOVAX,2;关扬声器一次

MOVDX,TIME_R0

OUTDX,AL

MOVAL,AH

OUTDX,AL

CALLDELAY2

CMP[SI],2;判断句停顿

JZW2

CMP[SI],1;判断歌曲是否结束

JNZW1

JMPW0;若歌曲结束重新判断

W2:

CALLDELAY2

JMPW1

DELAY1PROCNEAR;音长

MOVBX,400

LP1:

MOVCX,200

LP2:

LOOPLP2

DECBX

JNZLP1

RET

DELAY1ENDP

DELAY2PROCNEAR;字间隔

MOVBX,100

LP11:

MOVCX,200

LP22:

LOOPLP22

DECBX

JNZLP11

RET

DELAY2ENDP

MLoop:

callTestKey;有键入?

jeMLoop;无键入,继续显示

callGetKey;读入键码

cmpal,1;判断键盘是否为1~7

jlMLoop

cmpal,7

jaMLoop

movsi,offsetMusic;取键盘节奏首地址

movah,0

movbx,ax

addbx,bx;dw字

movax,[bx+si]

movdx,0a000h;8253计数器0初值

outdx,al

moval,ah

outdx,al

calldelay

MOVAX,2;关扬声器一次

MOVDX,0a000h

OUTDX,AL

MOVAL,AH

OUTDX,AL

JMPW0;判断开关

TestKeyprocnear

movdx,OUTBIT

moval,0

outdx,al;输出线置为0

movdx,IN_KEY

inal,dx;读入键

notal

andal,0fh;高四位不用

ret

TestKeyendp

GetKeyprocnear

movch,00100000b

movcl,6

KLoop:

movdx,OUTBIT

moval,ch;找出键所在列

notal

outdx,al

shrch,1

movdx,IN_KEY

inal,dx

notal

andal,0fh

jneGoon_;该列有键入

deccl

jnzKLoop

movcl,0ffh;没有键按下,返回0ffh

jmpExit1

Goon_:

deccl

shlcl,2;键值=列X4+行

movch,4

LoopC:

testal,1

jnzExit1

shral,1

inccl

decch

jnzLoopC

Exit1:

movdx,OUTBIT

moval,0

outdx,al

movch,0

movbx,offsetKeyTable

addbx,cx

moval,[bx];取出键码

ret

GetKeyendp

delayPROCNEAR;按键音长

pushbx

MOVBX,200

LP13:

MOVCX,200

LP23:

LOOPLP23

DECBX

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

当前位置:首页 > 解决方案 > 学习计划

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

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