目录 上一页 下一页 下一章

第4章 奇妙的声音 -59-

了91,算出循环终止时的计数值并保存到BX寄存器中。而后在一个循环中反复取计数值,并将低16位同BX中的计数终值相比较,当两者相等时说明已经到了5秒,此时退出循环关闭定时器通道3。这样就完成了5秒钟的发声。
  和用LOOP指令定时相比,这种新的定时方法有很大的优越性:首先这种方法编程方便;其次这种方法在不同的机型上延迟时间都相等,因为PC系列机的08H中断都是每秒18.2次。此方法唯一的不足是最短延迟时间是55Ms,如果想获得更短的延迟时间只能提高08H中断的产生频率,这样的问题比较复杂,本书将不再讨论。
  掌握了控制频率和时间的方法,就可以编制出演奏音乐的程序了。请看下面的乐谱:
  识谱的朋友马上就能唱出这段旋律,将程序MUSIC.ASM编译并运行,计算机也会为你奏出这首动听的歌。
MUSIC.ASM
DATA

FREQ

NOTE


DL_TIME


DATA

CODE

MAIN






SEGMENT
ASSUME DS:DATA
DW 0,4552,4029,3617,3415
DW 3042,2710,2415,2279
DB 3,2,1,2,3,3,3,2,2,2
DB 3,5,5,3,2,1,2,3,3,3
DB 3,2,2,3,2,1,-1
DB 4,4,4,4,4,4,8,4,4,8
DB 4,4,8,4,4,4,4,4,4,4
DB 4,4,4,4,4,8
ENDS

SEGMENT
ASSUME CS:CODE
PROC FAR
MOV AX,DATA
MOV DS,AX

MOV AL,10110110B
OUT 43H,AL




;定义各频率对应的N值


;定义乐谱,-1表示结束


;定义各音符的节拍





;取数据段地址
;设定DS


;初始化8253 TIMER 2

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章