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
?
答案 0 :(得分:5)
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