微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx

上传人:b****6 文档编号:7492365 上传时间:2023-01-24 格式:DOCX 页数:12 大小:107.59KB
下载 相关 举报
微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx_第1页
第1页 / 共12页
微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx_第2页
第2页 / 共12页
微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx_第3页
第3页 / 共12页
微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx_第4页
第4页 / 共12页
微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx

《微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx》由会员分享,可在线阅读,更多相关《微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx(12页珍藏版)》请在冰豆网上搜索。

微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯.docx

微型计算机课程设计设计并实现随音乐伴奏而按某种规律显示的彩灯

《微机系统与汇编语言》

课程设计

 

(题目)

 

姓名

班级

学号

 

20**/12/26

 

内容要求:

一.设计内容

设计并实现随音乐伴奏而按某种规律显示的彩灯。

二.设计要求

①.用实验箱上的8253控制扬声器发声,演唱3首不同的歌曲。

②.通过实验箱上的8255A驱动二极管发光。

③.发光二极管的闪烁以音调的不同而不同

④.通过中断信号选择歌曲。

 

三.总体设计

1.设计思路:

1>本次实验应用了8254,8255,8259芯片组

2>8254用于计数和连接扬声器,用计数器1实现音乐播放的控制,方式3。

提供因每个音符频率不同而产生的音乐输出,片选信号接到系统总线的IOY2(端口地址为0680)

3>8255A驱动二极管发光,伴随音乐而变换。

用B口作输出,片选信号接到系统总线的IOY0(端口地址为0600H)

4>8259采用级联方式,提供中断控制歌曲的切换,主片的中断类型号为68H,接MIR7.从片中断类型号为70H,接SIR1。

每按一次MIR7或SIR1,切换一首歌。

5>共有三首歌,0-友谊地久天长,1-祝你生日快乐,2-两只老虎,从第一首开始播放,然后判断有无中断,没有就继续播,有就判断计数器的值,大于等于3就重置为0(第一首),否则就用计数器的值找下一首要播放的歌曲的频率表、时间表、彩灯的控制表,然后取出播放新的音乐。

 

2.硬件连接图

我的改为片选CS接IOY2,用的计数器1,即把GATE0、CLK0、OUT0改为GATE1、CLK1、OUT1

我的片选信号CS接到IOY0,用的B口输出,即把PA0---PA7改为PB0---PB7

3.软件流程图

4.

4.程序代码

IOY0EQU0600H

IOY2EQU0680H

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

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

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

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

MY8259_ICWEQU20H

;MY8255_AEQU0600H

MY8255_BEQU0602H

MY8255_CONEQU0606H

SSTACKSEGMENTSTACK

DW32DUP(?

SSTACKENDS

DATASEGMENT

COUNTSONGDB0

INT_FLAGDB0

FREQ_LISTDWFREQ_ONE

TIME_LISTDWTIME_ONE

FREQ_ONEDW393,393,441,393,525,495;频率表

DW393,393,441,393,589,525

DW393,393,786,661,525,495,441

DW350,350,661,525,589,525,0

TIME_ONEDB4,2,5,5,5,10;时间表

DB3,2,5,5,5,10

DB2,4,5,5,5,3,3

DB4,1,5,5,5,10

LED_ONEDB25,23,03,44,75,26,07,08,19

DB01,05,63,04,05,06,47,08,09

DB01,32,03,46,02,06,54,08,29

DB01,62,03,34,25,06,67,28,09

DB01,02,83,04,05,46,37,68,09

DB01,62,03,24,05,06,57,58,09,42,34

FREQ_SECDW262,294,330,262,262,294,330,262;频率表

DW330,350,393,330,350,393,393,441,393,350,330,262

DW393,441,393,350,330,262,262,393,262,262,393,0

TIME_SECDB6,6,6,6,6,6,6,6;时间表

DB6,6,12,6,6,12,4,2,4,2,6,6

DB4,2,4,2,6,6,6,6,12,6,6,12

LED_SECDB01,62,03,34,25,06,67,28,09

DB01,02,83,04,05,46,37,68,09

DB01,62,03,24,05,06,57,58,09,42,34

DB25,23,03,44,75,26,07,08,19

DB01,05,63,04,05,06,47,08,09

DB01,32,03,46,02,06,54,08,29

 

FREQ_THIRDDW371,495,495,495,624,556,495,556,624;频率表

DW495,495,624,742,833,833,833,742,624

DW624,495,556,495,556,624,495,416,416,371

DW495,833,742,624,624,495,556,495,556,833

DW742,624,624,742,833,990,742,624,624,495

DW556,495,556,624,495,416,416,371,495,0

TIME_THIRDDB4,6,2,4,4,6,2,4,4;时间表

DB6,2,4,4,12,1,3,6,2

DB4,4,6,2,4,4,6,2,4,4

DB12,4,6,2,4,4,6,2,4,4

DB6,2,4,4,12,4,6,2,4,4

DB6,2,4,4,6,2,4,4,12

LED_THIRDDB01,05,63,04,05,06,47,08,09

DB01,32,03,46,02,06,54,08,29

DB01,62,03,34,25,06,67,28,09

DB25,23,03,44,75,26,07,08,19

DB01,02,83,04,05,46,37,68,09

DB01,62,03,24,05,06,57,58,09,42,34

SING_FREQDWFREQ_ONE,FREQ_SEC,FREQ_THIRD

SING_TIMEDWTIME_ONE,TIME_SEC,TIME_THIRD

LED_TABDWLED_ONE,LED_SEC,LED_THIRD

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

MOVAX,0000H

MOVDS,AX

 

;MIR7

MOVAX,OFFSETMIR7;取中断入口地址

MOVSI,006FH*4;中断矢量地址,低位存偏移地址

MOV[SI],AX;填IRQ7的偏移矢量

MOVAX,CS;段地址

MOVSI,006FH*4+2;高位存段地址

MOV[SI],AX;填IRQ7的段地址矢量

;SIR1

MOVAX,OFFSETSIR1

MOVSI,71H*4

MOV[SI],AX

MOVAX,CS

MOVSI,71H*4+2

MOV[SI],AX

CLI;中断允许标志置0

POPDS

;初始化主片8259

MOVAL,11H

OUT20H,AL;ICW1,11H=00010001,IRx为上升沿触发,多片8259级联,需要ICW4

MOVAL,68H

OUT21H,AL;ICW2,68H=01101000,程序设定的中断类型码的高5位内容为01101,中断源为?

?

?

MOVAL,04H

OUT21H,AL;ICW3仅用于8259的级联方式,04H=00000100,IR2上接有从片8259

MOVAL,05H

OUT21H,AL;ICW4,01H=00000101,优先级管理采用正常的完全嵌套方式,非缓冲方式,作为从片,非自动中断结束方式

MOVAL,6BH

OUT21H,AL;OCW1用来设置中断源的屏蔽状态,6BH=01101011,IR4和IR7没被屏蔽,主片IR2不屏蔽

;初始化从片

MOVAL,11H

OUT0A0H,AL;ICW1

MOVAL,70H

OUT0A1H,AL;ICW2

MOVAL,02H

OUT0A1H,AL;ICW3

MOVAL,01H

OUT0A1H,AL;ICW4

MOVAL,0FDH

OUT0A1H,AL;OCW1=11111101从片IR1不被屏蔽

STI;中断允许标志置1

;初始化8254

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,76H;00110110设置定时器1,先读写低8位,后读写高8位,工作方式3,软硬件启动

OUTDX,AL

;初始化8255

MOVDX,MY8255_CON;初始化8255工作方式

MOVAL,80H;10000000B口工作在方式0,做输出

OUTDX,AL

MOVAX,DATA

MOVDS,AX

AA1:

NOP

JMPPLAY1

;CALLBEGIN

JMPAA1

;子程序功能

MIR7:

PUSHAX

MOVINT_FLAG,0FFH

INCCOUNTSONG;增量加(加1)

CMPCOUNTSONG,3;比较

JCRETT;条件转移,有进位(借位)转移

MOVCOUNTSONG,0;大于等于3时,从第0首歌开始唱

SIR1:

PUSHAX

MOVINT_FLAG,0FFH

INCCOUNTSONG;增量加(加1)

CMPCOUNTSONG,3;比较

JCRETT;条件转移,有进位(借位)转移

MOVCOUNTSONG,0;大于等于3时,从第0首歌开始唱

;---------是那首歌就唱哪首歌----------

RETT:

MOVAH,1

MOVAL,COUNTSONG

;----------

ORAL,30H

INT10H

MOVAL,20H

;-----------

OUT20H,AL;中断结束命令

OUT0A0H,AL

POPAX

IRET

;----------使程序顺序执行---------

PLAY1:

XORBX,BX

MOVBL,COUNTSONG

SHLBX,1

MOVBP,BX

MOVSI,DS:

SING_FREQ

MOVDI,DS:

SING_TIME

MOVBX,DS:

LED_TAB

;MOVBX,DS:

LED_TAB[BP]

;MOVSI,SING_FREQ

;MOVDI,SING_TIME

 

;响应中断

SONG1:

CMPINT_FLAG,0H

JZPLAY

MOVINT_FLAG,0H

XORBX,BX

MOVBL,COUNTSONG

SHLBX,1

MOVBP,BX

MOVSI,DS:

SING_FREQ[BP]

MOVDI,DS:

SING_TIME[BP]

MOVBX,DS:

LED_TAB[BP]

 

;MOVBX,DS:

LED_TAB[BP]

;-------------------------------------;

;CMPINT_FLAG,0H

;JZSONG0

;MOVINT_FLAG,0H

;XORBX,BX

;MOVBL,COUNTSONG

;ADDBX,OFFSETSING_FREQ

;MOVSI,[BX]

;ADDBX,OFFSETSING_TIME

;MOVDI,[BX]

 

PLAY:

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

MOVAX,4240H

MOVDX,0FH

DIVWORDPTR[SI]

MOVDX,MY8254_COUNT1

OUTDX,AL;装入计数初值

MOVAL,AH

OUTDX,AL

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

CALLDALLY

MOVAX,BX

MOVDX,MY8255_B

OUTDX,AL;从B口输出音符到LED

ADDSI,2

INCDI

INCBX

;POPBX

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

JEPLAY1

JMPSONG1

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

 

DALLYPROC;延时子程序

D0:

MOVCX,0010H

D1:

MOVAX,0F00H

D2:

DECAX

JNZD2

LOOPD1

DECDL

JNZD0

RET

DALLYENDP

CODEENDS

ENDSTART

四.心得体会

通过课程设计我对8259A、8254、8255等芯片有了更深刻的认识。

对于实验中用到的8255,8254,8259等芯片都有了较为深刻的认识,知道了如何使用这几个芯片,对于它们的初始化,赋初值,写命令字都有了较为熟悉的了解,对于8254,8055的端口地址以及命令字格式都已经差不多记下来了,使用8253芯片,主要是用来得到我们需要的音乐频率,8255工作方式控制字用来设定A、B口和C口的数据传送方向是输入还是输出,设定各口的工作方式是3种方式的哪一种。

对于8253芯片作为计数器的用法基本上已经掌握,相关的操作命令能相对熟练的运用,对于8255芯片作为并行输入输出的本质有了一定的了解,对8255的A口,B口,C口做不同的输入输出工作的具体应用有了一定的经验

因为之前几次实验都是针对单个芯片,虽然当时很多有疑问的地方都差不多弄明白了,但是综合起来应用的能力还是欠缺,通过这次的课程设计,我把课本的知识应用在了实践中,并且取得了预期的成果,不仅把自己所学知识进行了一次检验,同时锻炼了自己的动手实践能力,为自己以后将知识学以致用提供了很好的经验和借鉴。

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

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

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

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