1
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ですか?

4

1 に答える 1

5

PC には 8255 タイマー チップがあり、ポート 0x61、0x43、および 0x42 を使用して制御されます。

ポート 0x61 のビット 0 が 1 に設定されている場合、これは「スピーカーに接続されているタイマーをオンにする」ことを意味します。ポート 0x61 のビット 1 が 1 に設定されている場合、これは「スピーカーをオンにする」ことを意味します。

これは、コードの最初の段落で行います。

2 番目の部分は、ポート 0x43 に「マジック値」0xB6 を配置します。これは、ポート 0x42 に到着する次の 2 バイトがタイマー周波数の除数として解釈されることを意味します。除算の結果の周波数 (1193180 /除数) がスピーカーに送信されます。

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

于 2011-05-13T06:00:46.220 に答える