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

时间:2022-08-24 00:26:15

项目需要,采用的是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()函数即可。