📄 interupt.h
字号:
if(i==2){
temp0=0;
for(j=0;j<3;j++)
temp0=temp0+rxdbuf1[(ptr+j+2)&RXD2BUFNUM];
temp1=(unsigned char)(temp0&255);
if(temp1==curdat){
Tempdata=rxdbuf1[(ptr+3)&RXD2BUFNUM];
switch(rxdbuf1[(ptr+2)&RXD2BUFNUM]){
case 0x01://启动血压测量
key_code=F4_K;
break;
case 0x02://取消血压测量
if(NIBPStatus&0x01)
key_code=F4_K;
break;
case 0x04://读存储器
//com1str[2]=0x04;
//com1str[3]=Tempdata;//第几组
//com1str[4]=0;
//com1str[5]=(com1str[2]+com1str[3]+com1str[4])&255;//sum
//com1count=0;
break;
case 0x05://写存储器
//com1str[2]=0x05;
//com1str[3]=Tempdata;//所写地址
//com1str[4]=rxdbuf1[(ptr+4)&RXD2BUFNUM];//写入值
//com1str[5]=(com1str[2]+com1str[3]+com1str[4])&255;//sum
//com1count=0;
break;
case 0x08://心电控制
CenterECGsta=Tempdata;
SECLEAD->value=Tempdata&0x07;
if(SECLEAD->value>=0x07) SECLEAD->value=V_I;
if(SECLEAD->value==MAINLEAD->value){
MAINLEAD->value=(MAINLEAD->value+1)%(V_III+1);
}
LeadStr2=VAL_LEAD[SECLEAD->value];//显示副导联
ECGSCALE->value=(Tempdata>>3)&0x03;//增益大小
WORKSTA->value=(Tempdata>>5)&0x03;//工作状态
break;
case 0x09://呼吸控制
CenterRESPscale=Tempdata;
RESPSCALE->value=Tempdata&0x03;
break;
default: break;
}
}// sum is right
}//head dui
rxdptr1++;
rxdptr1&=RXD2BUFNUM;
}
outportb(PORT,EOI); //allow interrupt
(*oldIQR3)();
in_out=inportb(0x21);
in_out&=0x0e7;
outp(0x21,in_out);
outportb(PORT,EOI);
enable();
}//com2
#define T_BASE 0x40 //时钟中断端口
#define TIME_CON1 0xf8//0xc0
#define TIME_CON2 0x5c//0x07
//1.19M=0x122870
//if加速50倍:(1.19M/0x051e) / (1.19M/0xffff) =50,50*18.2=910 times/s 0x051e
//18.2=1.19M/0xffff
//50=1.19M/0x5cf8 50 times/s,0x5cf8 accelerate 0xffff/0x5cf8 = 2.7535 times
//初始时钟中断频率
//加速600倍:(1.19M/0x07c0)
void InitINT8(void){
disable();
outport(T_BASE+3,0x36);
outportb(T_BASE,TIME_CON1);
outportb(T_BASE,TIME_CON2);
enable();
}
//恢复时钟中断频率
void RecINT8(void){
disable();
outport(T_BASE+3,0x36);
outportb(T_BASE,0xff);
outportb(T_BASE,0xff);
enable();
}
#undef T_BASE
#undef TIME_CON1
#undef TIME_CON2
void interrupt newIQR8(){
//65535 / 23800 = 13107 / 4760
#define OLDTIMETIC 13107
#define NEWTIMETIC 4760
static int SC=0;//SC控制演示时脉博声
static int TimeTicCnt=0;
unsigned char temp3, tempECG_II[4], tempECG_V[4];
////static char comzj=20;//发送指针,为20表示不可发
//模拟时的发送包
////static unsigned char com2str[12]={0x55,0xaa,0xff,0,0,0,0,0,0,0,0,0xff};//发送缓冲数据块二,转发demo缓冲
////static unsigned char comstrstatus1=0;//用于决定数据包中DATA的含义
////unsigned int SendTimer;
static unsigned char bjsoundjsq=0;
if(MONDEMO->value==V_DEMO){//demo
int Index1, Index2, Index3;
char scale;
////com2str[3]=comstrstatus1;
////if(comstrstatus1>0x10)comstrstatus1=0;
////switch(comstrstatus1){
////case 0x00:com2str[4]=SECLEAD->value|((ECGSCALE->value)<<3)|((WORKSTA->value)<<5)|0x80;
ECGStatus=0x0;
////break;
////case 0x01:com2str[4]=7;
SPO2Status=0;
////break;
////case 0x02:com2str[4]=NIBPStatus;
////break;
////case 0x03:com2str[4]=\
HRrate=69;
////break;
////case 0x04:com2str[4]=\
PRrate=68;
////break;
////case 0x05:com2str[4]=67;break;
////case 0x06:com2str[4]=\
STvalue=-2;
////break;
////case 0x07:com2str[4]=\
SPO2value=99;
////break;
//袖带压力/2 mmHg
////case 0x08:com2str[4]=90;break;
////case 0x09:com2str[4]=\
disSYST=120;
////break;
////case 0x0a:
////com2str[4]=\
disDIAS=75;
////break;
////case 0x0b:com2str[4]=\
disMEAN=90;
////break;
////case 0x0c:
RESPvalue=20;
if(RESPCHK->value==V_OFF)RESPvalue=255;
////com2str[4]=RESPvalue;
////break;
////case 0x0d:com2str[4]=175;
if(TEMP1CHK->value==V_OFF)
TEMP1value=455;
else TEMP1value=375;////com2str[4]+200;
////break;
////case 0x0e:com2str[4]=RESPSCALE->value;break;
//case 0x0f:com2str[4]=173+TEMP2REVISE->value;
if(TEMP2CHK->value==V_OFF)
TEMP2value=455;
else TEMP2value=373;////com2str[4]+200;
//break;
//case 0x10:com2str[4]=ECGStatus=0x00;break;
////}//end switch
////comstrstatus1++;
Index1=(Edw_cus+1)%ECGN;
Index2=(Edw_cus+2)%ECGN;
Index3=(Edw_cus+3)%ECGN;
////com2str[5]=\
*(ECGdata[V_I]+Edw_cus)=((ECGWI[Edw_cus]-64)/ScaleAndWave+64)<<1;
////com2str[6]=\
*(ECGdata[V_I]+Index1)=((ECGWI[Index1]-64)/ScaleAndWave+64)<<1;
////com2str[7]=\
*(ECGdata[V_I]+Index2)=((ECGWI[Index2]-64)/ScaleAndWave+64)<<1;
////com2str[8]=\
*(ECGdata[V_I]+Index3)=((ECGWI[Index3]-64)/ScaleAndWave+64)<<1;
tempECG_II[0]= *(ECGdata[V_II]+Edw_cus)=((ECGWII[Edw_cus]-64)/ScaleAndWave+64)<<1;
tempECG_II[1]=*(ECGdata[V_II]+Index1)=((ECGWII[Index1]-64)/ScaleAndWave+64)<<1;
tempECG_II[2]=*(ECGdata[V_II]+Index2)=((ECGWII[Index2]-64)/ScaleAndWave+64)<<1;
tempECG_II[3]=*(ECGdata[V_II]+Index3)=((ECGWII[Index3]-64)/ScaleAndWave+64)<<1;
tempECG_V[0]=*(ECGdata[V_V]+Edw_cus)=((ECGWV[Edw_cus]-64)/ScaleAndWave+64)<<1;
tempECG_V[1]=*(ECGdata[V_V]+Index1)=((ECGWV[Index1]-64)/ScaleAndWave+64)<<1;
tempECG_V[2]=*(ECGdata[V_V]+Index2)=((ECGWV[Index2]-64)/ScaleAndWave+64)<<1;
tempECG_V[3]=*(ECGdata[V_V]+Index3)=((ECGWV[Index3]-64)/ScaleAndWave+64)<<1;
/*---------------------------------------------------------------------*
switch(SECLEAD->value){
case V_I: break;//I 导联已经直接写入了;
case V_II: com2str[5]=tempECG_II[0]; com2str[6]=tempECG_II[1];
com2str[7]=tempECG_II[2]; com2str[8]=tempECG_II[3];
break;
case V_III: com2str[5]=127+tempECG_II[0]-com2str[5];
com2str[6]=127+tempECG_II[1]-com2str[6];
com2str[7]=127+tempECG_II[2]-com2str[7];
com2str[8]=127+tempECG_II[3]-com2str[8];
break;
case V_aVR: com2str[5]=254-((tempECG_II[0]+com2str[5])>>1);
com2str[6]=254-((tempECG_II[1]+com2str[6])>>1);
com2str[7]=254-((tempECG_II[2]+com2str[7])>>1);
com2str[8]=254-((tempECG_II[3]+com2str[8])>>1);
break;
case V_aVL: com2str[5]=63+((com2str[5]-tempECG_II[0])>>1);
com2str[6]=63+((com2str[6]-tempECG_II[1])>>1);
com2str[7]=63+((com2str[7]-tempECG_II[2])>>1);
com2str[8]=63+((com2str[8]-tempECG_II[3])>>1);
break;
case V_aVF: com2str[5]=63+((tempECG_II[0]-com2str[5])>>1);
com2str[6]=63+((tempECG_II[1]-com2str[6])>>1);
com2str[7]=63+((tempECG_II[2]-com2str[7])>>1);
com2str[8]=63+((tempECG_II[3]-com2str[8])>>1);
break;
case V_V: com2str[5]=tempECG_V[0];
com2str[6]=tempECG_V[1];
com2str[7]=tempECG_V[2];
com2str[8]=tempECG_V[3];
break;
}
/*-----------------------------------------------------------------*/
////com2str[9]=\
PLETHdata[Edw_cus]=PLETHW[Edw_cus];
PLETHdata[Index1]=PLETHW[Index1];
PLETHdata[Index2]=PLETHW[Index2];
PLETHdata[Index3]=PLETHW[Index3];
SpdCtrl=!SpdCtrl; SpdCount++;
if(SpdCtrl){
Edw_cus=Index3; SC+=3;
}else{
if(SpdCount==SPD_CTRL_NUM){
Edw_cus=Index3; SC+=3; SpdCount=0;
}else{
Edw_cus+=4; if(Edw_cus>=ECGN) Edw_cus=0;
SC+=4;
}
}
////com2str[10]=\
*(RESPdata+Rdw_cus)=RESPW[Rdw_cus];
Rdw_cus++; if(Rdw_cus>=RESPN)Rdw_cus=0;
//com2str[11]=(0xff+com2str[3]+com2str[4]+com2str[5]+com2str[6]+com2str[7]+com2str[8]+com2str[9]+com2str[10])&255;//SUM
//发模拟包
//SendTimer=comzj=0;
//while(comzj<12&&SendTimer<1000){//sendcom2
//SendTimer++;
//temp3=inportb(0x2fd);
//if((temp3&0x20)==0x20){
//outportb(0x2f8,com2str[comzj]);
//comzj++;
//}
//} //comzj<20
//模拟下脉搏声
if(SC>=ECGN)SC=0;
if(PulseSound==V_ON){//if pulse sound open
if(SC>30&&SC<40){
if(alarmsound<=0xc000) //no alarm sound
sound(1000);
heartsta=V_HEARTBIG;
}else{
if(alarmsound<=0xc000) //no alarm sound
nosound();
heartsta=V_HEARTSMALL;
}
}else{
if(SC>30&&SC<40){
heartsta=V_HEARTBIG;
}else{
heartsta=V_HEARTSMALL;
}
if(alarmsound<=0xc000) //no alarm sound
nosound();
}//end if(pulsesound==V_ON)
TimeTicCnt += NEWTIMETIC;
if(TimeTicCnt>=OLDTIMETIC){
TimeTicCnt-=OLDTIMETIC;
(*oldIQR8)();
bjsoundjsq++;if(bjsoundjsq>=20)bjsoundjsq=0;//用于控制发音节奏
if(alarmsound>0xc000){//由报警控制,发报警音
if(bjsoundjsq==2){
switch(ALARMTONE->value){//(*bjydiao)用于菜单控制报警音调
case 0://low
sound(500);
break;
case 1://mid
sound(1300);
break;
case 2://high
sound(900);
break;
}//switch
}//bjsoundjsq==2
else if(bjsoundjsq==7){sound(400);}
else if(bjsoundjsq>10)nosound();
}//由报警控制,发报警音
if(keydelay)keydelay--;
if(disdelay)disdelay--;
}else//cort!=0
outportb(PORT,EOI);
}else{//monitor监护模式
(*oldIQR8)();
bjsoundjsq++;if(bjsoundjsq>=20)bjsoundjsq=0;//用于控制发音节奏
if(alarmsound>0xc000){//由报警控制,发报警音
if(bjsoundjsq==2){
switch(ALARMTONE->value){//(*bjydiao)用于菜单控制报警音调
case 0://low
sound(500);
break;
case 1://mid
sound(1300);
break;
case 2://high
sound(900);
break;
}//switch
}//bjsoundjsq==2
else if(bjsoundjsq==7){sound(400);}
else if(bjsoundjsq>10)nosound();
}//由报警控制,发报警音
if(keydelay>=6)keydelay-=2;
else if(keydelay>0)keydelay--;
if(disdelay)disdelay--;
}//END monitor
return;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -