下面的代码是如何使PC发出蜂鸣声的?

下面的代码是如何使PC发出蜂鸣声的?,c,windows,beep,C,Windows,Beep,In_8/Out_8向指定端口读取/写入8位数据(实现细节省略) 它是如何使PC发出嘟嘟声的 更新 为什么这里使用&0xF?是不是应该是0xFF?电脑有一个8255定时器芯片,它由端口0x61、0x43和0x42控制 当端口0x61位0设置为1时,这意味着“打开连接到扬声器的计时器”。 当端口0x61第1位设置为1时,这意味着“打开扬声器” 这是在代码的第一段中完成的 第二部分将“魔术值”0xB6放在端口0x43上,这意味着到达端口0x42的以下两个字节将被解释为计时器频率的除数。然后,该除法产

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

它是如何使PC发出嘟嘟声的

更新


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

电脑有一个8255定时器芯片,它由端口0x61、0x43和0x42控制

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

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

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


电脑有一个8255定时器芯片,由端口0x61、0x43和0x42控制

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

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

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


您可以在此处阅读有关8254 PIC和Windows中的蜂鸣功能的信息。您可以在此处阅读有关8254 PIC和Windows中的蜂鸣功能的信息。
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);
}