8284时钟 发生器 8255 1.19MHz方波 并行接口芯片 8253/8254L 61H端口 定时/计数器 与门)驱动器 扬声驱动系统工作原理 61H端口 D0=1控制82532号定时器输出指定频率的方波 D1=1使扬声器的与门电路接通,并保持到D1=0时断开
8284时钟 发生器 8253/8254 定时/计数器 8255 并行接口芯片 7 1 0 与门 驱动器 1.19MHz方波 1 1 扬声驱动系统工作原理 61H端口: D0=1 控制8253 2号定时器输出指定频率的方波 D1=1 使扬声器的与门电路接通,并保持到D1=0时断开。 61H端口
8255有三个数据寄存器,两个用于输入(6OH、62H端口) 一个用于输出(61H端口) 8253有3个定时器(计数通道) 0号定时器(40H端口) 时钟定时 1号定时器(41H端口) 动态存储器刷新定时 2号定时器(42H端口) 向扬声器发送指定频率的脉冲 3H端口—8253的控制寄存器 (2)通用发声程序设计 ROM BIOS中有一个beep子程序,可根据bl给出的分频值 (时间计数值)533H控制8253的2号定时器产生频率为896Hz 的声音,用于“加电自检”时硬件错误报警。依据这样一个事 实,可以找到计算指定频率对应的分频值t的公式: 因为533H 896Hz f 所以t=533H*896H/f=1234DCH/f
8255有三个数据寄存器,两个用于输入(60H、62H端口), 一个用于输出(61H端口)。 8253有3个定时器(计数通道): 0号定时器(40H端口)—— 时钟定时 1号定时器(41H端口) —— 动态存储器刷新定时 2号定时器(42H端口) —— 向扬声器发送指定频率的脉冲 43H端口——8253的控制寄存器 (2)通用发声程序设计 ROM BIOS中有一个beep子程序,可根据bl给出的分频值 (时间计数值)533H控制8253的2号定时器产生频率为896Hz 的声音,用于“加电自检”时硬件错误报警。依据这样一个事 实,可以找到计算指定频率对应的分频值 t 的公式: 所以 t = 533H * 896H / f 因为 533H 896Hz , t f = 1234DCH / f
实现计算分频值的程序: mov ;戶指定频率 mov dx. 12h mov ax. 34dch di di 分频值(商)送AⅩ 时间延续: mov bx, times; times-延续时间计数 IpO p mov Cx, 9801H p loop p de ec bx nz IpO 设计发声子程序两个入口参数,发出指定频率的声音,并 延续一定时间:(di)=给定频率 (bx)=发声时间
实现计算分频值的程序: mov di,f ;f=指定频率 mov dx,12h mov ax,34dch div di 分频值(商)送AX mov bx,times ;times=延续时间计数 lp0: mov cx,9801H lp1: loop lp1 dec bx jnz lp0 时间延续: 设计发声子程序两个入口参数,发出指定频率的声音,并 延续一定时间:(di)= 给定频率 (bx)= 发声时间
通用发声程序完成的三步基本操作 0送0B6H8253/8254的43H端口,设置工作方式。 ②16位分频值—→2号定时器42H端口,使2号定时器产生相 应频率的脉冲信号。 061H端口的D0和D1置1,使扬声器发出指定频率的脉冲信号 并通过与门。 通用发声子程序见教材例5-2(p138) (3)简单的音乐程序设计 设计音乐程序需定义两组数据: 音频频率表、发声时间(节拍)表 如果从音频频率表和发声时间表中依次取出一对数据,作 为入口参数调用通用发声子程序,就可产生出乐曲。 乐曲每个音符与音频频率间的对应关系如表5-2(p139所示 写一个主程序调用通用发声子程序,形成乐曲。例5-3(p139)
通用发声程序完成的三步基本操作: 送0B6H 8253/8254的43H端口,设置工作方式。 16位分频值 2号定时器42H端口,使2号定时器产生相 应频率的脉冲信号。 61H端口的D0和D1置1,使扬声器发出指定频率的脉冲信号 并通过与门。 通用发声子程序见教材 例5-2(p138) (3)简单的音乐程序设计 设计音乐程序需定义两组数据: 音频频率表、发声时间(节拍)表 如果从音频频率表和发声时间表中依次取出一对数据,作 为入口参数调用通用发声子程序,就可产生出乐曲。 乐曲每个音符与音频频率间的对应关系如表5-2 (p139)所示。 写一个主程序调用通用发声子程序,形成乐曲。例5-3(p139)
简谱: 粉刷匠 15353|531-124321|5-- 15353|531-12432|1-- 2244|325-2432|5-- 15353|531-12432|1 ;频率表 mus freq dw3dup(784,660),524,588,698,660,588,784 dw3dup(784,660),524,588,698,660,588,524 dw588.588.698.698.660.588.784.588.698.660 dw588.784 dw3dup(784,60),524,588,698,660,588,524,-1 ;发声时间表 mus time dw4dup(6dup(500),1000,4dup(500),2000)
简谱: | 5 3 5 3 | 5 3 1-| 2 4 3 2 | 5 - - -| | 5 3 5 3 | 5 3 1-| 2 4 3 2 | 1 - - -| | 2 2 4 4 | 3 2 5-| 2 4 3 2 | 5 - - -| | 5 3 5 3 | 5 3 1-| 2 4 3 2 | 1 - - -| ;频率表 mus_freq dw 3 dup( 784, 660 ),524, 588, 698, 660, 588, 784 dw 3 dup(784, 660 ), 524, 588, 698, 660, 588, 524 dw 588, 588, 698, 698, 660, 588, 784, 588, 698, 660 dw 588, 784 dw 3 dup(784, 660), 524, 588, 698, 660, 588, 524, -1 ;发声时间表 mus_time dw 4 dup( 6 dup (500), 1000, 4 dup(500), 2000 ) 粉刷匠