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

📄 interupt.h

📁 该程序是基于PC104的工控板的多参数监护仪的源程序.监护内容包含:心电血氧呼吸无创血压等等.
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __INTERUPT_H
#define __INTERUPT_H
#ifndef __STDIO_H
#include <stdio.h>
#endif
#ifndef __DOS_H
#include <dos.h>
#endif
#ifndef __TIME_H
#include <time.h>
#endif
#ifndef __STDLIB_H
#include <stdlib.h>
#endif
#ifndef __MENU_H
#include "menu.h"
#endif
#ifndef __MONIWAVE_H
#include "moniwave.h"
#endif
#ifndef __MEM_H
#include <mem.h>
#endif
#ifndef __STRING_H
#include <string.h>
#endif
#define EOI 0x20    	//End Of Interrupt
#define PORT 0x20	//Interrupt Control Port
#define RXDBUFNUM 63
#define INT0c 0x0C  //com1中断
#define INT8  0x08  //时间中断
#define INT0b 0x0b  //com2中断

#define	LEFT_K		0X4B00
#define RIGHT_K		0X4D00
#define UP_K		0X4800
#define DOWN_K		0X5000
#define ENTER_K		0X0D
#define SPACE_K		0X20
#define F1_K		0X3B00	//脉搏氧声音
#define F2_K		0X3C00
#define F3_K		0X3D00
#define F4_K		0X3E00
#define F5_K		0X3F00
#define F6_K		0X4000
#define F8_K		0X4200
#define QUIT_K		0X51

#define SPD_CTRL_NUM	0x03


void interrupt (*oldIQR8) (void);	//--old clock interrupt
void interrupt (*oldIQR4) (void);	//--old COM1 interrupt
void interrupt (*oldIQR3) (void);	//--old COM2 interrupt
extern void interrupt newIQR4 ();	//--new COM1 interrupt

void sendcom1(void){	//发送数据到COM1
  unsigned char temp0;
  disable();
  temp0=inportb(0x3fd);
  if((temp0&0x20)==0x20){	//传送器保存寄存器空闲
    outportb(0x3f8,com1str[com1count]);
	com1count++;
  }
  enable();
}

void ReadNvmemory(void)	//--send Read NVmemory command
{
  int i_i;
  com1str[2]=0x04;//read memory command is 4
  com1str[4]=0;

  for(i_i=0; i_i<8; i_i++){
  	com1str[3]=i_i;
  	com1str[5]=(unsigned char)((4+com1str[3])&255);//sum, &255=%256
  	com1count=0;
  	while(com1count<6)
      		sendcom1();
  	delay(100);
  }
  delay(100);
  return;
}

void GetNVmemorToMap(void)	//从NVmemery获得系统设置值
{
  int i_i;
  //-------------NVmemory group 1---------------------------
  if(NVmemmap[0x08]<=HRPR_UP->up&&NVmemmap[0x08]>=HRPR_UP->low)
  	HRPR_UP->value=NVmemmap[0x08];	//HRPR up limit
  if(NVmemmap[0x09]<=HRPR_LOW->up&&NVmemmap[0x09]>=HRPR_LOW->low)
  	HRPR_LOW->value=NVmemmap[0x09];	//HRPR low limit
  if(HRPR_UP->value<=HRPR_LOW->value){
  	HRPR_UP->value=HRPRUP_DEF_VAL;
  	HRPR_LOW->value=HRPRLOW_DEF_VAL;
  }

  if((char)NVmemmap[0x0a]<=ST_UP->up&&(char)NVmemmap[0x0a]>=ST_UP->low)
  	ST_UP->value=(char)NVmemmap[0x0a];		//ST up limit
  if((char)NVmemmap[0x0b]<=ST_LOW->up&&(char)NVmemmap[0x0b]>=ST_LOW->low)
  	ST_LOW->value=(char)NVmemmap[0x0b];	//ST low limit
  if(ST_UP->value<=ST_LOW->value){
  	ST_UP->value=STUP_DEF_VAL;
  	ST_LOW->value=STLOW_DEF_VAL;
  }

  if(NVmemmap[0x0c]<=SPO2_UP->up&&NVmemmap[0x0c]>=SPO2_UP->low)
  	SPO2_UP->value=SPO2_UP->value=NVmemmap[0x0c];	//SPO2 up limit
  if(NVmemmap[0x0d]<=SPO2_LOW->up&&NVmemmap[0x0d]>=SPO2_LOW->low)
	SPO2_LOW->value=NVmemmap[0x0d];	//SPO2 low limit
  if(SPO2_UP->value<=SPO2_LOW->value){
  	SPO2_UP->value=SPO2UP_DEF_VAL;
  	SPO2_LOW->value=SPO2LOW_DEF_VAL;
  }

  if(NVmemmap[0x0e]<=SYST_UP->up&&NVmemmap[0x0e]>=SYST_UP->low)
  	SYST_UP->value=NVmemmap[0x0e];	//SYST up limit
  if(NVmemmap[0x0f]<=SYST_LOW->up&&NVmemmap[0x0f]>=SYST_LOW->low)
  	SYST_LOW->value=NVmemmap[0x0f];	//SYST low limit
  if(SYST_UP->value<=SYST_LOW->value){
  	SYST_UP->value=SYSTUP_DEF_VAL;
  	SYST_LOW->value=SYSTLOW_DEF_VAL;
  }

  //-------------NVmemory group 2---------------------------
  if(NVmemmap[0x10]<=DIAS_UP->up&&NVmemmap[0x10]>=DIAS_UP->low)
  	DIAS_UP->value=NVmemmap[0x10];	//DIAS up limit
  if(NVmemmap[0x11]<=DIAS_LOW->up&&NVmemmap[0x11]>=DIAS_LOW->low)
  	DIAS_LOW->value=NVmemmap[0x11];	//DIAS low limit
  if(DIAS_UP->value<=DIAS_LOW->value){
  	DIAS_UP->value=DIASUP_DEF_VAL;
  	DIAS_LOW->value=DIASLOW_DEF_VAL;
  }

  if(NVmemmap[0x12]<=MEAN_UP->up&&NVmemmap[0x12]>=MEAN_UP->low)
  	MEAN_UP->value=NVmemmap[0x12];	//MEAN up limit
  if(NVmemmap[0x13]<=MEAN_LOW->up&&NVmemmap[0x13]>=MEAN_LOW->low)
  	MEAN_LOW->value=NVmemmap[0x13];	//MEAN down limit
  if(MEAN_UP->value<=MEAN_LOW->value){
  	MEAN_UP->value=MEANUP_DEF_VAL;
  	MEAN_LOW->value=MEANLOW_DEF_VAL;
  }
  
  if(NVmemmap[0x14]<=RESP_UP->up&&NVmemmap[0x14]>=RESP_UP->low)
  	RESP_UP->value=NVmemmap[0x14];	//RESP up limit
  if(NVmemmap[0x15]<=RESP_LOW->up&&NVmemmap[0x15]>=RESP_LOW->low)
  	RESP_LOW->value=NVmemmap[0x15];	//RESP down limit
  if(RESP_UP->value<=RESP_LOW->value){
  	RESP_UP->value=RESPUP_DEF_VAL;
  	RESP_LOW->value=RESPLOW_DEF_VAL;
  }
  if(NVmemmap[0x16]<=(TEMP1_UP->up-200)&&NVmemmap[0x16]>=(TEMP1_UP->low-200))
	TEMP1_UP->value=NVmemmap[0x16]+200;  //TEMP up limit
  if(NVmemmap[0x17]<=(TEMP2_UP->up-200)&&NVmemmap[0x17]>=(TEMP2_UP->low-200))
	TEMP2_UP->value=NVmemmap[0x17]+200;  //TEMP up limit

  //-------------NVmemory group 3---------------------------
  MAINLEAD->value=NVmemmap[0x18]&0x07;	   //3 bit 0~2 ECG lead
  if(MAINLEAD->value>V_III)
  	MAINLEAD->value=V_II;
  ECGSCALE->value=(NVmemmap[0x18]>>3)&0x03;//2 bit 3~4 ECG scale
  //WORKSTA->value=(NVmemmap[0x10+MOV_ADDR]>>5)&0x03; //2 bit 5~6 ECG work mode
  //if(WORKSTA->value>V_OPE)
	//WORKSTA->value=V_MON;
  INTENSITY->value=(NVmemmap[0x18]>>7)&0x01;//滤波强弱
  
  
  NIBPCRIT->value=NVmemmap[0x19];	//血压标准
  if(NIBPCRIT->value>8)
  	NIBPCRIT->value=0;

  if(NVmemmap[0x1a]<=ALARMTIME->up&&NVmemmap[0x1a]>=ALARMTIME->low)
  	 AlarmTime=ALARMTIME->value=NVmemmap[0x1a];	//alarm time

  if(NVmemmap[0x1b]<=GAPTIME->up&&NVmemmap[0x1b]>=GAPTIME->low)
	 GAPmin=GAPTIME->value=NVmemmap[0x1b];		//gap time

  if((char)NVmemmap[0x1c]<=SPO2REVISE->up&&(char)NVmemmap[0x1c]>=SPO2REVISE->low)
	SPO2REVISE->value=(char)NVmemmap[0x1c];	//SPO2 revise
  if(NVmemmap[0x1d]<=TEMP1REVISE->up&&NVmemmap[0x1d]>=TEMP1REVISE->low)
  	TEMP1REVISE->value=NVmemmap[0x1d];	//TEMP1 revise
  if(NVmemmap[0x1e]<=SYSTREVISE->up&&NVmemmap[0x1e]>=SYSTREVISE->low)
  	SYSTREVISE->value=NVmemmap[0x1e];	//SYST revise
  if(NVmemmap[0x1f]<=DIASREVISE->up&&NVmemmap[0x1f]>=DIASREVISE->low)
  	DIASREVISE->value=NVmemmap[0x1f];	//DIAS revise

  //-------------NVmemory group 4---------------------------
  if(NVmemmap[0x20]<=MEANREVISE->up&&NVmemmap[0x20]>=MEANREVISE->low)
  	MEANREVISE->value=NVmemmap[0x20];	//MEAN revise
  
  //*(NVmemmap+0x21)=STREVISE->value;
  
  if(NVmemmap[0x22]<=AUTOTIME->up&&NVmemmap[0x22]>=AUTOTIME->low)
  	AUTOTIME->value=NVmemmap[0x22];

  RESPCHK->value=NVmemmap[0x23]&0x01;		//1bit RESP check ON?OFF

  TEMP1CHK->value=NVmemmap[0x24]&0x01;		//1bit TEMP1 check ON?OFF
  TEMP2CHK->value=(NVmemmap[0x24]>>1)&0x01;	//1bit TEMP2 check ON?OFF

  if(NVmemmap[0x25]<=TEMP2REVISE->up&&NVmemmap[0x25]>=TEMP2REVISE->low)
  	TEMP2REVISE->value=NVmemmap[0x25];	//TEMP2 revise

  //*(NVmemmap+0x26)=SYSTREVISE->value_BAK;
  //*(NVmemmap+0x27)=DIASREVISE->value_BAK;
  //*(NVmemmap+0x28)=MEANREVISE->value_BAK;
  //*(NVmemmap+0x29)=STREVISE->value_BAK;
  //-------------NVmemory group 5---------------------------
  NIBPUNIT->value=NVmemmap[0x2a]&0x01;		//NIBP unit
  TEMP1UNIT->value=NVmemmap[0x2b]&0x01;		//TEMP1 unit
  TEMP2UNIT->value=(NVmemmap[0x2b]>>1)&0x01;	//TEMP2 unit
  AUTOMANUAL->value=NVmemmap[0x2c]&0x01;	//MANUAL ATUO
  RESPSCALE->value=NVmemmap[0x2d]&0x03;	//RESP scale
  HRPRFIRST->value=NVmemmap[0x2e]&0x01;	//HR PR first
  WAVEFILL->value=NVmemmap[0x2f]&0x01;	//wave fill
  
  //-------------NVmemory group 6---------------------------
  if(NVmemmap[0x30]<=CLEARTIME->up&&NVmemmap[0x30]>=CLEARTIME->low)
  	CLEARTIME->value=NVmemmap[0x30];
  LANGUAGE->value=NVmemmap[0x31]&0x01;	//1bit Language choose

  HRPR_ALLOW->value=NVmemmap[0x32]&0x01;
  ST_ALLOW->value=(NVmemmap[0x32]>>1)&0x01;
  SPO2_ALLOW->value=(NVmemmap[0x32]>>2)&0x01;
  NIBP_ALLOW->value=(NVmemmap[0x32]>>3)&0x01;
  RESP_ALLOW->value=(NVmemmap[0x32]>>4)&0x01;
  TEMP1_ALLOW->value=(NVmemmap[0x32]>>5)&0x01;
  TEMP2_ALLOW->value=(NVmemmap[0x32]>>6)&0x01;

  if(NVmemmap[0x33]<3)
  	CHECKMODE->value=NVmemmap[0x33];

  if(NVmemmap[0x34]<=ECGWREVISE->up&&NVmemmap[0x34]>=ECGWREVISE->low)
  	ECGWREVISE->value=NVmemmap[0x34];		//ECG wave revise
  //*(NVmemmap+0x35)=ECGWREVISE->value_BAK;
  if((NVmemmap[0x36]&0x07)<=V_V){
  	SECLEAD->value=NVmemmap[0x36]&0x07;
  }

  LEADDIS->value=NVmemmap[0x36]>>7;//导联显示;

  if(NVmemmap[0x37]<=0x3f)
  	BACKCOLOR->value=NVmemmap[0x37];
  
  //-------------NVmemory group 7---------------------------
  if(NVmemmap[0x38]&0x0f)
  	LeadColor[V_I]=NVmemmap[0x38]&0x0f;
  if(NVmemmap[0x38]&0xf0)
  	LeadColor[V_II]=(NVmemmap[0x38]>>4)&0x0f;

  if(NVmemmap[0x39]&0x0f)
  	LeadColor[V_III]=NVmemmap[0x39]&0x0f;
  if(NVmemmap[0x39]&0xf0)
  	LeadColor[V_aVR]=(NVmemmap[0x39]>>4)&0x0f;

  if(NVmemmap[0x3a]&0x0f)
  	LeadColor[V_aVL]=NVmemmap[0x3a]&0x0f;
  if(NVmemmap[0x3a]&0xf0)
  	LeadColor[V_aVF]=(NVmemmap[0x3a]>>4)&0x0f;

  if(NVmemmap[0x3b])
  	LeadColor[V_V]=NVmemmap[0x3b];

  if(NVmemmap[0x3c]&0x0f)
  	PLETHWCOLOR->value=NVmemmap[0x3c]&0x0f;
  if(NVmemmap[0x3c]&0xf0)
  	RESPWCOLOR->value=(NVmemmap[0x3c]>>4)&0x0f;
  
  if(NVmemmap[0x3d]&0x0f)
  	ECGNUMCOLOR->value=NVmemmap[0x3d]&0x0f;
  if(NVmemmap[0x3d]&0xf0)
  	STNUMCOLOR->value=(NVmemmap[0x3d]>>4)&0x0f;

  if(NVmemmap[0x3e]&0x0f)
  	SPO2NUMCOLOR->value=NVmemmap[0x3e]&0x0f;
  if(NVmemmap[0x3e]&0xf0)
  	NIBPNUMCOLOR->value=(NVmemmap[0x3e]>>4)&0x0f;

  if(NVmemmap[0x3f]&0x0f)
  	RESPNUMCOLOR->value=NVmemmap[0x3f]&0x0f;
  if(NVmemmap[0x3f]&0xf0)
  	TEMPNUMCOLOR->value=(NVmemmap[0x3f]>>4)&0x0f;

  //for(i_i=0; i_i<6; i_i+=2){
  	//if(NVmemmap[i_i]+NVmemmap[i_i+1]==0xff)
		//ReadFromIQR|=0x02;
  //}
  return;
 }

void InitCOM1(void){
	//初始 com1
	outportb(0x3fb,0x80);
	outportb(0x3f8,0x06);   // 0x0c 9600;  0x06 19200
	outportb(0x3f9,0x00);
	outportb(0x3fb,0x03);   //LCR
	outportb(0x3fc,0x0f);   //MCR
	outportb(0x3f9,0x05);   //interrupt enable I1E=1,I2E=1  using 0x05  8.9 pm IER
	outp(0x21,0x0e7&inportb(0x21));//
	inportb(0x3fd);inport(0x3f8);
}

void InitCOM2(void){
	//初始 com2
	outportb(0x2fb,0x80);
	outportb(0x2f8,0x06);   // 19200 bps
	outportb(0x2f9,0x00);
	outportb(0x2fb,0x03);   //LCR
	outportb(0x2fc,0x0f);   //MCR 0f
	outportb(0x2f9,0x05);   //interrupt enable I1E=1,I2E=1  using 0x05  8.9 pm IER
	outp(0x21,0x0e7&inportb(0x21));
	inportb(0x2fd);inport(0x2f8);
}



#define RXD2BUFNUM	63
//unsigned char rxdbuf1[RXD2BUFNUM+1], rxdptr1=0, Com2right=0;
//com2口中断
void interrupt  newIQR3()
{ static unsigned char rxdbuf1[RXD2BUFNUM+1], rxdptr1=0;
  char in_out;
  unsigned char status,curdat,ptr,i,j,temp1, Tempdata;
  unsigned int temp0;
  disable();
  status=inportb(0x2fd);
  if((status&0x01)==0x01) {
	curdat=inportb(0x2f8);
	rxdbuf1[rxdptr1]=curdat;
	ptr=(RXD2BUFNUM+rxdptr1-4)&RXD2BUFNUM;
		  i=0;
		  if(rxdbuf1[ptr]==0x55) i++;
		  if(rxdbuf1[(ptr+1)&RXD2BUFNUM]==0xaa) i++;

⌨️ 快捷键说明

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