资源预览内容
第1页 / 共62页
第2页 / 共62页
第3页 / 共62页
第4页 / 共62页
第5页 / 共62页
第6页 / 共62页
第7页 / 共62页
第8页 / 共62页
第9页 / 共62页
第10页 / 共62页
亲,该文档总共62页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
IBM-PC汇编语言程序设计第十章 图形与发声系统的程序设计任课教师:陶雪丽 xueli_xl126.com*1河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计本章内容提要 显示方式视频显示存储器EGA/VGA图形程序设计通用发声程序乐曲程序Date2河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.1 显示方式 1 1显示分辨率2 2BIOS设置显示方式Date3河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.1.1 显示分辨率Date4河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.1.2 BIOS设置显示方式Date5河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.2 视频显示存储器 1 1图形存储器映像2 2数据到颜色的转换3 3直接视频显示Date6河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.2.1 图形存储器影像Date7河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.2.2 数据到颜色的转换Date8河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.2.3 直接视频显示Date9河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.3 EGA/VGA图形程序设计1 1读写像素2 2图形方式下的文本显示3 3彩色绘图程序4 4动画显示技术Date10河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.3.1 读写像素Date11河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.3.2 图形方式下的文本显示Date12河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.3.3 彩色绘图程序Date13河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.3.4 动画显示技术Date14河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.4 通用发声程序1 1可编程时间间隔定时器2 2扬声器驱动方式3 3通用发声程序4 480X86 PC的时间延迟Date15河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计主要内容可编程时间间隔定时器8253/54(programmable interval timer , PIT),能根据程序提供的计数值和工作模式,产生各种 形状和各种频率的技术/定时脉冲,提供给系统的各个部件使用。例如,它可以产生不同频率的脉冲作为扬声器的声源。本节先介绍计算机发声的原理,然后在10.5节介绍乐曲的编程 方法。Date16河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.4.1 可编程时间间隔定时器8253/54在8253/54定时器内部有:3个独立工作的计数器:Counter0,Counter1,Counter2 ,每个计数器都分配一个端口地址,分别为40H、41H、42H。一个公用的控制寄存器,端口地址为43H。端口地址输入到8253/54的CS,A1,A0端,分别对3个计数器和 控制器寻址。如图10.7所示的8253/54的编程结构。Date17河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计对8253/54编程首先设定控制字,以选择计数器,确定工作模式和计数值的格 式。8253/54的三个计数器是分别编程的,在对任何一个计数 器编程时,首先将控制字节写入控制寄存器。以选择计数器,确定输出 什么样的脉冲波形。向选定的计数器送入一个8位或16位的计数初值,由于 8253/54的数据总线是8位的,所以要用两条输出指令来写入初值 。Date18河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计8253/54的控制器D0选择计数值的格式。D3、D2、D1选择操作模式。六种模式决定了输出脉冲 的形状。D5、D4读写指示位。 计数器锁存:锁定当前计数值,以便读出; 只读/写高字节(MSB); 只读/写低字节(LSB); 先读/写LSB,紧接着读/写MSB。D7、D6选择计数器。确定控制字对那一个计数器进行初始化。Date19河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计图10.8 8253/54的控制格式Date20河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计8253/54的初始化程序例10.12计数器0初始化程序段计数器1初始化程序段计数器2初始化程序段Date21河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.4.2 扬声器驱动方式PC机上大多数I/O都是由主板上的8255(或8255A)可编程 外围接口芯片(PPI)管理的。PPI包括三个8位寄存器:两个输入寄存器,端口地址分别是60H、62H;一个输出寄存器,端口地址为61H。由PPI输出寄存器中的,也就是61H端口的D0、D1位来控 制扬声器的驱动方式。见图10.9扬声器驱动系统。Date22河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计声音产生方式位触发方式:直接控制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时,扬声器发声。Date23河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.4.3 通用发声程序BIOS中的BEEP子程序:只能发出896Hz的声音;产生的音长只能是0.5s的倍数。编写通用发声程序应该:能发出任意频率的声音,可由1193100给定频率 12348C给定频率计算出来。声音的持续时间更易于调整。利用CPU来产生延迟时间是 最常用的一种方法。通用发声程序 例10.13Date24河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.4.4 80X86 PC的时间延迟IBM采用了一种利用硬件产生时间延迟的方法,这种方法产 生的时间延迟与处理器无关。即通过61H端口的PB4,使PB4每15.08微秒触发一次,以产生 一个固定不变的时间基准。在IBM PC AT BIOS中的WAIT子程序,就是一个产生N15.08微 秒时间延迟的程序。调用WAIT子程序时,CX必须装入15.08微秒的 倍数N。例10.14 修改后的GENSOUNDDate25河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.5 乐曲程序1 1音调与频率和时间的关系2 2演奏乐曲的程序3 3键盘控制发声程序Date26河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.5.1 音调与频率和时间的关系组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所 需要的两个数据。音符的频率可从图10.10中查到。实际送入计数器2的是输入频率1.1931MHz与音符频率相除的值 ,通用发声程序SOUNDF的前半部分就是完成这个计算,并将计数值 送入计数器2的功能。音符的持续时间是根据乐曲的速度及每个音符的节拍数来确 定的。Date27河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计音符的持续时间在4/4(四四拍)中,四分音符为1拍,每小节4拍,全音符 持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续 半拍等。如果全音符分配1s(10010ms)的时间,则二分音符的持 续时间为0.5s(5010ms),四分音符的持续时间为0.25s ( 2510ms),八分音符的持续时间为0.125s (12.510ms)。Date28河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.5.2 演奏乐曲的程序编写乐曲程序可分为四个步骤:为演奏乐曲定义一个频率表和一个节拍时间表。频 率表可从图10.10中查到,节拍表中的数据是延迟时间 10ms的倍数;分别将两个表的偏移地址放入SI和BP;从表中取出音符的频率放入DI,取出音符的持续时 间(实际上是10ms的倍数)放入BX。乐曲的结束符可以 用数据0FFFFH表示,也可以用0或其他特定值来代替。调用SOUNDF子程序发出音调。例10.15 演奏乐曲程序MUSICDate29河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计10.5.3 键盘控制发声程序音符和频率之间又一定的对应关系,如果计算机键盘上 的某些键和音符、频率形成一种对应关系,则可通过键盘控 制扬声器发出各种音符声音,这是就可用计算机键盘弹奏出 简单的音乐了。例10.16是一个八度音程的钢琴程序。这里让数字键18对应一个音阶的八个音符。Date30河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计练习与作业P398 习题练习: 10.11、10.13、10.17、10.18Date31河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计图10.7 8253/54的编程结构 每个计数器包含一个16位的、 倒计数方式计数的计数寄存器 ,即从计数初值开始逐次减1 ,直到减为0为止。在IBM PC机中,8253/54的: CLK0CLK2的输入频率都是 1.1931817MHz; GATE0、GATE1接5V; GATE2与8255(可编程外围接 口芯片)的端口PB0相连。Date32河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计例10.12-1;将计数器0设定为模式3,计数初值为4282(BCD)MOVAL , 00110111B OUT43H , AL MOVAX , 4282 OUT40H , AL MOVAL , AH OUT40H , ALDate33河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计例10.12-2;将计数器2设定为模式3,计数初值为65536MOVAL , 10110110B OUT43H , AL SUBAL , AL OUT42H , AL OUT42H , ALDate34河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计计时器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的初始化程序如下:Date35河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计计时器0的初始化程序-222TIMEREQU40H E277B036695MOVAL , 36H E279E643696OUTTIMER+3 , AL E27BB000697MOVAL , 0 ;WRITE LSB TO TIMER0 REG E27DE640698OUTTIMER , AL ;WRITE MSB TO TIMER0 REG E284E640704OUTTIMER , ALDate36河南师范大学计算机与信息技术学院IBM-PC汇编语言程序设计计时器1的初始化程序-1计数器1作为定时器,其输出脉冲用作DRAM刷新的定时信号。在IBM PC中,刷新DRAM的任务由8237 DMA来完成。DMA要求每隔15微秒刷新一次,这样,OUT1的输出频率应当是 66.2K
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号