以下代码如何使 PC 发出哔哔声?

Posted

技术标签:

【中文标题】以下代码如何使 PC 发出哔哔声?【英文标题】:How does the following code make PC beeps? 【发布时间】:2011-05-13 05:43:07 【问题描述】:
void Sound(int f)
  
    USHORT   B=1193180/f; 

    UCHAR temp = In_8(0x61);
    temp = temp | 3; 
    Out_8(0x61,temp);

    Out_8(0x43,0xB6);
    Out_8(0x42,B&0xF);
    Out_8(0x42,(B>>8)&0xF);

In_8/Out_8 向/从指定端口读取/写入 8 位(省略实现细节)。

它是如何让 PC 发出哔哔声的?

更新

这里为什么使用&0xF?不应该是0xFF吗?

【问题讨论】:

您可以在此处blogs.msdn.com/b/larryosterman/archive/2010/01/04/…阅读有关 8254 PIC 和 Windows 中的 Beep 功能。 【参考方案1】:

PC 有一个 8255 定时器芯片,使用端口 0x61、0x43 和 0x42 控制。

当端口 0x61 的第 0 位设置为 1 时,这意味着“打开连接到扬声器的定时器”。 当端口 0x61 的第 1 位设置为 1 时,表示“打开扬声器”。

这是在代码的第一段中完成的。

第二部分将“魔术值”0xB6放在端口0x43上,这意味着接下来到达端口0x42的两个字节将被解释为定时器频率的除数。然后将除法的结果频率(1193180 / 除数)发送到扬声器。

http://gd.tuwien.ac.at/languages/c/programming-bbrown/advcw3.htm#sound

【讨论】:

以上是关于以下代码如何使 PC 发出哔哔声?的主要内容,如果未能解决你的问题,请参考以下文章

如何让android只在一只耳朵里发出哔哔声?

异或加密字符串并将其保存在文本文件中时,PC 会发出哔哔声

PC扬声器通过javascript发出哔哔声?

如何在网页中创建哔声?

在窗口中运行的 VBScript 如何发出哔哔声(或播放系统声音)? [复制]

如何在 Linux-Assembler 中发出哔哔声?