BB2 PROC NEAR ;8253驱动发声子程序 MOV AL,16H ;计0控制字 OUT 0F6H,AL MOV AL,00 OUT 0F0H,AL ;计0地址 MOV AL,00 OUT 0F0H,AL MOV AL,56H ;计1控制字 OUT 0F6H,AL
时间: 2024-02-10 09:29:37 浏览: 104
MOV AL, 0B6H ;计1地址
OUT 0F2H, AL
MOV AL, 0B6H ;计2控制字
OUT 0F6H, AL
MOV AL, 0B6H ;计2地址
OUT 0F2H, AL
MOV AL, 0D6H ;计3控制字
OUT 0F6H, AL
MOV AL, 0D6H ;计3地址
OUT 0F2H, AL
MOV AL, 056H ;定时器控制字
OUT 043H, AL
MOV AL, 059H ;定时器1初始值低字节
OUT 041H, AL
MOV AL, 0D5H ;定时器1初始值高字节
OUT 041H, AL
MOV AL, 090H ;定时器2初始值低字节
OUT 042H, AL
MOV AL, 00AH ;定时器2初始值高字节
OUT 042H, AL
RET
相关问题
BB2 PROC NEAR ;8253驱动发声子程序 MOV AL,16H ;计0控制字 OUT 0F6H,AL MOV AL,00 OUT 0F0H,AL ;计0地址 MOV AL,00 OUT 0F0H,AL MOV AL,56H ;计1控制字 OUT 0F6H,AL MOV AL,2 OUT 0F2H,AL ;计1地址 MOV CX,50 L: CALL DELAY LOOP L AND AL,00H ;关喇叭 OUT 0F6H,AL RET BB2 ENDP
这段代码是一个使用8253芯片驱动发声的子程序。以下是代码的解释:
1. 将16H(00010000b)存储在AL寄存器中,表示计时器0的控制字。
2. 将AL寄存器的值输出到0F6H端口,用于配置计时器0的控制字。
3. 将00存储在AL寄存器中,表示计时器0的地址。
4. 将AL寄存器的值输出到0F0H端口,用于配置计时器0的地址。
5. 将00存储在AL寄存器中,用于清空AL寄存器的值。
6. 将AL寄存器的值输出到0F0H端口,用于配置计时器0的地址。
7. 将56H(01010110b)存储在AL寄存器中,表示计时器1的控制字。
8. 将AL寄存器的值输出到0F6H端口,用于配置计时器1的控制字。
9. 将2存储在AL寄存器中,表示计时器1的地址。
10. 将AL寄存器的值输出到0F2H端口,用于配置计时器1的地址。
11. 使用延迟子程序DELAY进行循环延迟50次。
12. 将AL寄存器与00H进行逻辑与操作,关闭喇叭。
13. 将AL寄存器的值输出到0F6H端口,用于关闭喇叭。
14. 返回到调用它的地方。
这段代码的功能是通过配置8253芯片的计时器0和计时器1,来发出声音。
阅读全文