📄 interupt.h
字号:
#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 + -