blew_in_wind
驱动牛犊
驱动牛犊
  • 注册日期2007-01-10
  • 最后登录2007-01-11
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1710回复:1

小弟的一个让主板发声的程序调不通,神仙指点啊

楼主#
更多 发布于:2007-01-10 22:18
  小弟初学,一个程序让主板扬声器发声的程序,在VC 6.0下编译,链接都没有问题,
但一运行就出错: unkown software exception
把程序贴出来,望神仙指点啊:
#include <dos.h>
#include <conio.h>
#include <stdlib.h>


void sound(unsigned int freq);

void main()        //主程序
{
    unsigned int freq;
    do
    {
        do
        {
            freq=rand();    //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;
    
    _outp(0x43,0xb6);            //8255芯片命令寄存器地址0x43
    _outp(0x42,count.c[0]);        //频率计数值送入地址口0x42
    _outp(0x42,count.c[1]);
    bits=_inp(0x61);
    _outp(0x61,bits|3);            //8255芯片门控信号地址口
    for(i=0;i<20000;i++)
        _outp(0x61,bits&0xfc);
}

是不是地址有问题?
boly81
驱动小牛
驱动小牛
  • 注册日期2004-06-25
  • 最后登录2012-06-08
  • 粉丝0
  • 关注0
  • 积分490分
  • 威望73点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-10 22:46
vc编成32位程序当然不行了,保护模式下直接IO是非法的,常识阿
用TC编成16位程序也许可以
游客

返回顶部