514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt

上传人:土8路 文档编号:11851349 上传时间:2021-09-27 格式:PPT 页数:62 大小:387KB
返回 下载 相关 举报
514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt_第1页
第1页 / 共62页
514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt_第2页
第2页 / 共62页
514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt_第3页
第3页 / 共62页
514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt_第4页
第4页 / 共62页
514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt》由会员分享,可在线阅读,更多相关《514652020汇编语言程序设计第十章图形与发声系统的程序设计.ppt(62页珍藏版)》请在三一文库上搜索。

1、第十章 图形与发声系统的程序设计,河南师范大学计算机与信息技术学院,2,2021/9/27,本章内容提要,河南师范大学计算机与信息技术学院,3,2021/9/27,10.1 显示方式,河南师范大学计算机与信息技术学院,4,2021/9/27,10.1.1 显示分辨率,河南师范大学计算机与信息技术学院,5,2021/9/27,10.1.2 BIOS设置显示方式,河南师范大学计算机与信息技术学院,6,2021/9/27,10.2 视频显示存储器,河南师范大学计算机与信息技术学院,7,2021/9/27,10.2.1 图形存储器影像,河南师范大学计算机与信息技术学院,8,2021/9/27,10.2

2、.2 数据到颜色的转换,河南师范大学计算机与信息技术学院,9,2021/9/27,10.2.3 直接视频显示,河南师范大学计算机与信息技术学院,10,2021/9/27,10.3 EGA/VGA图形程序设计,河南师范大学计算机与信息技术学院,11,2021/9/27,10.3.1 读写像素,河南师范大学计算机与信息技术学院,12,2021/9/27,10.3.2 图形方式下的文本显示,河南师范大学计算机与信息技术学院,13,2021/9/27,10.3.3 彩色绘图程序,河南师范大学计算机与信息技术学院,14,2021/9/27,10.3.4 动画显示技术,河南师范大学计算机与信息技术学院,1

3、5,2021/9/27,10.4 通用发声程序,河南师范大学计算机与信息技术学院,16,2021/9/27,主要内容,可编程时间间隔定时器8253/54(programmable interval timer , PIT),能根据程序提供的计数值和工作模式,产生各种形状和各种频率的技术/定时脉冲,提供给系统的各个部件使用。,例如,它可以产生不同频率的脉冲作为扬声器的声源。,本节先介绍计算机发声的原理,然后在10.5节介绍乐曲的编程方法。,河南师范大学计算机与信息技术学院,17,2021/9/27,10.4.1 可编程时间间隔定时器8253/54,在8253/54定时器内部有: 3个独立工作的计

4、数器:Counter0,Counter1,Counter2,每个计数器都分配一个端口地址,分别为40H、41H、42H。 一个公用的控制寄存器,端口地址为43H。,端口地址输入到8253/54的CS,A1,A0端,分别对3个计数器和控制器寻址。,如图10.7所示的8253/54的编程结构。,河南师范大学计算机与信息技术学院,18,2021/9/27,对8253/54编程,首先设定控制字,以选择计数器,确定工作模式和计数值的格式。,8253/54的三个计数器是分别编程的,在对任何一个计数器编程时,,首先将控制字节写入控制寄存器。以选择计数器,确定输出什么样的脉冲波形。 向选定的计数器送入一个8位

5、或16位的计数初值,由于8253/54的数据总线是8位的,所以要用两条输出指令来写入初值。,河南师范大学计算机与信息技术学院,19,2021/9/27,8253/54的控制器,D0选择计数值的格式。,D3、D2、D1选择操作模式。六种模式决定了输出脉冲的形状。,D5、D4读写指示位。 计数器锁存:锁定当前计数值,以便读出; 只读/写高字节(MSB); 只读/写低字节(LSB); 先读/写LSB,紧接着读/写MSB。,D7、D6选择计数器。确定控制字对那一个计数器进行初始化。,河南师范大学计算机与信息技术学院,20,2021/9/27,图10.8 8253/54的控制格式,河南师范大学计算机与信

6、息技术学院,21,2021/9/27,8253/54的初始化程序,例10.12,计数器0初始化程序段,计数器1初始化程序段,计数器2初始化程序段,河南师范大学计算机与信息技术学院,22,2021/9/27,10.4.2 扬声器驱动方式,PC机上大多数I/O都是由主板上的8255(或8255A)可编程外围接口芯片(PPI)管理的。,PPI包括三个8位寄存器: 两个输入寄存器,端口地址分别是60H、62H; 一个输出寄存器,端口地址为61H。,由PPI输出寄存器中的,也就是61H端口的D0、D1位来控制扬声器的驱动方式。,见图10.9扬声器驱动系统。,河南师范大学计算机与信息技术学院,23,202

7、1/9/27,声音产生方式,位触发方式:直接控制61H的PB1交替为1或为0,以产生一个脉冲电流,经过放大器后控制扬声器交替地接通与断开,从而推动扬声器的纸盆振动,发出不同音高和音长的声音。如例8.1。,利用8253/54定时器来驱动扬声器。连接到扬声器上的是定时器2。,图10.9所示的,Couter2的GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使Counter2在模式3下工作。Couter2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器。即PB1、PB011时,扬声器发声。,河南师范大学计算机

8、与信息技术学院,24,2021/9/27,10.4.3 通用发声程序,BIOS中的BEEP子程序: 只能发出896Hz的声音; 产生的音长只能是0.5s的倍数。,编写通用发声程序应该: 能发出任意频率的声音,可由1193100给定频率12348C给定频率计算出来。 声音的持续时间更易于调整。利用CPU来产生延迟时间是最常用的一种方法。,通用发声程序 例10.13,河南师范大学计算机与信息技术学院,25,2021/9/27,10.4.4 80X86 PC的时间延迟,IBM采用了一种利用硬件产生时间延迟的方法,这种方法产生的时间延迟与处理器无关。,即通过61H端口的PB4,使PB4每15.08微秒

9、触发一次,以产生一个固定不变的时间基准。,在IBM PC AT BIOS中的WAIT子程序,就是一个产生N15.08微秒时间延迟的程序。调用WAIT子程序时,CX必须装入15.08微秒的倍数N。,例10.14 修改后的GENSOUND,河南师范大学计算机与信息技术学院,26,2021/9/27,10.5 乐曲程序,河南师范大学计算机与信息技术学院,27,2021/9/27,10.5.1 音调与频率和时间的关系,组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。,音符的频率可从图10.10中查到。,实际送入计数器2的是输入频率1.1931MHz与音符频率相除的值,通用发声程序S

10、OUNDF的前半部分就是完成这个计算,并将计数值送入计数器2的功能。,音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定的。,河南师范大学计算机与信息技术学院,28,2021/9/27,音符的持续时间,在4/4(四四拍)中,四分音符为1拍,每小节4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续半拍等。,如果全音符分配1s(10010ms)的时间,则二分音符的持续时间为0.5s(5010ms),四分音符的持续时间为0.25s (2510ms),八分音符的持续时间为0.125s (12.510ms)。,河南师范大学计算机与信息技术学院,29,2021/9/27,10.5.

11、2 演奏乐曲的程序,编写乐曲程序可分为四个步骤:,为演奏乐曲定义一个频率表和一个节拍时间表。频率表可从图10.10中查到,节拍表中的数据是延迟时间10ms的倍数; 分别将两个表的偏移地址放入SI和BP; 从表中取出音符的频率放入DI,取出音符的持续时间(实际上是10ms的倍数)放入BX。乐曲的结束符可以用数据0FFFFH表示,也可以用0或其他特定值来代替。 调用SOUNDF子程序发出音调。,例10.15 演奏乐曲程序MUSIC,河南师范大学计算机与信息技术学院,30,2021/9/27,10.5.3 键盘控制发声程序,音符和频率之间又一定的对应关系,如果计算机键盘上的某些键和音符、频率形成一种

12、对应关系,则可通过键盘控制扬声器发出各种音符声音,这是就可用计算机键盘弹奏出简单的音乐了。,例10.16是一个八度音程的钢琴程序。,这里让数字键18对应一个音阶的八个音符。,河南师范大学计算机与信息技术学院,31,2021/9/27,练习与作业,练习: 10.11、10.13、10.17、10.18,河南师范大学计算机与信息技术学院,32,2021/9/27,图10.7 8253/54的编程结构,每个计数器包含一个16位的、倒计数方式计数的计数寄存器,即从计数初值开始逐次减1,直到减为0为止。,在IBM PC机中,8253/54的: CLK0CLK2的输入频率都是1.1931817MHz; G

13、ATE0、GATE1接5V; GATE2与8255(可编程外围接口芯片)的端口PB0相连。,河南师范大学计算机与信息技术学院,33,2021/9/27,例10.12-1,;将计数器0设定为模式3,计数初值为4282(BCD) MOVAL , 00110111B OUT43H , AL MOVAX , 4282 OUT40H , AL MOVAL , AH OUT40H , AL,河南师范大学计算机与信息技术学院,34,2021/9/27,例10.12-2,;将计数器2设定为模式3,计数初值为65536 MOVAL , 10110110B OUT43H , AL SUBAL , AL OUT42

14、H , AL OUT42H , AL,河南师范大学计算机与信息技术学院,35,2021/9/27,计时器0的初始化程序-1,计数器0作为定时器为系统时钟提供计时基准。 计数器0的OUT端与中断控制器8259A的中断请求端IRQ0相连,为IRQ0提供18.2次/秒的中断信号,即OUT0的输出频率应当是 18.2Hz,这正是CLK0的输入频率1.1931817MHz与216相除的结果。 计数器0选择Mode3;读/写LSB、MSB。 则控制字应为:00110110B36H 在IBM PC BIOS中,计数器0的初始化程序如下:,河南师范大学计算机与信息技术学院,36,2021/9/27,计时器0的

15、初始化程序-2,22TIMEREQU40H E277B036695MOVAL , 36H E279E643696OUTTIMER+3 , AL E27BB000697MOVAL , 0 ;WRITE LSB TO TIMER0 REG E27DE640698OUTTIMER , AL ;WRITE MSB TO TIMER0 REG E284E640704OUTTIMER , AL,河南师范大学计算机与信息技术学院,37,2021/9/27,计时器1的初始化程序-1,计数器1作为定时器,其输出脉冲用作DRAM刷新的定时信号。 在IBM PC中,刷新DRAM的任务由8237 DMA来完成。 DM

16、A要求每隔15微秒刷新一次,这样,OUT1的输出频率应当是66.2KHz,因为CLK1的输入频率1.1931817MHz,所以计数初值应为18( 1.1931817MHz /18=66.2KHz)。 在Mode2下,OUT1连续输出周期为15微秒的定时信号,这个定时信号就作为DRAM的刷新请求信号。 则控制字应为:01010100B54H 在IBM PC BIOS中,计数器1的初始化程序如下:,河南师范大学计算机与信息技术学院,38,2021/9/27,计数器1的初始化程序-2,MOVAL , 54H OUT43H , AL MOVAL , 18 OUT41H , AL,河南师范大学计算机与信

17、息技术学院,39,2021/9/27,计数器2的初始化程序-1,计数器2用来控制扬声器发声。 在IBM PC 中有个BEEP子程序,它在Mode3下,能产生频率为896Hz的声音,装入计数器2的计数初值为533H(1.19318MHz/896Hz=1331=533H),这样得到的控制字为10110110B=0B6H。 即Counter2,LSB和MSB,Mode3,二进制格式。 BIOS中计数器2的初始化程序如下:,河南师范大学计算机与信息技术学院,40,2021/9/27,计数器2的初始化程序-2,MOVAL , 0B6H OUT43H , AL MOVAL , 33H OUT42H , A

18、L MOVAL , 05 OUT42H , AL,河南师范大学计算机与信息技术学院,41,2021/9/27,图10.9 扬声器驱动系统,河南师范大学计算机与信息技术学院,42,2021/9/27,控制扬声器的代码,INAL , 61H MOVAH , AL ORAL , 00000011B;turn on OUT61H , AL; the speaker ;how long the beep sound goes here ;get the original setting of port B ;turn off the speaker MOVAL , AH OUT61H , AL,对IBM

19、 PC及兼容机来所,80X86系列机,驱动扬声器的过程都是相同的。 至于音调发出的时间量(音长),则取决于它延迟的时间,这个延迟时间可以在PC机的80 x86主处理器的帮助下实现。,河南师范大学计算机与信息技术学院,43,2021/9/27,发声频率,从10.4.1小节知道,给计数器2装入计数值533H能产生896Hz的声音(1.1931MHz/896Hz=533H),同样,产生其他频率声音的计数值也可以用这种方法计算出来。 假定发声频率存放在DI寄存器中,下面的指令使AX中得到送往定时器2的计数值。 MOVDX , 12H MOVAX , 348CH DIVDI,河南师范大学计算机与信息技术

20、学院,44,2021/9/27,产生延迟时间-1,对8088/86、80286、386、486以及Pentium,它们产生的延迟时间都是不一样的。对基于8088/86的PC/XT,PS/2等PC机,可用下面的代码来产生时间延迟: MOVCX , N DELAY:LOOPDELAY,在8088/86CPU中,执行一条LOOP指令需要17个时钟周期,因此执行上面的指令大约需要N17T时钟周期。若N2800,系统频率为4.7MHz(时钟周期约为212ns),那么得到的延迟时间为10ms(280017212ns)。,河南师范大学计算机与信息技术学院,45,2021/9/27,产生延迟时间-2,;在BI

21、OS中,利用上述方法来产生250ms延迟时间的程序如下: SUBCX , CX G7:LOOPG7;65535212ns17236ms,如果要产生与10ms成倍数的延迟时间,可在BX寄存器中放入倍数。例如,要产生1s的持续时间,可在BX中放入100,以控制LOOP执行1002800次,也就是10ms的100倍。指令如下: MOVBX , 100 WAIT:MOVCX , 2800 DELAY:LOOP DELAY DECBX JNZWAIT,河南师范大学计算机与信息技术学院,46,2021/9/27,例10.13-1,这是一个任一频率(由DI指定)和任意持续时间(由CX和BX指定)的通用发声程

22、序。 它包括三个步骤: 在8253/54中的43H端口送一个控制字0B6H(10110110B),该控制字对定时器2进行初始化,使定时器2准备接收计数初值。 在8253/54中的42H端口(Timer2)装入一个16位的计数值(533H896/频率),以建立将要产生的声音频率。 把输出端口61H的0、1两位置1,发出声音。 通用发声程序GENSOUND,如下:,河南师范大学计算机与信息技术学院,47,2021/9/27,例10.13-2,publicgensound csegsegmentparacode assumecs:cseg gesoundprocfar pushax pushbx p

23、ushcx pushdx pushdi moval , 0b6h out43h , al movdx , 12 movax , 348ch,河南师范大学计算机与信息技术学院,48,2021/9/27,例10.13-3,divdi out42h , al moval , ah out42h , al inal , 61h movah , al oral , 3 out61h , al wait1:movcx , 2800 delay:loopdelay decbx jnzwait1,河南师范大学计算机与信息技术学院,49,2021/9/27,例10.13-4,moval , ah out61h

24、, al popdi popdx popcx popbx popax ret gensoundendp csegends end,河南师范大学计算机与信息技术学院,50,2021/9/27,GENSOUND程序产生的声音不仅与输入频率有关,而且与CPU有关。,如果80 x86的工作频率为8MHz,则T=125ns(1/8MHz125ns),那么该程序产生的时间延迟就要短的多。,在80286中,LOOP指令只需8个执行周期,这也会使延迟时间短的多。,因此从PC/AT开始,对所有的80286/80386/80486/Pentium计算机,IBM都提供一种利用硬件产生时间延迟的方法,这种方法不仅与频

25、率无关,也与CPU无关。10.4.4小节将介绍这种方法。,河南师范大学计算机与信息技术学院,51,2021/9/27,WAIT子程序,;(CX)=Count of 15.08s WAITFPROCNEAR PUSHAX WAITF1: INAL , 61H ANDAL , 10H CMPAL , AH JEWAITF1 MOVAH , AL LOOPWAITF1 POPAX RET WAITF1ENDP,在80 x86各种型号PC机中,61H端口既可作为输入寄存器, 也可作为输出寄存器;但在8088/86中,该端口只能作输出 寄存器用。,河南师范大学计算机与信息技术学院,52,2021/9/2

26、7,例10.14,;调用WAITF子程序,产生1.5s的延迟时间。 ;因为1.5s的延迟时间需要设置计数值99436(1.5s/15.08 s=99346)而16位寄存器表示的最大数为65535,所以可以连续调用3次产生0.5s延迟的程序。 MOVBL , 03 BACK:MOVCX , 33144;3314415.08 s=o.5s CALLWAITF DECBL JNZBACK,河南师范大学计算机与信息技术学院,53,2021/9/27,修改后的GENSOUND,;可用WAITF代替循环指令来产生延迟。计数值设为663(10ms/15.08 s=663.13)。 SOUNDFPROCFAR

27、 ;same as gensound WAIT1:MOVCX , 663 CALLWAITF ;same as gensound,河南师范大学计算机与信息技术学院,54,2021/9/27,图10.10 两个音阶的琴键,河南师范大学计算机与信息技术学院,55,2021/9/27,SOUNDF前半部分,;(DI)=the desired output frequency MOVAL , 0B6H;启动定时器2 OUT43H , AL MOVDX , 12H;设定计数值 MOVAX , 384CH;即确定发声频率 DIVDI OUT42H , AL MOVAL , AH OUT42H , AL ,

28、河南师范大学计算机与信息技术学院,56,2021/9/27,例10.15-1,.model small .stack64kb .data mus_freqdw330,294,262,294,3dup (330);bar 1bar 5C dw294;D dw330;E dw349;F dw392;G dw440;A dw494;B dw523;C extrnsoundf:far,图10.13,河南师范大学计算机与信息技术学院,60,2021/9/27,例10.16 PIANO-2,.startup new_note: movah , 0;MOVAH , 7 int16h;INT 21H cmpal , 0dh jedone movbx , offset table cmpal , 1 jbnew_note cmpal , 8 janew_note,图10.13,河南师范大学计算机与信息技术学院,61,2021/9/27,例10.16 PIANO-3,andax , ofh shlax , 1 subax , 2 movsi , ax movdi , bxsi movbx , 10 callsoundf jmpnew_note done:.exit0 end,图10.13,河南师范大学计算机与信息技术学院,62,2021/9/27,图10.13 PIANO程序框图,

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1