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