DOS下(PC104)定时器中断的使用方法
2012-06-14 08:35
169 查看
项目需要,采用的是SBS公司的PC104控制器,安装的是DOS6.22的操作系统,程序需要用到定时器中断,这里给出我的使用方法:
首先编写中断使能和中断禁止的函数:
由代码课件,寄存器0x21中的内容为中断掩码,而它的第二个位则是定时器中断的掩码,为1表示禁止中断,为0表示允许中断
然后,编写中断服务程序,程序内容尽量简单,我这里中断服务程序的主要工作是累加一个变量,增加到最大以后再归零重新累加。我用以产生周期的波形。代码如下
在使用之前还得进行初始化,内容就是将中断服务程序与中断向量表对应起来,并且设置定时器中断的频率。代码如下:
在使用过程中,手下调用初始化函数对中断进行初始化,然后在需要启用定时器中断的地方调用enable_int()函数,在需要关闭定时器中断的地方调用disable_int()函数即可。
首先编写中断使能和中断禁止的函数:
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()函数即可。
相关文章推荐
- 用定时器来定时,分别使用中断和查询方法,设计流水灯
- 奶爸业余单片机学习之:定时器中断的使用方法——进入中断TF0(TF1)值硬件自动重置
- 奶爸业余单片机学习之:定时器使用方法——非中断,TF0(TF1)值软件重置法
- jquery插件jTimer(jquery定时器)使用方法
- 使用Java语言借助Quartz jar包实现定时器的方法
- libevent中定时器的使用方法
- 非窗口类中使用定时器的方法 .
- vc高精度多媒体定时器的使用方法
- Qt使用定时器方法一:定时器事件
- Windows程序设计(三)---定时器的三种使用方法
- STM32 外部中断使用方法总结
- 使用定时器判断确保某个标签有值才执行方法, 控制js代码执行先后顺序
- QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)
- 共享中断 IRQF_SHARED 使用方法
- Android中使用定时器的三种方法
- WinRAR在DOS下压缩/解压缩的使用方法
- 使用单片机的定时器0和中断实现9到0的倒计时功能,并用数码管显示
- 关于在多处理器suse11上中断处理中使用current宏的问题及解决方法
- 非窗口类中使用定时器的方法
- stm32的定时器使用方法