给一个简单的示例
#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
// 8254 控制端口的地址
#define CONTROL_PORT 0x43
// 8254 数据端口的地址
#define DATA_PORT 0x42
// 8254 控制字
#define CONTROL_WORD 0xB6
// 音频频率
#define AUDIO_FREQUENCY 440
// 控制字的低八位
#define LOW_BYTE (CONTROL_WORD & 0xFF)
// 控制字的高八位
#define HIGH_BYTE ((CONTROL_WORD >> 8) & 0xFF)
int main()
{
// 获取 I/O 操作权限
if (ioperm(CONTROL_PORT, 1, 1) == -1 || ioperm(DATA_PORT, 1, 1) == -1)
{
perror("ioperm");
return 1;
}
// 计算计数器值
int counter = 1193180 / AUDIO_FREQUENCY;
// 写入控制字
outb(LOW_BYTE, CONTROL_PORT);
outb(HIGH_BYTE, CONTROL_PORT);
// 写入计数器值
outb(counter & 0xFF, DATA_PORT);
outb(counter >> 8, DATA_PORT);
// 播放声音
printf("Press enter to stop playing audio\n");
getchar();
// 关闭声音
outb(0, DATA_PORT);
return 0;
}