音乐霓虹灯.docx
《音乐霓虹灯.docx》由会员分享,可在线阅读,更多相关《音乐霓虹灯.docx(16页珍藏版)》请在冰豆网上搜索。
音乐霓虹灯
目录
摘要…………………………….…………………………….….........…………………..……...I
第1章设计思路.........................................……….………………………….…..….………….1
第2章设计原理流程图.................….……..….…………………………….…..….…………..3
第3章主要芯片介绍………..….…..…...………………….…..….……………………….......3
3.1可编程的并行接口8255.................…………….………...…….…………..…………….3
3.1.18255的引线图.................…………….……………………………………………….3
3.1.28255的控制字.................…………….………………………………………….……5
3.1.38255的内部结构......…………….…………………………………………….……...6
3.28254可编程计数器/定时器.............…………………………………………………..…..8
3.2.18254的内部结构和引线图.................……....……………………………………..…8
第4章实际硬件接线图....................................……..….……..….………….…..…………….10
第5章源程序清单及注释……………………..………………………………………………11
设计总结..………….…………………………..….……...………..….……….......................15
致谢……………………………………………………………………………………………...16
参考文献.…………….…………………..….…..……………….……………………………...17
第1章设计思路
2.1设计思路
(1)霓虹灯的亮灭
我所设计的模拟霓虹灯主要是以亮灭的个数设计的,这可以利用可编程并行8255来实现的,8255初始化为方式0,A口输入,B口输出。
利用A口输入的高低电平进行选择音乐的播放。
随着音乐频率的变化控制亮灭的个数,通过十进制与十六进制之间的转换,将选择好的音乐各个不同的十进制频率转换成微机所需的十六进制,并且通过设计好的程序将演奏中的频率与转换后的十六进制数进行比较,从而确定各频率下所对应的LED彩灯所亮的个数不同,再利用循环语句,使音乐继续演奏,当音乐结束时,利用比较语句使其返回到演奏的起始位置,周而复始,循环执行下去。
(2)音乐的演奏
利用8254来实现音乐的演奏。
事先利用一些课程设计资料查找出一段简单的曲目频率表以及时间表,并赋予好名字,以备调用时的方便,初始化8254的工作方式,使其选择定时器0,工作方式3,及先读/写低字节,后读/写高字节。
然后将音乐片段的起始频率地址和时间地址装入到对应的指针当中,并通过调用延时子程序控制,最后输入时钟频率,使其音乐正常演奏,并与LED彩灯配合使用,达到LED彩灯的亮灭个数随着音乐频率的不同而不同的目的。
第2章设计原理流程图
音乐霓虹灯流程
图2.1系统流程图
第3章主要芯片介绍
3.1可编程的并行接口8255
8255是一种比较常见的并行接口芯片。
8255有三个8位的输入输出端口通常将A端口作为输入用,B端口作为输出用,C端口作为辅助控制用。
能在以下三种方式下工作:
方式0——基本输入/输出方式、方式1——选通输入/输出方式、方式2——双向选通工作方式。
在使用8255芯片前,必须先对其初始化即首先要写入控制字。
本设计使8255端口A、B工作方式为0均为输出。
通过不断的改变端口数据从而实现流水灯的效果。
3.1.18255的引线图
图3.18255引线图
8255的引脚功能:
8255采用40条引脚的双列直插式(DIP)封装,其引脚信号有:
⑴PA0~PA7:
为A端口的8条输入/输出引脚。
A口外设双向数据线;
⑵PB0~PB7:
为B端口的8条输入/输出引脚。
B口外设双向数据线;
⑶PC0~PC7:
为C端口的8条输入/输出引脚。
C口外设双向数据线;
⑷D0~D7:
双向数据信号线,用来传送数据和控制字和系统数据总线相连与CPU侧连接的八条双向数据线;
⑸
:
为片选信号线,只有当其
有效时,读出信号
与写入信号
才对8255有效。
(低电平有效)——片选输入信号;
⑹
:
为写信号线,CPU通过OUT指令使其有效,与其他信号线一起实现对8255接口的写操作,将数据或状态信息从CPU中写入8255。
(低电平有效)——写输入信号;
⑺
:
为读出信号线,CPU通过IN指令使其有效,与其他信号线一起实现对8255接口的读操作,将数据或状态信息从8255中读到CPU。
(低电平有效)——读输入信号;
⑻A0,A1:
为端口选择信号线,8255内部有3个数据端口和1个控制端口,共4个端口。
片内寄存器选择输入信号;
A1
A0
RD
WR
CS
操作功能
0
0
0
1
0
端口A数据总线
0
1
0
1
0
端口B数据总线
1
0
0
1
0
端口C数据总线
0
0
1
0
0
数据总线端口A
0
1
1
0
0
数据总线端口B
1
0
1
0
0
数据总线端口C
1
1
1
0
0
数据总线控制寄存器
1
1
0
1
0
非法操作(控制口不能读)
X
X
1
1
0
数据总线浮空
X
X
X
X
1
未选中8255
表3.1可编程并行芯片8255各种操作功能组合
3.1.28255的控制字
1.8255控制字
8255控制字有两类。
一类用于各端口的工作方式,称为方式选择控制字;另一类用于对PC口的任一位进行置位或复位操作,称为置位或复位控制字。
对8255进行编程时这两种控制字都被写入控制寄存器中。
但方式选择控制字的D7位总是“1”,而置位或复位控制字的D7位总是“0”。
8255正是利用这一位来区分这两个字的。
因此,D7位被称为控制字的标志位。
(1)方式选择控制字
8255具有三种基本工作方式,在对8255初始化编程时,应向控制字寄存器写入方式选择控制字,用来规定8255个端口的工作方式。
这三种基本工作方式是:
方式0—基本输入/输出方式
方式1—选通输入/输出方式
方式3—双向总线I/O方式
当系统复位时,8255的RESET输入端为高电平,使8255复位,所有的数据端口都被置成输入方式;当复位信号撤出后,8255继续保持复位时预知的输入方式。
如果希望他以这种方式工作,就不用另外进行初始化。
通过用输出指令对8255控制字进行编程,写入方式控制字。
对三个数据口的方式工作进行设定时,PA口的工作方式没有限制;PB口只能工作与方式0或方式1;PC口可以被分成两个4位的端口,除了做一般的输入输出口,还可为PA口和PB口提供联络信号。
方式选择字的格式如图所示。
其中,D7位为标志位,它必须等于“1”;D6D5位用于选择PA口的工作方式;D2位用于选择PB工作方式;其余4位分别用于选择PA.PB.PC口的输入/输出方式,置“1”表示输入,置“0”表示输出。
(2)置位/复位控制字
PC口具有位控功能。
将置位/复位控制字写入控制寄存器,就可以把PC口的某一位置“1”或清“0”。
PC口置位/复位控制字的格式,如图所示。
在PC口置位/复位控制字中D3、D2、D1、三位用来选择PC口的某一位。
D0位规定对改位是进行置“1”操作还是清“0”操作。
例如当置位/复位控制字位00000111B时,其意义是把PC3置“1”。
图3.2方式选择控制字
3.1.38255的内部结构
1、数据接口
8255A有3个8位数据接口,即接口A、接口B和接口C。
使用者可以用软件使它们分别作为输入端口和输出端口。
(1)端口A:
一个8位数据输入锁存器和一个8位数据输出锁存器、缓冲器,用来传送数据。
输入或输出时,数据均被所存。
(2)端口B:
一个8位数据输入缓冲器和一个8位数据输出锁存器、缓冲器,用来传送数据。
数据输入时不被锁存,数据输出时被锁存。
(3)端口C:
一个8位数据输入缓冲器和一个8位数据输出锁存器、缓冲器。
用作输入端口时,数据不被锁存;而作为输出端口时数据被锁存。
在使用时,端口A和端口B常常作为独立的输入端口或者输出端口,而端口C常常通过控制命令被分成两个4位端口,它们分别来为端口A和端口B提供控制信号和状态信号。
2、A组和B组控制
这两组控制电路一方面接收芯片内部总线上的控制字,一方面接收来自读\写控制逻辑电路的读\写命令,从而决定两端口的工作方式和读\写操作。
其中,A组控制电路控制端口A和端口C高4位(PC7-PC4)的工作方式和读\写操作;而B组控制电路控制端口B和端口C低4位(PC3-PC0)的工作方式和读\写操作。
3、读写控制逻辑电路:
用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
4、数据总线缓冲器:
这是个双向三态8位数据缓冲器,8255A通过它与系统数据总线相连。
输入数据、输出数据、CPU发给8255A的控制字都是通过这个缓冲器传递的。
图3.38255内部结构
3.28254可编程计数器/定时器
可编程定时器/定时器在微机系统中,常被用来产生时间间隔标志的时序发生器,用于定时中断、动态RAM的定时刷新、扬声器的发声、定时采样等控制。
特别是,在多任务分时系统中,作为任务切换的中断信号;在实时控制系统中,作为输出的周期取样信号或对外部事物进行计数等。
显然,定时器计数器在计算机系统中是个关键部件。
在8086系统中,普遍采用Intel8253、8254、MC146818、82380等器件作为系统的时序发生器。
8254器件的引脚均为24根、双列直插式封装,功能上也几乎相同。
他们都具有三个独立的计数器和定时器使用,并且可按二进制或BCD码格式计数。
另外,8254有读回功能,它可锁存计数器和计数器的状态。
3.2.18254的内部结构和引线图
图3.4内部结构框图和引脚图
上图是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。
8254的工作方式如下述:
(1)方式0:
计数到0结束输出正跃变信号方式。
(2)方式1:
硬件可重触发单稳方式。
(3)方式2:
频率发生器方式。
(4)方式3:
方波发生器。
(5)方式4:
软件触发选通方式。
(6)方式5:
硬件触发选通方式。
8254的控制字有两个:
一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。
这两个控制字共用一个地址,由标识位来区分。
当读回控制字的D4位为0时,由该读回控制字D1~D2位指定的计数器的状态寄存器内容将被锁存到状态寄存器中。
第4章实际硬件接线图
图4.18254电子发声(音乐)实验接线图
图4.28255LED彩灯实验接线图
第5章源程序清单及注释
IOY3EQU06C0H
IOY1EQU0600H
MY8254_COUNT006C0H;8254计数器0端口地址
MY8254_COUNT106C2H;8254计数器1端口地址
MY8254_COUNT206C4H;8254计数器2端口地址
MY8254_MODE06C6H;8254控制寄存器端口地址
MY8255_A0600H;8255计数器A端口地址
MY8255_B0602H;8255计数器B端口地址
MY8255_C0604H;8255计数器C端口地址
MY8255_MODE0606H;8255控制寄存器端口地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
;歌曲1频率表
FREQ_LISTDW495,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
DW371,495,495,495,624,556,495,556,624
DW742,624,624,742,833,990,742,624,624,495
DW556,495,556,624,495,416,416,371,495,0
;歌曲1时间表
TIME_LISTDB4,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
;歌曲2频率表
FREQ_LIST1DW330,330,330,330,330,330,330,393,262,294,330,350,350,350,350
DW350,330,330,330,330,330,294,294,262,294,393,330,330,330,330
DW330,330,330,393,262,294,330,350,350,350,350,350,330,330,330
DW330,330,294,0
;歌曲2时间表
TIME_LIST1DB4,4,8,4,4,8,4,4,6,2,16,4,4,6,2
DB4,4,4,2,2,4,4,4,4,8,8,4,4,8,4,4
DB8,4,4,6,2,16,4,4,6,2,4,4,4,2,2
DB4,4,4
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVBL,00H
MOVDS,AX
MOVDX,MY8254_MODE
ASSUMECS:
CODE,DS:
DATA
;初始化8254工作方式,选择定时器0、方式3
MOVDX,MY8254_MODE
MOVAL,36H
OUTDX,AL
;初始化8255工作方式,选择A口输入、B口输出
MOVDX,MY8255_MODE
MOVAL,90H
OUTDX,AL
;选择歌曲
XIE:
MOVDX,MY8255_COUNT0
INAL,DX
MOVDX,MY8255_COUNT1
OUTDX,AL
CALLDALLY
CMPAL,01H
JZBEGIN
JMPBEGIN1
;装入歌曲1的频率表起始地址和时间表起始地址
BEGIN:
MOVSI,OFFSETFREQ_LIST
MOVDI,OFFSETTIME_LIST
JMPGO
;装入歌曲2的频率表起始地址和时间表起始地址
BEGIN1:
MOVSI,OFFSETFREQ_LIST1
MOVDI,OFFSETTIME_LIST1
;音乐演奏程序
GO:
MOVDX,0FH;输入时钟为1MHz,1M=0F4240H
MOVAX,4240H
DIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率
MOVDX,MY8254_COUNT0
OUTDX,AL;装入计数初值
MOVAL,AH
OUTDX,AL
MOVDL,[DI];取出演奏相对时间,调用延时子程序
CALLDALLY
CMPAX,189H;音乐与所设频率进行比较来确定所亮彩灯个数
JEPC6
CMPAX,15EH
JEPC5
CMPAX,14AH
JEPC4
CMPAX,126H
JEPC3
CMPAX,14AH
JEPC2
CMPAX,15EH
JEPC1
ADDSI,2
INCDI
CMPWORDPTR[SI],0;判断是否到曲末?
JEXIE
JMPGO
PC1:
MOVAL,01H
MOVDX,MY8255_B
OUTDX,AL
DALLYPROC
PC2:
MOVAL,03H
MOVDX,MY8255_B
OUTDX,AL
DALLYPROC
PC3:
MOVAL,07H
MOVDX,MY8255_B
OUTDX,AL
DALLYPROC
PC4:
MOVAL,0FH
MOVDX,MY8255_B
OUTDX,AL
DALLYPROC
PC5:
MOVAL,1FH
MOVDX,MY8255_B
OUTDX,AL
DALLYPROC
PC6:
MOVAL,3FH
MOVDX,MY8255_B
OUTDX,AL
DALLYPROC
;延时子程序
DALLYPROC
D0:
MOVCX,0010H
D1:
MOVBX,0FF0H
D2:
DECBX
JNZD2
LOOPD1
DECDL
JNZD0
RET
DALLYENDP
CODEENDS
ENDSTART
设计总结
时间总是过得很快,为期一周的微机原理及应用实习已经结束了,这短短的一个星期确实让人觉得很辛苦,但更多的是受益颇多。
在整个课程设计的过程中,它让我觉得自己脱离课本的禁锢,不再死硬的去背诵各种原理,能够以自己的方式去实现一个程序,这个过程让我这真正理解了、明白了这个程序,也达到了预期的目的,增强了我的动手能力,并将理论和实际相结合。
微机原理及接口应用是一门实践性较强的课程,在学完该课程之后,进行一次课程设计,使我们将课堂所学的知识和实际运用有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高了分析和解决实际问题的能力。
我们的设计题目是音乐霓虹灯,由第一天的迷茫到第二天的找不到头绪,再到第三天程序初步成型,第四天最后的调试,这整个过程都让我印象深刻。
现在想来真是一个艰辛但充实的过程,这其中不仅有不知所措的迷茫,无从下手的困惑,也有解决问题后的喜悦,与同伴之间合作的愉快。
在知道这个课题的时候,我们着实为难了一阵,查找了很多资料、工具书和参考书,了解相关的流程。
但是写程序和读程序毕竟不一样,我们根本不知道该从哪里下手。
经过我们的努力钻研,老师的指导,并通过多次的实验,我们终于将程序完成了。
但在调试的过程中,我们又发现了许多问题。
再此过程中我们一点点的改正,一点点的完善,遇到弄不清楚的问题就去请教老师,或者查阅资料最后终于将程序完成。
修改程序的过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对程序的调试要一步一步来,不能急躁,这次实习给我们提供了一个将自己所学知识应用到实际当中的机会,从查找资料到对程序的设计再到最后程序的成型,都对我所学的知识进行了检验,只有熟练地掌握课本上的知识,这样才能对设计中出现的问题进行分析解决。
通过这次历时一个星期的微机原理课程设计,在这个星期的学习过程中,我发现了自己的很多不足,所学知识有很多漏洞,看到了自己的实践经验还是比较缺乏。
在这充实的一周中,我觉得自己不仅经历了一次设计这么简单的事情,也是在对自己思维锻炼能力的培养,要求思维缜密,一丝不苟,这样才能够做到正确满足要求的程序。
更重要的是在这一周里我对微机原理这门学科中不熟悉的知识得到了巩固,对已掌握的知识有了更深的认识和理解,为我的期末复习打下坚实的基础。
这次的课程设计让我感触颇深,我相信在以后的日子里,这次课程设计不会就这样简单的过去,它将会在未来的日子里让我受益良多。
致谢
感谢我的指导老师曲乐声老师在此次课程设计中给予我细心和耐心的指导。
在曲老师的指导下,我发现了自己设计中的许多错误和缺陷,并在老师的悉心教导之下解决了问题,而且在设计方案的变更上也给了我很多建议,拓宽了我的思路,纠正了我的错误想法。
同时我也要感谢我们小组的另一位同学,在我遇到困难的时候耐心的帮助我鼓励我,让我重拾信心。
正是因为有了你们的帮助,我才能顺利的完成这次的微机原理及应用课程设计。
最后,再次由衷的感谢你们对我的帮助和支持,谢谢你们!
参考文献
[1]王惠中.微机原理及应用.武汉:
武汉大学出版社,2011
[2]邹逢兴.微型计算机原理与接口技术实验指导.北京:
清华大学出版社,2009
[3]赵全利,吕建平,邹雪艳.微型计算机原理及接口技术.北京:
机械工业出版社,2009
[4]何宏.微型计算机原理与接口技术.陕西:
西安电子科技大学出版社,2009