发新话题
打印

自编中断服务程序举例

自编中断服务程序举例


自编中断服务程序举例    Q! N" L  b! n# s. T# B4 _6 |
    这里先举一个完整的自己能上机练习的中断服务程序例子。在第六章中介绍完可编程计数器/定时器8253后再举一例(在Pc系列机中加入一个用户中断源——可编程定时中断),说明在PC系列机中加入一个用户中断源应做的工作。  ; ~6 m  U& S8 p& t/ d7 ]
    例  利用1CH软中断作定时处理——每次进入1CH中断时显示一个“*”,18次后显示一个字符串“second”(秒)。  
" F* H" [$ r& q+ T    关于1CH软中断,前面已经介绍,是留给用户进行定时处理的“软接口”。在软时钟中断(中断类型号为08H)处理过程中,要调用一次INT 1CH软中断。系统本身(指DOS)在1cH中断服务程序中仅安排了一条中断返回指令,即什么也没有做,直接返回。所以,用户可重新编写1CH的中断服务程序,在其中加入自己所需的定时处理。下面是用Turbo C编写的1CH中断服务程序以及对1CH中断进行设置的主程序的清单。编译、连接,形成可执行文件后便可运行(DOS环境下)。  . M% [4 a% m7 p) j
    #include<dos.h>  
, E/ a7 `2 }& B    union REGS in,out;  
5 Y( v# {2 `3 q" C( I; F& o    int U=0;  # F: b/ u: W- m) Y
    char fg=0;  
- u0 w3 e0 t$ H# [0 E% K! S6 d# a; b    void interrupt(*old intlc)(void);  /*定义old_intlc为中断函数指针*/  + s, q2 S' F4 V: O# N
    void interrupt new_intle()    /*自编的1CH中断服务程序*/  : A: z( v. U% Y5 m! Y& l
    {in.h.ah=OxOe;    /*调用BIOS功能显示字符'*'*/  
, f) R& b' D3 x" R" z2 M+ B9 P    in.h.al='*':  
2 q3 n6 ]. r' c7 x# ^' u    in.h.bh=0;  
5 f: ~. N0 _  \& O0 ]9 Y2 n, |    int86(0x10,&;amp;in,&;amp;out);  ' s5 e( D, L7 M& ]5 Y( P. N
    n  ;if(n>=18){n=0;fg=1;}  : r9 ~9 q4 K' ^9 G4 |/ e4 m
    }



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题