您的位置:首页 > 其它

DOS下(PC104)定时器中断的使用方法

2012-06-14 08:35 169 查看
项目需要,采用的是SBS公司的PC104控制器,安装的是DOS6.22的操作系统,程序需要用到定时器中断,这里给出我的使用方法:

首先编写中断使能和中断禁止的函数:

void enable_int(void)
{
unsigned char mask;
mask=inportb(0x21);
outportb(0x21,mask&0xdf);
}

void disable_int(void)
{
unsigned char mask;
mask=inportb(0x21);
outportb(0x21,mask|0x20);
}


由代码课件,寄存器0x21中的内容为中断掩码,而它的第二个位则是定时器中断的掩码,为1表示禁止中断,为0表示允许中断

然后,编写中断服务程序,程序内容尽量简单,我这里中断服务程序的主要工作是累加一个变量,增加到最大以后再归零重新累加。我用以产生周期的波形。代码如下

void interupt time_int()
{
disable();
index++;//index 是预先定义的变量
if(index>=index_max) index=0;//index_max表示最大的index值
enable();
outportb(0x20,0x20);//这句话是发消息给8259控制器,表示中断已经处理完成了
}


在使用之前还得进行初始化,内容就是将中断服务程序与中断向量表对应起来,并且设置定时器中断的频率。代码如下:

void init(void)
{
disable();
setvect(13,time_int);
enable();
sound(INT_FREQ);//INT_FREQ就是中断频率,我设定为1000
}


在使用过程中,手下调用初始化函数对中断进行初始化,然后在需要启用定时器中断的地方调用enable_int()函数,在需要关闭定时器中断的地方调用disable_int()函数即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: