微机原理课程设计.docx

上传人:b****6 文档编号:7156006 上传时间:2023-01-21 格式:DOCX 页数:18 大小:151.90KB
下载 相关 举报
微机原理课程设计.docx_第1页
第1页 / 共18页
微机原理课程设计.docx_第2页
第2页 / 共18页
微机原理课程设计.docx_第3页
第3页 / 共18页
微机原理课程设计.docx_第4页
第4页 / 共18页
微机原理课程设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

微机原理课程设计.docx

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

微机原理课程设计.docx

微机原理课程设计

摘要

 

微机原理课程设计——设计简易电子琴

本实验是利用微机原理试验箱、8255芯片、8254芯片、键盘、扬声器等硬件设备,设计简易电子琴。

首先利用了编程程序,编辑了8255芯片控制字,对其进行初始化,使其工作在方式0,即基本输入输出状态,将8255的A端口设置为输出,C端口进行,经CPU运算后,输出到8254芯片中,由此实现对其的初始化。

将8254芯片设置为工作在方式3,即输出对称方波状态。

A端口为输入,“OUT”指令可将输出对应一定频率的方波送到扬声器中,由此实现发声。

本实验通过频率大小控制发出声音的高低,通过对延时程序的调用控制发出声音的长短。

并通过所编程序实现对键盘的重复扫描,重而可以弹奏多个音符的试验目的。

 

关键词8254芯片8255芯片电子发声元件键盘

 

目录

摘要……….…………………………………………….….……………………………………1

目录……………………………………………………………………………………………2

1.实验内容......................…………….…………….…………..……………………………3

2.实验要求......................…………….…………….………………………………………..3

3.工作原理…………………………….…....……….....……………………………………3

3.1按键部分…………………………….…....……….....……………………………….3

3.2发声部分…………………………………………………………………………...…3

4.程序流程图………..….…………………….………………………….…..….…….…….4

4.1按键部分………………………………………………………………………….....4

4.2发声部分…………………………………………………………………………...…5

5.硬件连接图及音符频率……………………….…………………………...……………..6

6.芯片简介……………...…………………………….…………………………...………...7

6.18254芯片简介…………………………………………………………………………7

6.28255芯片简介…………………………………………………………………………8

7.程序代码………………………………………………………………………………….10

7.1按键部分代码…………………………………………………………………….…10

7.2发声部分代码…………………………………………………………………...…...14

8.键盘与数码显示管工作原理……………………………...……………………………...17

总结……………………………………………………………………………………………...18

致谢……………..………………….……………………..…….…………...………………….19

参考文献……………..…………….…………………..….…..……………….……………….20

 

正文

1.实验内容:

利用定时/计数器8254实现音乐演奏。

2实验要求:

(1)配合延时和控制程序控制扬声器发声(演奏音乐)。

(2)把键盘当作电子琴按键进行演奏。

3工作原理

3.1按键部分

本程序是通过并行接口芯片8255对键盘进行扫描(对于键盘单元的工作原理见正文第9点),将8255芯片的PA0—PA4,PC0—PC4它们分别与键盘伤的X1—X4,Y1—Y4相连,根据控制字81H,决定工作在方式0,A端口和B端口输出,C端口输入,由其C口将按键情况输入到CPU中,在CPU中进行一系列运算,通过定时器8254将不同频率的波形经OUTO输入到扬声器中,从而实现扬声器的发音。

本实验中8254的工作方式为方式3,输出的波形为对称方波。

由于系统中8254的CLK端已固定接好频率为1MHZ的方波信号,所以要控制其输出端OUT0输出不同的频率只要根据通过写入不同的计数初值就能实现。

公式为:

CLK0端的输入频率/OUT0端的输出频率=计数初值N

通过频率的大小控制音阶的不同,通过延时程序控制发音的长短,由此达到实验要求。

3.2发声部分:

发生部分由8254完成:

一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出这个音符的声音。

将一段乐曲的音符对应频率的方波依次送到扬声器,就可以演奏出这段乐曲。

利用8254的方式3—“方波发生器”,将相应一种频率的计数初值写入计数器,就可产生对应频率的方波。

计数初值的计算如下:

计数初值=输入时钟÷输出频率

例如输入时钟采用1MHz,要得到800Hz的频率,计数初值即为1000000÷800。

音符与频率对照关系如表1所示。

对于每一个音符的演奏时间,可以通过软件延时来处理。

首先确定单位延时时间程序(根据CPU的频率不同而有所变化)。

然后确定每个音符演奏需要几个单位时间,将这个值送入DL中,调用DALLY子程序即可。

4程序流程图

4.1按键部分

 

4.2发声部分

5硬件连接图及音符频率

6芯片简介

6.18254芯片简介

1)D0-D7双向数据线,用以传送数据和控制字。

计数器的计数值亦通过此数据总线进行读写。

2)CS输入信号,低电平有效。

作为片选。

3)RD读控制信号,低电平有效。

4)WR写控制信号,低电平有效

5)A0、A1为8254的内部计数器和一个控制寄存器的编码选择信号

6)CLK0是每个计数器的时钟输入端。

计数器对此时钟信号进行计数。

CLK最高频率可达2MHZ。

7)GATE0-GATE2门控制信号,即计数器的控制输出信号,用来控制计数器的工作。

8)OUT0-OUT2计数器输出信号,用来产生不同方式工作时的输出波形

9)8254具有3个独立的16位计数器,6种不同的工作方式。

计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号。

10)本实验中,我们用到的引脚有:

D0-D7、A0-A1、WR、RD、CS、CLK0、GATE0、OUT0等;设定工作在方式3用来产生方波、应用计数器0。

 

表18254的方式控制字格式

 

表28254读出控制字格式

表38254状态字格式

 

6.28255芯片简介

1)D0~D7:

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

2)PA0~PA7:

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

3)PB0~PB7:

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

4)PC0~PC7:

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

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

5)CS:

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

6)RD:

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

7)WR:

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

8)RESET:

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

9)A1、A0:

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

10)本实验用到的引脚有PA0-PA3、PC0-PC3、D0-D7、A0、A1、WR、RD、CS、和GND;设定工作在方式0,A口输出、B口输出、C口低4位输入。

 

8255内部结构及引脚

表48255工作方式控制字图

 

7程序代码

7.1按键部分代码

MY8255_AEQU0600H

MY8255_BEQU0602H

MY8255_CEQU0604H

MY8255_MODEEQU0606H

MY8254_MODEEQU06C6H

MY8254_AEQU06C0H;进行宏定义

MYDATASEGMENT

CHUSHUDW441D,495D,556D,589D,661D,742D,833D,882D,221D,248D,278D,294D,330D,371D,416D,-1D

MYDATAENDS;建立数据段MYDATA

MYCODESEGMENT;建立数据段MYCODE

ASSUMECS:

MYCODE,DS:

MYDATA

START:

MOVAX,MYDATA

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;调用扫描子程序

JNZNUM1;有键按下时跳到NUM1

JMPBEGIN;没键按下时循环执行

;BEGIN

;========================================

;确定按下键的位置

;========================================

NUM1:

CALLCCSCAN

JNZNUM2;有键按下时跳到NUM2

JMPBEGIN;没键按下时循环执行BEGIN

NUM2:

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;为了后面用来与CHUSHU

;数据段中数对应

JMPKCODE;强制跳转到KCODE

L2:

TESTAL,02H;检验按下键是否在L2

JNZL3;不是L2则跳到L3

MOVAL,04H;为了后面用来与CHUSHU

;据段中数对应。

JMPKCODE;强制跳转到KCODE

L3:

TESTAL,04H;检验按下键是否在L23

JNZL4;不是L3则跳到L4

MOVAL,08H;为了后面用来与CHUSHU数据段中数对应

JMPKCODE;强制跳转到KCODE

L4:

TESTAL,08H;检验按下键是否在L4

JNZNEXT;不是L4则跳到NEXT

MOVAL,0CH;为了后面用来与CHUSHU

;据段中数对应。

KCODE:

ADDAL,CL;实现AL与CL的无进位加法

MOVDL,2H

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

PLAY:

LEASI,CHUSHU;使SI指向CHUSHU的首地址

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

MOVDX,0FH

MOVAX,4240H;被除数为0F4240H

DIVWORDPTR[SI];除数为SI所指的数据

MOVDX,MY8254_A;将8255的A口地址赋给DX

OUTDX,AL;输出商的低4位

MOVAL,AH

OUTDX,AL;输出商的高4位

MOVCX,8H;输入计数值CX

NEXT3:

CALLDALLY;调用延时子程序DALLY

CALLDALLY

CALLDALLY

CALLDALLY

CALLDALLY

LOOPNEXT3;CX不为0重复执行NEXT3

MOVDX,0FH

MOVAX,4240H;被除数为0F4240H

MOVSI,30D

DIVWORDPTR[SI];除数为SI=30所指的数据

MOVDX,MY8254_A;将8255的A口地址赋给DX

OUTDX,AL

MOVAL,AH

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

JMPBEGIN;跳转到BEGIN,重复扫描

NEXT:

INCCL;使CL加1,为了后面用来与CHUSHU数

;据段中数对应

MOVAL,CH

TESTAL,08H

JZKERR;无键按下时跳转到KERR

ROLAL,1D;向左移位

MOVCH,AL

JMPCOLUM;强制跳转到COLUM

KERR:

JMPBEGIN;跳到BEGIN重新开始扫描

;========================================

;键盘扫描子程序

;========================================

CCSCAN:

MOVAL,00H

MOVDX,MY8255_A

OUTDX,AL;使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出栈

RET

MYCODEENDS;代码段定义结束

ENDSTART;程序结束

 

7.2发声部分代码

;端口定义

IOY3EQU06C0H

IOY1EQU0640H

MY8254_COUNT0EQUIOY3+00H;8254计数器0端口地址

MY8254_COUNT1EQUIOY3+02H;8254计数器1端口地址

MY8254_COUNT2EQUIOY3+04H;8254计数器2端口地址

MY8254_MODEEQUIOY3+06H;8254控制寄存器端口地址

MY8255_AEQUIOY1+00H;8255输入输出0端口地址

MY8255_BEQUIOY1+02H;8255输入输出1端口地址

MY8255_CEQUIOY1+04H;8255输入输出2端口地址

MY8255_MODEEQUIOY1+06H;8255控制寄存器端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

FREQ_LISTDW330,393,525,661,661,700,589,589,786,495,525

DW661,700,786,525,525,589,661,393,525,661,661,700,589

DW589,786,495,525,661,700,786,525,525,589,525,0

TIME_LISTDB4,4,4,4,12,4,16,8,4,4,16

DB4,4,4,4,8,8,16,4,4,4,12,4,16

DB8,4,4,16,4,4,4,4,8,8,16

 

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,MY8254_MODE

;ASSUMECS:

CODE,DS:

DATA

;初始化8254工作方式

MOVAL,36H;定时器0、方式3

OUTDX,AL

MOVDX,MY8255_MODE;初始化8255

MOVAL,90H;A口输入,B口输出

OUTDX,AL

XIE:

MOVDX,MY8255_A

INAL,DX

MOVDX,MY8255_B

OUTDX,AL

CALLDALLY

CMPAL,01H

JZBEGIN

JMPBEGIN

BEGIN:

MOVSI,OFFSETFREQ_LIST;装入频率表起始地址

MOVDI,OFFSETTIME_LIST;装入时间表起始地址

JMPPLAY

 

PLAY:

MOVDX,0FH;输入时钟为1MHz,1M=0F4240H

MOVAX,4240H

DIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率

MOVDX,MY8254_COUNT0

OUTDX,AL;装入计数初值

MOVAL,AH

OUTDX,AL

MOVDL,[DI];取出演奏相对时间,调用延时子程序

CALLDALLY

ADDSI,2

INCDI

CMPWORDPTR[SI],0;判断是否到曲末?

JEXIE

JMPPLAY

DALLYPROC;延时子程序

D0:

MOVCX,0010H

D1:

MOVBX,0FF0H

D2:

DECBX

JNZD2

LOOPD1

DECDL

JNZD0

RET

DALLYENDP

CODEENDS

ENDSTART

 

8键盘与数码显示管工作原理

13

14

15

16

9

10

11

12

5

6

7

8

1

2

3

4

(L4)Y4

如图

(L3)Y3

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

(L2)Y2

Y组对应8255芯片的C口(Y值为1)

(L1)Y1

X1X2X3X4

当有键按下时,该键的X、Y接触,Y值变为0,改变了输入8255芯片C

口的数值,从而与程序中的L1,L2,L3,L4对应,确定按键位置。

实现通过改

变键盘输入来改变8254输出频率,实现扬声器发音。

 

总结

随着科技的进步微机的应用已经很多,由传统的物理实现转变到软件实现,而且起精确程度也大大的提高,且实现方法也越来越简单。

这些则是由汇编语言程序来实现的。

在这里是在学完了《微型计算机原理及应用》,然后进行的课程设计,充分发挥了我的思维,学有所用,将学到的知识真正转化到了实际之中。

先画出硬件设计图,这个过程是基础,然后是流程图,这个是重点,流程图的完成后在依据流程图进行程序的编写。

通过对电子琴程序设计的汇编实现,对硬件特别是8254、8255并行口的原理和实现都有了很深的了解。

更加深了对汇编语言的使用.

以前接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务。

所以在编写程序之前必须有一个完整清晰的思路设计好各个模块所实现的功能。

其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。

在完成我的设计的作品的时候,的的确确发生了很多问题,比如两个题目是否都要做,做哪个?

放弃哪个?

但是最后我们决定挑战一下,两个题目都做!

还有更具体的问题比如说发声单元发声不规律,或者不发声,发声无节奏等等,但是我秉着稳扎稳打的态度,对每一句汇编语言进行修正,和同组的同学进行讨论,最终将发声单元完善,做到能够自动播放音乐,我们组重新编写了曲目,使我们各自有各自的曲目,不重复。

 

致谢

通过这次课程设计我们学到了不少东西,真正认识到了微机原理的重要性,了解到了CPU,8255、8254等芯片功能的强大。

真正的运用自己的双手,完成了上大学以来的第一个运用微机原理试验箱设计而成的作品,收获颇多!

当然,在设计的过程中我们遇到了很多的困难。

然而我们用耐心的去克服,用信心去解决。

并且在解决问题的过程中,学到了很多实际的知识,很多是书本上学不到的,加深了我们对微机原理应用的认识。

以前的上机课上,我们所应用的程序都是很简单的编程,实现的功能都比较简单,而本次课设要求我们掌握的知识比较综合,从分析到编程,再到连线,完完全全是一个独立系统的过程。

所以,在编制程序时遇到很多困难。

在解决问题时我们还体会到充分的调用用周围的资源是多么的重要。

我们的一些问题都是自己首先通过查书查资料,通过图书馆,通过网络来解决的,最后,在还没有解决的情况下,再去问曲老师。

这不仅培养了自己的解决问题的能力,同时,又熟悉了如何利用周边的资源快速有效的去解决问题。

给我最深刻的是作程序的要能够沉的住气,要有耐性!

一周的课程设计虽然短暂,但是我们全心地投入其中,养成了一种敢于钻研敢于创新的习惯,学会了静心钻研,与同组同学相互合作,如此才能把程序设计的更加完整,更加新颖!

通过课程设计,让我在课本的基础上,更深入的了解了各种芯片的用法和程序的完成过程,调试方法及技巧。

可以说是收益匪浅!

最后,衷心的谢谢曲乐声老师对我们的耐心指导,让我们能够顺利的迈进微机原理科学的殿堂,我相信我们会受益终生!

 

参考文献

[1]王惠中.微机原理及应用.武汉:

武汉大学出版社,2011

[2]邹逢兴.微型计算机原理与接口技术实验指导.北京:

清华大学出版社,2009

[3]赵全利,吕建平,邹雪艳.微型计算机原理及接口技术.北京:

机械工业出版社,2009

[4]何宏.微型计算机原理与接口技术.陕西:

西安电子科技大学出版社,

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

当前位置:首页 > 医药卫生 > 药学

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

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