⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 836demo7.c

📁 研华工控卡PCL836的一些例程序
💻 C
字号:
/**********************************************************************/
/*  This program is for PCL-836 Rev. A1  interrupt test.              */
/*  Connect int_input to digital out D0 int_enable to digital out D1  */
/**********************************************************************/
#include <dos.h>
#include <stdio.h>
#include <bios.h>
#include <conio.h>
#include <stdlib.h>
#define  BYPASS         0
#define  FILTER_ON      1
#define  INTERNAL       2
#define  PWM_MODE       3

void interrupt (*old_handler)(void);          /* old interrupt handler */
void interrupt (*temp_handler)(void);
void interrupt int_do(void);                  /* interrupt service routine */
void init_INT(void);

int baseI=0x240;                  /* I/O base address */
int irqI=5;                       /* Interrupt number */
int intf=0;
unsigned dl=0xAA;

void main(void)
{

  char      key;
  unsigned  max_count;
  unsigned  i;
  int       c1_mode,c2_mode,c3_mode;
  int       c4_mode,c5_mode,c6_mode;
  unsigned  c1,c2,c3,c4,c5,c6;

  init_INT(); /* Initialize interrupt */
  clrscr();
  printf("PCL-836 Rev.A1 interrupt test program \n\n");
  printf("Connect int_input to digital out D0 and ");
  printf("int_enable to digital out D1\n");
  printf("Press '0' or '1' to control digital output D0 ,'q' to quit program !\n");
  printf("When int_input goes from '0'(low) to '1'(high) , it genrates a interrupt 5\n");
  printf("Interrupt service routine will produce beep sound!");

  for(;;){
      while(bioskey(1)==0);
      key=bioskey(0);
      gotoxy(40,1);
      printf("%c",key);
      if (key=='q') break;
      else if (key=='1')
            outportb(baseI+0x10,0x03);
      else if (key=='0')
            outportb(baseI+0x10,0x02);
      if (intf==1)  intf=0;
  }
  setvect(irqI+8,old_handler);
}

void init_INT(void)
{
  int int_mask;

 /*------------------------------*/
 /* step0: DISABLE PC INTERRUPT  */
 /*------------------------------*/
  disable();

 if (irqI<8) {
       /*-------------------------------*/
       /* step5: STORE OLD INT. HANDLER */
       /*-------------------------------*/
        old_handler=getvect(irqI+8);

       /*------------------------------*/
       /* step6: SET INTERRUPT  VECTOR */
       /*------------------------------*/
        setvect(irqI+8,int_do);
        temp_handler=getvect(irqI+8);

       /*------------------------------*/
       /* step7: ENABLE 8259 INT. MASK */
       /*------------------------------*/
        int_mask=inportb(0x21)&~(0x01<<irqI);
        outportb(0x21,int_mask);        }
 else {
        /*-------------------------------*/
        /* step5: STORE OLD INT. HANDLER */
        /*-------------------------------*/
         old_handler=getvect(irqI+0x68);

        /*------------------------------*/
        /* step6: SET INTERRUPT  VECTOR */
        /*------------------------------*/
         setvect(irqI+0x68,int_do);
         //temp_handler=getvect(IRQ_NO+0x68);

        /*------------------------------*/
        /* step7: ENABLE 8259 INT. MASK */
        /*------------------------------*/
         //IRQ_NO = IRQ_NO-8;
         int_mask=inportb(0xa1)&~(0x01<<(irqI-8));
         outportb(0xa1,int_mask);        }

 /*------------------------------*/
 /* step8: ENABLE  PC INTERRUPT  */
 /*------------------------------*/
  enable();

  }
/**************************************************************/
/*                INTERRUPT SERVICE ROUTINE                   */
/**************************************************************/
void interrupt int_do(void)
{
  disable();
  gotoxy(45,1);
  printf("Interrupt occur!!\a");
  delay(100);
  gotoxy(45,1);
  printf("                   ");
  outportb(0x20,0x20);
  outportb(0xA0,0x20);
  enable();
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -