8253定时器计数器接口与数字电子琴
- 格式:doc
- 大小:42.50 KB
- 文档页数:6
一、内容摘要设计一个电子琴。
利用数字键1、2、3、4、5、6、7作为电子琴键,按下数字键发出相应的音调。
二、课程设计的目的和意义1、进一步掌握定时器编程和应用。
2、了解微机利用定时器产生音乐的基本方法。
三、课程设计的要点和内容1、根据音阶频率表,利用定时器可以产生相应频率的脉冲信号,不同频率的脉冲信号经驱动电路放大后,就会发生不同的音调。
2、对于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值:本次课设要求设计一个电子琴,作为一个乐器,其最基本的功能就是能够发出一个音阶的所有声音,即:do,re,mi,fa,so,la,xi,dou,8个音符,不同的声音的本质就是不同频率的波,每个音符都对应着固定的频率;而声音的长短即是波的个数。
所以得出的一条思路是:用汇编语言来产生一系列频率不同的方波信号,找到各个音符的频率,然后用汇编语言产生同频信号,并将该信号输入到扬声器,如果驱动功率不够则可以加放大电路。
四、硬件电路设计1、单元电路设计:硬件结构应结合软件方案一并考虑,做到软件、硬件功能相匹配。
在DJ-598K 三合一单片机微机试验仪平台上,硬件设计参考方案如下:2、电路工作原理:2.1可编程8253计数器(1)在计算机的引用中,常常要对外设的某些信号进行计数,希望计算机既能控制技术的过程,还有能读取计数的结果,进而作为控制或管理的决策依据。
如果被计数的信号有了准确的固定的周期,就形成了定时器。
(2)图为8253的内部组成和引脚。
如图所示,与外部的连接线主要分布在右侧的三个部分,即:三个计数器。
其中CLK为计数通道的输入脉冲信号,对于8253来说的频率范围是0—2MHz。
GATE为门控信号,用来启动或禁止计数工作,高电平有效,不同的工作方式,作用也不同。
Out为输出信号,用来输出波形,不同的工作方式,不同的工作方式,输出的波形也不同;而与CPU的的内部接线主要分布在左侧的三个部分。
汇编与微机接口技术试验二、实验项目名称:用8253、8255、8259和8251实现电子琴的自动弹凑和手动弹凑三、实验学时:2学时四、实验原理:用8253做定时器输出音频信号,控制喇叭发出声音。
利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调.五、实验目的:a)加强8088CPU的汇编程序设计b)加强对8253定时/计数器芯片的应用理解c)加强对8255可编程并口芯片的应用理解d)加强对8259可编程中断控制器芯片的应用理解e)加强对8251可编程串口芯片的应用理解f)了解计算机发声原理六、实验内容:a)利用8088外接8253可编程定时器/计数器音符音频的频率输出,用8255的PA口接8只按键,作为电子琴1、2、3、4、5、6、7、i数字键按键,编程完成按下数字键按键即发出相应的音调。
b)利用8251串口实现与PC机的超级终端程序通讯,可在PC上按键大写字母‘A’能转换为自动弹凑,大写字母‘M’能转换为手动弹凑,在手动弹凑方式下,能用PC机的1、2、3、4、5、6、7、8按键替代试验箱按键弹凑音乐。
七、实验器材(设备、元器件):DVCC试验箱,PC机;八、实验步骤:a)、阅读ppt掌握理解试验内容;b)、按照试验要求连接电路;c)、连接试验箱与电脑主机;d)、打开试验所需软件,输入代码;f)、运行,观察实验结果;九、实验数据及结果分析:1.该实验主要程序段如下:CODE SEGMENTCS_8259_P0 EQU 20HCS_8259_P1 EQU 21HCS_8255_CTRL EQU 73HCS_8255_PA EQU 70HCS_8253_CTRL EQU 4BHCS_8253_CH0 EQU 48HCS_8253_CH2 EQU 4AHCS_8251_STAT EQU 51HCS_8251_DATA EQU 50HASSUME CS:CODEORG 1000HSTART: JMP MAINMODE DB 0 ;0为手动弹凑模式,非0为自动手动弹凑模式TONELEN DW 0TONEFR DW 2,3030,2865,2551,2273,2024,1912,1704,1517,1433,1276,1136,1012 TABLE DB 42H,82H,82H,82H,84H,02H,72HDB 62H,72H,62H,52H,48HDB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2HDB 12H,0A2H,0D2H,92H,88HDB 82H,0B2H,0B2H,0A2H,84H,02H,72HDB 62H,72H,62H,52H,44H,02H,12HDB 12H,62H,62H,52H,44H,02H,82HDB 72H,62H,52H,32H,48HDB0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FHENDTAB DB 00HMAIN: CALL I8253ACALL INTSETCALL I8259ACALL I8255ACLDMOV AX,SEG TABLEMOV DS,AXLEA DI,ENDTABMOV AL, 0CMP MODE,ALJZ MAN_PLAYAUTO_PLAY:LEA S I,TABLESOUND:IN AL, CS_8251_STATTEST AL, 00000010BJZ NEXT1IN AL, CS_8251_DATACMP AL, 'M'JNZ NEXT1MOV AL,1MOV MODE,ALJMP MAN_PLAYNEXT1:LODSBMOV BX,AXMOV CX,AXAND CX,0FHAND BX,0F0HSHR BX,1SHR BX,1SHR BX,1; SHR BX,1MOV AX,TONEFR[BX]CALL OUTTONEMOV AX,10MUL CXMOV WORD PTR TONELEN,AXDELAY: MOV AX,WORD PTR TONELENCMP AX,0JNE DELAYCMP SI,DIJNE SOUNDJMP AUTO_PLAYMAN_PLAY:MOV AX,0MOV TONELEN, AXIN AL, CS_8251_STATTEST AL, 00000010BJZ CHK8255IN AL, CS_8251_DATACMP AL, 'A'JNZ NEXT2MOV AL,0MOV MODE,ALJMP AUTO_PLAYNEXT2: CMP AL, 31HJL CHK8255CMP AL, 38HJG CHK8255SUB AL, '0'MOV AH, 0MOV BX,AXSHL BX,1MOV AX,TONEFR[BX]CALL OUTTONEJMP MAN_PLAYCHK8255:K1: MOV DX, CS_8255_PA ;PA端口地址IN AL, DX ;读开关的状态TEST AL, 01H ;判是否是K1闭合JZ K2 ;不是转K2MOV AX, 2273 ;是K1闭合送“1”音频数据1/440.00HZJMP KEYDOWNK2: IN AL, DX ;读开关的状态TEST AL, 02H ;判是否是K2闭合JZ K3 ;不是转K3MOV AX, 2024 ;是K2闭合送“2”音频数据1/493.88HZJMP KEYDOWNK3: IN AL, DX ;读开关的状态TEST AL, 04H ;判是否是K3闭合JZ K4 ;不是转K4MOV AX, 1805 ;是K3闭合送“3”音频数据1/554.37HZJMP KEYDOWNK4: IN AL,DX ;读开关的状态TEST AL, 08H ;判是否是K4闭合JZ K5 ;不是转K5MOV AX, 1704 ;是K4闭合送“4”音频数据1/587.33HZJMP KEYDOWNK5: IN AL, DX ;读开关的状态TEST AL, 10H ;判是否是K5闭合JZ K6 ;不是转K6MOV AX, 1517 ;是K5闭合送“5”音频数据1/659.26HZJMP KEYDOWNK6: IN AL, DX ;读开关的状态TEST AL, 20H ;判是否是K6闭合JZ K7 ;不是转K7MOV AX, 1353 ;是K6闭合送“6”音频数据1/739.99HZJMP KEYDOWNK7: IN AL,DX ;读开关的状态TEST AL, 40H ;判是否是K7闭合JZ K8 ;不是转K8MOV AX, 1205 ;是K7闭合送“7”音频数据1/830.61HZJMP KEYDOWNK8: IN AL, DX ;读开关的状态TEST AL, 80H ;判是否是K8闭合JZ NOKEY ;不是转K1MOV AX, 1136 ;是K8闭合送“8”音频数据1/880.30HZJMP KEYDOWNFREQ DW 0 ;保存前次设置频率NOKEY: JMP MAN_PLAYMOV AX, 2 ; 关闭发音KEYDOWN:CMP FREQ,AXJE NOKEYMOV FREQ,AXCALL OUTTONEJMP MAN_PLAYOUTTONE PROC NEAR ;按音频数据设置定时器时间常数PUSH AX ; 键码压栈MOV AL, 36H ; 计数器0, 16位二进制,方式3(方波)。
信息工程学院《微机原理与接口技术》课程考核论文(设计)题目:电子琴指导教师:史先桂专业班级: 10计科特色班B组学号姓名: 1042157130 陈效龙1042157131 (组长)程蜜蜜1042157132 杜欢欢日期: 2012年5月28日摘要随着科学技术的迅猛发展,计算机在各个领域的应用越来越广泛。
计算机已成为人们生活、学习、工作的必备工具,计算机技术成为每一个专业技术人员必备的知识。
本次专业课程设计作为前阶段学习知识的一个检验,培养了我们的动手能力以及独立思考设计的能力,也是大学培养的一个重要实践步骤。
设计初期,我们通过网络,图书馆以及利用所学知识等资源查找设计制作电子琴的相关信息,对不同的方案进行细致的分析比较。
并且按照题意与实际情况进行改进,使之符合要求。
制作过程中发现的一些问题通过共同的分析研究得到的解决,此次课程设计巩固了前期的理论知识,增强了动手实践能力。
本电子琴实验包括了对8253、8255等可编程器件的编程,电子琴是由8253计数器、8255A以及扬声器和键盘的数字键组成的,8255对播放的控制以及键盘对声音的控制等操作。
设计先从硬件,软件入手,逐步进行研究和完善,能够基本实现设计任务的要求。
关键字:频率; 电子琴;键盘;8255A;8253计数器ABSTRACTAlong with the rapid development of scientific technology,computer application in all fields more and more widely. The computers have become a people life, study, work the necessary tools, the computer technology to become every professional technology personnel the necessary knowledge.The professional course design as the first stage of the study knowledge one inspection, and train our practical ability and the ability of independent thinking design, is also one of the important university training practice steps. The early design, we through the network, the library and the use of knowledge resources such as search design of electronic information, to a different plan we analyzed and compared. And according to the actual conditions and improved cet4, to comply with the requirements. The production process found some questions through joint analysis research settled, the course design of the consolidated the knowledge, enhance the practical capability.This keyboard experiment included the 8253, 8255A, the programmable deviceof programming, keyboard is from 8253 to 8255 A counter, and the speaker and the keyboard keys of composition, 8255 to play and the control of the keyboard to sound control operation. First the design of the hardware and software of study and improve gradually, to realize the basic tasks for design.KEYWORDS:frequency ;electronic keyboard ;keyboard ;8255A8253 counter目录摘要 (I)ABSTRACT (II)1 功能设计与要求 (1)1.1实现功能 (1)1.2设计要求 (1)2电路原理图与说明 (2)2.1音阶频率表 (2)2.2电路原理图 (2)3软件设计 (3)3.1主要模块流程图 (3)3.2源程序清单与注释 (4)3.3运行结果的分析 (7)小结 (7)参考资料 (8)1 功能设计与要求1.1实现功能利用微机键盘上的数字键1~7作为电子琴键,具有发出do re mi fa sol la si 7个音的功能,对输入的信号,首先判断是否为ESC键,若是直接退出程序,若不是判断是否是1~7键中的任意数字键,若是,程序用键值得到各个音阶的频率值发出相应的音调,按1键发出do音,按2键发出re音,按3键发出mi音,按4键发出fa音,按5键发出sol音,按6键发出la音,按7键发出si音,按其他数字键均不发音且按ESC退出程序。
课程设计说明书题目姓名专业班级系(部)指导老师目录摘要 (1)1 设计任务及要求 (2)2 工作原理 (2)2.1 8253简介 (3)2.28255简介 (4)3设计思路 (4)3.1程序功能描述 (4)3.2程序流程图 (5)3.3DOS/BIOS功能调用 (6)3.3.1INT 16H(键盘I/O中断) (6)3.3.2INT 10H(屏幕及显示器中断) (7)3.3.3 INT 21H(DOS系统功能调用) (8)4 方案比较及论证 (8)5 程序源代码及注释 (8)6 运行结果分析 (11)7 调试过程记录 (12)8 课程设计小结 (13)参考文献 (14)附录 (15)摘要本文通过8255和8253来实现电子琴模拟,主要可以分成两部分,分别为输入部分和发音部分。
输入部分主要是由8255和8个常开型开关来完成。
发音部分由CUP通过对定时器8253的通道2进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低位控制通道2门控的开断,以产生特殊的音响。
本文用到的是8253的方式3——方波发生器。
在程序设计中,为了避免过于频繁的调用中断显示字符串,应用了宏定义;还通过子程序调用,有效的解决了跳转和转移过多的问题;再加上合理的DOS和BIOS功能调用,以及各种指令的综合,最终作出了漂亮的电子琴界面,并实现了电子琴演奏高、中、低音,以及播放预存乐曲的功能。
关键词:电子琴 8253定时器 8255 DOS调用宏定义1 设计任务及要求初始条件:用汇编语言设计一个电子琴,在屏幕上显示出来,界面要美观,功能上模拟现实电子琴功能。
要求完成的主要任务:1.实现弹奏功或演奏。
其中弹奏:用户每按一琴键弹奏相应音符;演奏:按下某键后自动弹奏预存琴谱功能;还可以附加变调2.界面要美观。
2 工作原理PC机扬声器电路以及相关接口电路如图2-1。
图2-1 PC机扬声器电路及相关接口电路通过8255和8253来实现电子琴模拟,主要可以分成两部分,分别为输入部分和发音部分。
实验要求实验:8253定时器/计数器接口与数字电子琴一、实验目的加深对课堂教授内容的理解,掌握汇编语言的语法规则;熟悉所用的计算机系统的操作方法,了解和熟悉8086微处理器的逻辑结构、工作模式、指令系统、汇编语言程序实验、DEBUG程序调试工具;学习上机调试程序的方法和技巧,提高编程能力。
二、实验环境1、操作系统:DOS、windows98/2000/xp2、软件:MASM宏汇编三、实验内容1、内容:根据提供的音乐频率表和时间表,编写程序控制8253,使其输出连接到扬声器上能发出相应的乐曲。
2、说明:一个音符对应一个频率。
将对应一个音符频率的方波通到扬声器上就可发出这个音符的声音。
音符与频率对照表如下图所示:音频率,通过编程来获得声调(频率)和节奏(延时长短),使计算机演奏出音乐来。
)将相应的一种频率的计数初值写入计数器,就可产生对应频率的方波。
计数初值计算如下:计数初值=输入时钟÷输出频率例如输入时钟采用系统总线上CLK(1.041667MHZ),要得到800HZ的频率,计数初值即为1041667/800。
对于每个音符演奏的时间,可以通过软件延时来处理。
8253用于发声的电原理图:3、要求:自选曲目,实现该曲目的演奏功能,完成实验报告(电子版:文件类型*.doc)并提交一份完整的程序清单(文件类型:*.asm);实验报告字数不得少于1200字实验报告内容要求:有实验目的、实验环境、实验内容及主要工作原理(附8253内部结构和引脚图;8253控制字及初始化编程原理;发声程序电路原理图、流程图;主要功能附必要的功能说明。
)、实验步骤、实验总结、参考资料。
三、实验内容实验线路如下图,8253的CLK2接1.19MHz时钟,GATE2接+5V,OUT2接喇叭。
8255的B口PB0 、PB1、PB2、PB3、PB4、PB5、PB6、PB7,分别接开关KK0、KK1、KK2、KK3、KK4、KK5、KK6、KK7,作为电子琴的按键输入。
实验目的
1.通过程序改变定时器的数值来改变声音频率
2.通过编程来获得声调和节奏,使计算机演奏出乐曲来。
硬件设计
利用实验板上的8253计数/定时器和8255并行接口,定时器8253利用工作方式3产生一定频率信号,通过可编程的并行外围接口芯片8255控制频率信号的通断。
8255的A 口设置为输出,8255的A 口的低两位用来控制扬声器驱动,当输出端口的PA0位为“1”或为“0”时,将使控制驱动器的与门电路接通或关闭,使8253所发出的音频信号能到达驱动器或被阻断。
这样通过控制PA0的变化,可使扬声器接通和断开,控制扬声器是否能发出声音。
此外,通过控制PA0的通断时间,就能发出不同的音长。
8255的PA1位为“1”时,控制8253定时器产生驱动扬声器发声的音频信号,该位为“0”则不发信号。
8253有三个定时器,分为0号、1号和2号定时器,驱动扬声器的是0号定时器,该定时器工作在方式3,是一个频率发生器,它负责向扬声器发送指定频率的脉冲信号。
当8255的PA0和PA1都为1时,8253发出指定频率的声音信号的前提下,声音信号通过与门到达驱动器驱动扬声器发声。
硬件原理图如图1所示: 图1 硬件原理图
8253 计数器
与门 扬声器驱动 扬声
器
8255 PA0 8255 PA1 门控
控制喇叭 Q0
扬声器驱动电路如图2所示。
图2 扬声器驱动电路
软件设计
系统要求实现2个功能,电子琴和音乐盒的功能。
两者发声的方法一样,只是一个数据是从键盘读取的,另一个是已经保存好的数据。
首先我们可以用一个子程序实现单个音调的产生,对8253输入不同的计数初值生成不同频率的波形,然后延时一段时间。
电子琴程序主要是读取键盘按键,根据键值产生不同的音调即可。
而乐曲的播放先将乐曲的音符编码表和节拍编码表建立好的,然后在播放时读取数据。
1. 单音调子程序SOUND
单音调子程序的调用前需要进行以下几个方面工作:
1)确定相应的音调所对应的频率,查表可以得到,再由频率得到对应的8253计数初值。
2)确定音长,即一个音符所持续的时间。
在单音调子程序中实现发出一个音符的声音,持续所需的时间,流程图如图3所示:
读取8253计数初值和音长
8253置初值
开启与门和8253GATE
延时
关闭与门和8253GATE
返回
图3 单音调子程序流程图
2.音乐盒程序
音乐盒的乐曲播放程序中需要有两组数据支持:一组是频率数据,一组是节拍时间数据。
音符的频率可以通过简谱从频率表中查得。
节拍时间就是音符的持续时间,取决于乐曲的速度和每个音符的节拍数据。
如4/4(四四拍)中,每小节包括4拍,全音符持续4拍,二分音符持续2拍,四分音符持续一拍,八分音符持续半拍等。
有了音调与频率和时间的关系后,就可以按照乐曲的曲谱将每个音符的频率和持续的时间定义成两组数据表,然后编程依次取出表中的频率值和节拍值,调用单音调子程序就可依次产生各个音调,播放出乐曲。
在程序中存储几个乐曲数据,根据音乐盒子菜单选择相应的乐曲演奏,读取对应的数据输出。
乐曲《两只老虎》的简谱如下:
两只老虎
1=C 4/4
1 2 3 1 | 1 2 3 1 | 3 4 5 - |
3 4 5 - |5654 3 1 |5654 3 1 |
2 5 1 - | 2 5 1 - |
对应的频率数据表Freq、节拍数据表Time如下:
TWOTIGERS_FRE DW 2 DUP(524,588,660,524,0) ;乐曲的频率表
DW 2 DUP(660,698,784,0)
DW 2 DUP(784,880,784,698,660,524,0)
DW 2 DUP(588,392,524,0),1
TWOTIGERS_TIME DW 10 DUP(100),200,100,100,200 ;乐曲的时间表
DW 2 DUP(50,50,50,50,100,100)
DW 2 DUP(100,100,200)
outb_p(0x34,0x43);
outb_p(LATCH&0xff,0x40);
outb_p(LATCH>>8,0x40);
outb(inb_p (0x21) & ~0x01, 0x21); //允许接收定时器中断
}
void do_timer(void)
{
这是定时器主程序,用于每隔一段时间后进行某些操作
}
[8253.asm]:
//以下是nasm格式的汇编代码,这个中断处理函数必须用汇编timer_interrupt:
push gs
push fs
push es
push ds
push ebp
push edi
push esi
push edx
push ecx
push ebx
push eax
如果你不在操作系统下使用,以下三行必须删除,否则必须把0x10更改为内核段选择符
mov eax,0x10
mov ds,ax
mov es,ax
mov al,0x20
out 0xa0,al ;发送EOI
out 0x20,al
call do_timer
pop ebx
pop ecx
pop edx
pop esi
pop edi
pop ebp
pop ds
pop es
pop fs
pop gs
xor eax,eax
iretd
实验体会:
本次实验的主要难处在于汇编程序的编写,但编译通过后看到运行的结果便感到由衷的高兴。
在接好电路,运行程序后,注意按下键后,声音延长作用的长短的变化。
同时增大取正弦波,可以看到延长变大,减小次数,则声音变短,这正是由于取了正弦波数变了的原因。
说明正弦波的个数使声音延长时间的关键。