I/O接口的输入输出编程原理

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

[url=http://www.bipt.edu.cn/xxsz/automation/bkxsgz/INDEX.HTM][/url]

I/O接口的输入输出编程原理

程序中由rand( )函数产生一个0-32767之间的伪随机整数,为使声音柔和,在freq<=1000时,退出循环而调用sound发声函数,该函数由传来的参数freq来设定频率计数值,count.divisor为119328/freq(占用两个地址单元),由于采用了单元结构,共用一个存储区,故联合结构成员count.c[0]和count.c[1]取该数的低8位和高8位(二进制位),用于初始化定时器的频率计数值.

运行该程序后,将会听到美妙的声音,当要停止时,可按任意键而由khbit( )函数控制do循环结束来实现.

由于PC机主频不同,发声效果将不同,选取freq>1000,将会在386PC机上(主频为33M)发出清脆的声音,当主频小于33M时,可适当增加此数.

void sound(unsigned int freq);

main()

{

unsigned int freq;

do

{

do

{

freq=rand();

}while(freq>1000);

sound(freq);

}while(!kbhit());

}

void sound(unsigned int freq)

{

unsigned i;

union

{

long divisor;

unsigned char c[2];

}count;

unsigned char bits;

count.divisor=119328/freq;

outportb(0x43,0xb6);

outportb(0x42,count.c[0]);

outportb(0x42,count.c[1]);

bits=inportb(0x61);

outportb(0x61,bits|3);

for(i=0;i<20000;i++);

outportb(0x61,bits&0xfc);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航