汇编语言两只老虎实验报告.docx
- 文档编号:6077078
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:16
- 大小:131.37KB
汇编语言两只老虎实验报告.docx
《汇编语言两只老虎实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言两只老虎实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
汇编语言两只老虎实验报告
第
三
次
实
验
报
告
姓名:
陈柯吉
学号:
2012141441338
第三次实验8253定时器/计数器与接口实验
------乐曲程序
计算机是如何产生音乐和声响的呢?
原来在计算机中有一个可编程时间间隔定时器8253,它能根据程序提供的计数值和工作模式,产生各种形状和各种频率的计数/定时脉冲,提供给系统的各个部件使用。
它还可以产生不同频率的脉冲作为扬声器的声源。
在8253定时器内部有3个独立工作的计数器:
Counter0,Counter1,Countre2,每个计数器都分配有一个端口地址,分别是40H,41H,42H。
8253内部还有一个公用的控制寄存器,端口地址为43H,端口地址输入到8253的CS,A1,A0端,分别对三个计数器和控制器寻址。
对8253编程时,先要设定控制字,以选择计数器,确定工作模式和计数值的格式,每个计数器由三个引脚与外部联系,CLK为时钟输入端,GATA为门控制信号输入端,OUT为计数/定时信号输入端。
每个计数器是以倒计数的方式计数,也就是说,从计数初值开始逐次减1,直到减为0为止。
端口地址与计数器的关系:
40H
选中计数器0:
作为定时器为系统日时钟提供计时基准
41H
选中计数器1:
作为定时器使用
42H
选中计数器2:
用来控制扬声器发声
43H
公用的控制器:
分别对三个寄存器和控制器寻址
那么,如何触动扬声器发出声音呢?
原来PC机的主音箱上装有一只小喇叭,由定时器8253和并行接口芯片8255(可编程外围接口芯片)控制其发声,8255包括三个8位寄存器,两个用于输入功能,一个用于输出功能。
输入寄存器分配的I/O端口地址为60H和62H,输出寄存器分配的I/O端口地址为61H。
8253定时器计数器2连接到扬声器,其电路如下:
8253DRIVER
1.9318MHZCLK喇叭
OUT2
8255
PB0GATE2
PB1
装入计数器2的计数初值为533H(1.19318MHz/896Hz=1331=533H),这样,得到的控制字为10110110B=0B6H,即选中计数器2,读/写,工作方式三(方波发声器),二进制。
计数器2的初始化程序为:
MOVAL,0B6H
OUT43H,AL
1)计算计数值程序段:
MOVDI,给定频率
MOVDX,12H
MOVAX,34DCH
DIVDI
AX中即为计数值。
2)打开扬声器发声,8255PB0,PBI送出高电平:
INAL,61H
ORAL,3
OUT61H,AL
3)关闭扬声器,停止发声:
INAL,61H
ANDAL,0FCH
OUT61H,AL
两只老虎的音频表定义在数据段中,如下:
STACKSEGMENT
DW100DUP(?
)
STACKENDS
DATASEGMENT
MUSICDW2DUP(262,294,330,262);频率表,1231;1231
DW2DUP(330,349,392);345;345;
DW2DUP(392,440,392,349,330,262);565431;565431
dw2dup(294,196,262),0;251;251,0表示结束
TIMEDW10DUP(250*50),500*50,250*50,250*50,500*50;节拍表
DW2DUP(120*50,120*50,120*50,120*50,250*50,250*50)
DW2DUP(250*50,250*50,500*50)
NEQU32;32个音符
DATAENDS
二.实验目的:
学习8253计数器2输出方波信号用以驱动扬声器发声的原理,通过程序设置计数器2的输出波形的频率和延续时间,控制扬声器的音调和发生长短。
三.实验内容:
1.设计程序让微机演奏一段两只老虎的乐曲。
2.思考如何让PC机演奏一遍,两遍以及数遍这段两只老虎的乐曲,并修改程序实现。
四.实验报告:
整理出运行正确的源程序清单(加以中文注释),并给出详细程序流程图。
开始
输入1~9的数字选择循环次数
打开扬声器
调用延时子程序
关闭扬声器
STACKSEGMENT
DW100DUP(?
)
STACKENDS
DATASEGMENT
MUSICDW2DUP(262,294,330,262);频率表,1231;1231
DW2DUP(330,349,392);345;345;
DW2DUP(392,440,392,349,330,262);565431;565431
dw2dup(294,196,262),0;251;251,0表示结束
TIMEDW10DUP(250*50),500*50,250*50,250*50,500*50;节拍表
DW2DUP(120*50,120*50,120*50,120*50,250*50,250*50)
DW2DUP(250*50,250*50,500*50)
NEQU32;32个音符
MDB?
SAYDB'Pleaseinputthetimes(1~9)youwant:
','$'
SAY2DB'1.TIGERS2.PIANO:
','$'
SAY3DB'ERROR','$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK;说明代码段、数据段、附;加段、堆栈段
START:
MOVAX,DATA;设置数据段的段地址
MOVDS,AX
MOVES,AX
AGA:
LEADX,SAY2
MOVAH,9
INT21H;输出“1.TIGERS2.PIANO”
MOVAH,1
INT21H;输入一个字符
CMPAL,31H
JETIGERS;与一比较,相等则转TIGERS
CMPAL,32H
JEPIANO2;与二比较,相等则转PIANO
MOVDL,0AH;以下三行输入一个回车
MOVAH,2
INT21H
LEADX,SAY3
MOVAH,9
INT21H;显示输出'ERROR'
JMPAGA
TIGERS:
LEADX,SAY
MOVAH,9
INT21H;输出“TINGJIBIAN:
$”
CALLINPUT
A:
CALLSONG
DECM
JNZA;M自减1
JMPQUIT2
PIANO2:
CALLPIANO
;---------------------------------------------------------------------------------------------------------------------
;子程序INPUT
;输入
;---------------------------------------------------------------------------------------------------------------------
INPUTPROC
MOVAH,1
INT21H;输入一个字符
LEASI,M
SUBAL,30H;将ASCII码转为16进制数
MOV[SI],AL
RET
INPUTENDP
;---------------------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------------------
;子程序SONG
;播放音乐
;---------------------------------------------------------------------------------------------------------------------
SONGPROC
MOVAL,0B6H
OUT43H,AL;选择计数器2
LEASI,MUSIC
LEADI,TIME
MOVCX,N;循环次数
SONG2:
PUSHCX
PUSHDI
MOVDI,[SI]
MOVDX,12H
MOVAX,34DCH
DIVDI;设置计数初值
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
ORAL,3
OUT61H,AL;打开扬声器
POPDI
MOVCX,20000
CALLDELAY;调用延时子程序
INAL,61H
ANDAL,0FCH
OUT61H,AL;关闭扬声器
ADDSI,2
ADDDI,2
POPCX
LOOPSONG2
SONGENDP
;---------------------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------------------
;子程序DELAY
;延时子程序
;---------------------------------------------------------------------------------------------------------------------
DELAYPROC
PUSHAX
PUSHBX
MOVBX,[DI]
DELAY1:
AGAIN:
LOOPAGAIN
DECBX
JNZDELAY1
POPBX
POPAX
RET
DELAYENDP
;---------------------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------------------
;子程序piano
;---------------------------------------------------------------------------------------------------------------------
PIANOPROC
MOVDL,0AH
MOVAH,2
INT21H
LP:
MOVAH,1
INT21H;输入一个字符
HIGH1:
CMPAL,31H
JNEHIGH2
MOVDI,523
JMPSOUND
HIGH2:
CMPAL,32H
JNEHIGH3
MOVDI,587
JMPSOUND
HIGH3:
CMPAL,'3'
JNEHIGH4
MOVDI,659
JMPSOUND
HIGH4:
CMPAL,'4'
JNEHIGH5
MOVDI,698
JMPSOUND
HIGH5:
CMPAL,'5'
JNEHIGH6
MOVDI,784
JMPSOUND
HIGH6:
CMPAL,'6'
JNEHIGH7
MOVDI,880
JMPSOUND
HIGH7:
CMPAL,'7'
JNEMIDDLE1
MOVDI,988
JMPSOUND
MIDDLE1:
CMPAL,'Q'
JNEMIDDLE2
MOVDI,262
JMPSOUND
MIDDLE2:
CMPAL,'W'
JNEMIDDLE3
MOVDI,294
JMPSOUND
MIDDLE3:
CMPAL,'E'
JNEMIDDLE4
MOVDI,330
JMPSOUND
MIDDLE4:
CMPAL,'R'
JNEMIDDLE5
MOVDI,349
JMPSOUND
MIDDLE5:
CMPAL,'T'
JNEMIDDLE6
MOVDI,392
JMPSOUND
MIDDLE6:
CMPAL,'Y'
JNEMIDDLE7
MOVDI,440
JMPSOUND
MIDDLE7:
CMPAL,'U'
JNELOW1
MOVDI,494
JMPSOUND
LOW1:
CMPAL,'A'
JNELOW2
MOVDI,131
JMPSOUND
LOW2:
CMPAL,'S'
JNELOW3
MOVDI,147
JMPSOUND
LOW3:
CMPAL,'D'
JNELOW4
MOVDI,165
JMPSOUND
LOW4:
CMPAL,'F'
JNELOW5
MOVDI,175
JMPSOUND
LOW5:
CMPAL,'G'
JNELOW6
MOVDI,196
JMPSOUND
LOW6:
CMPAL,'H'
JNELOW7
MOVDI,220
JMPSOUND
LOW7:
CMPAL,'J'
JNEQUIT1
MOVDI,247
JMPSOUND
QUIT1:
CMPAL,1BH
JEQUIT2
JMPLP
SOUND:
MOVDX,12H
MOVAX,34DCH
DIVDI;设置计数初值
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
ORAL,3
OUT61H,AL;打开扬声器
POPDI
MOVCX,20000
CALLDELAY;调用延时子程序
INAL,61H
ANDAL,0FCH
OUT61H,AL;关闭扬声器
JMPLP
;---------------------------------------------------------------------------------------------------------------------
QUIT2:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
输入想播放的遍数
电子琴,A~J低音1~7
Q~U中音1~7
1~7高音1~7
通过本次试验,我对masm的使用更加熟悉,能更好的进行汇编程序设计。
我认为在编写程序前绘制流程图是比较有用的,能使自己在编写时保持清晰的思路。
熟悉各个语句的功能是非常必要的,列如各种中断的调用,虽然书上都有,但是熟练之后对速度提升很大。
并且编写程序时要细心,多做注释标注,方便程序的调试和修改,注意符号的圆角和半角。
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 老虎 实验 报告