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

📄 tinter.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
					  ComHandle[0]->CanRxdBuf[time_value+2]=RCAN0_BYT2;
					  ComHandle[0]->CanRxdBuf[time_value+3]=RCAN0_BYT3;
					  ComHandle[0]->CanRxdBuf[time_value+4]=RCAN0_BYT4;
					  ComHandle[0]->CanRxdBuf[time_value+5]=RCAN0_BYT5;
					  ComHandle[0]->CanRxdBuf[time_value+6]=RCAN0_BYT6;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
				default:  break;
			     }
			 }else
			 {//----------------------------
			     if(value==0x7f)
			     {//对时
			       switch(RCAN0_LEN)
			       {
				   case  0x08:ClockBuf[0]=RCAN0_BYT0;
					      ClockBuf[1]=RCAN0_BYT1;
					      ClockBuf[2]=RCAN0_BYT2;
					      ClockBuf[3]=RCAN0_BYT3;
					      ClockBuf[4]=RCAN0_BYT4;
					      ClockBuf[5]=RCAN0_BYT5;
					      ClockBuf[6]=RCAN0_BYT6;
					      break;
				   case  0x28:ClockBuf[7] =RCAN0_BYT0;
					      ClockBuf[8] =RCAN0_BYT1;
					      ClockBuf[9] =RCAN0_BYT2;
					      ClockBuf[10]=RCAN0_BYT3;
					      ClockBuf[11]=RCAN0_BYT4;
					      ClockBuf[12]=RCAN0_BYT5;
					      ClockBuf[13]=RCAN0_BYT6;
					      value=ClockBuf[6];
					      value=value+ClockBuf[7];
					      value=value+ClockBuf[8];
					      value=value+ClockBuf[9];
					      value=value+ClockBuf[10];
					      value=value+ClockBuf[11];
					      value=value+ClockBuf[12];
					      if(value==ClockBuf[13])
					      {
						    portid=DS_REGA;
						    value=0x26;
						    asm  estb	value,	[portid];
						    portid=DS_REGB;
						    value=0x8E;
						    asm  estb	value,	[portid];

						    portid=DS_SECOND;
						    value=ClockBuf[12];
						    time_value=(value/16)*10;
						    value=value & 0x0f;
						    value=value+time_value;
						    asm  estb	value,	[portid];

						    portid=DS_MINUTE;
						    value=ClockBuf[11];
						    time_value=(value/16)*10;
						    value=value & 0x0f;
						    value=value+time_value;
						    asm  estb	value,	[portid];

						    portid=DS_HOUR;
						    value=ClockBuf[10];
						    time_value=(value/16)*10;
						    value=value & 0x0f;
						    value=value+time_value;
						    asm  estb	value,	[portid];

						    portid=DS_DATE;
						    value=ClockBuf[9];
						    time_value=(value/16)*10;
						    value=value & 0x0f;
						    value=value+time_value;
						    asm  estb	value,	[portid];


						    portid=DS_MONTH;
						    value=ClockBuf[8];
						    time_value=(value/16)*10;
						    value=value & 0x0f;
						    value=value+time_value;
						    asm  estb	value,	[portid];

						    portid=DS_YEAR;
						    value=ClockBuf[7];
						    time_value=(value/16)*10;
						    value=value & 0x0f;
						    value=value+time_value;
						    asm  estb	value,	[portid];

						    portid=DS_CENTURY;
						    value=20;
						    asm  estb	value,	[portid];
						    portid=DS_REGB;
						    value=0x1E;
						    asm  estb	value,	[portid];
						    portid=DS_REGC;
						    asm  eldb	value,	[portid];
						    portid=DS_REGD;
						    asm  eldb	value,	[portid];
					      }
					      break;
			       }//switch
			     }//对时
			 }//--------------------------------
			 CAN0_CMD=RCAN_RELEASE;
		       }//接收中断

		       value=CAN0_STS;
		       if((value & 0x40)!=0)
		       {//错误处理
			  pVar->Can_Error[0]++;
			  CAN0_CMD=RCAN_RELEASE;
		       }

		       if((value & 0x04)!=0)
		       {//发送中断
			  if(ComHandle[0]->TransCanMail!=NULL)
			  {
			     TCAN0_ID	=(ComHandle[0]->TransCanMail)->Data[0];
			     TCAN0_LEN	=(ComHandle[0]->TransCanMail)->Data[1];
			     TCAN0_INDX =(ComHandle[0]->TransCanMail)->Data[2];
			     TCAN0_BYT0 =(ComHandle[0]->TransCanMail)->Data[3];
			     TCAN0_BYT1 =(ComHandle[0]->TransCanMail)->Data[4];
			     TCAN0_BYT2 =(ComHandle[0]->TransCanMail)->Data[5];
			     TCAN0_BYT3 =(ComHandle[0]->TransCanMail)->Data[6];
			     TCAN0_BYT4 =(ComHandle[0]->TransCanMail)->Data[7];
			     TCAN0_BYT5 =(ComHandle[0]->TransCanMail)->Data[8];
			     TCAN0_BYT6 =(ComHandle[0]->TransCanMail)->Data[9];
			     ComHandle[0]->TransCanMail=(ComHandle[0]->TransCanMail)->Link;
			     CAN0_CMD=TCAN_REQUEST;
			     if(ComHandle[0]->TransCanMail==NULL)
			     {
				CAN0_CTL=CAN_CTRL_RIE;
				ComHandle[0]->Status=02;  //wait;
				//屏蔽发送中断 等待接收
			     }else   CAN0_CTL=CAN_CTRL_TIE;
			  }else  CAN0_CTL=CAN_CTRL_RIE;
			  Task[0].WaitStatus |=1;
			  Task[0].WaitStatus &=Task[0].WaitControl;
		       }
		       break;
	    case 0x14: /* EPA4 中断   */
		       time_value=epa4_time;





		       break;
	   default:    break;
	  }
	  int_no = epaipv; /* An interrupt EPAx has occured. */
    }
}


void  Exint_isr(void)
{
     wsr=0;
     int_mask=int_mask | EPA0_INT_BIT;

//   if(Pass==1)
//   {
//	Task[YcCalcTaskNo].WaitStatus =Task[YcCalcTaskNo].WaitStatus | 0x02;
//   }
//   Pass++;
}


void EPA0_SoftTimer(void)
{ /* EPA0 中断	AD7865 */
     register unsigned int  value;

     wsr=0;

     value=epa0_time;
     if(Pass<nextSampleTable->SLimit)
     {
	 value=Pass*4;
	 ADBUF0[value]=AD_DATA; value++;
	 ADBUF0[value]=AD_DATA; value++;
	 ADBUF0[value]=AD_DATA; value++;
	 ADBUF0[value]=AD_DATA; value++;
	 Pass++;
     }else
     {
	 if(Pass==nextSampleTable->SLimit)
	 {
	    Task[YcCalcTaskNo].WaitStatus =Task[YcCalcTaskNo].WaitStatus | 0x02;
	 }else Pass++;
     }
     p2_reg |=0x08;
     p2_reg &=0xf7;
     p2_reg |=0x08;
}

void EPA2_SoftTimer(void) /* 1S    */
{ /* EPA2 中断	DS12887 IRQ 秒中断 */
     register unsigned long portid;
     register unsigned char value;
     wsr=0;

     int_mask=int_mask | EPA0_INT_BIT;
     value=epa2_time;


     msvalue=0;
     portid=DS_SECOND;
     asm  eldb	 value,  [portid];
     Sys_Second=value;

     portid=DS_MINUTE;
     asm  eldb	 value,  [portid];
     Sys_Minute=value;

     portid=DS_HOUR;
     asm  eldb	 value,  [portid];
     Sys_Hour=value;

     portid=DS_DATE;
     asm  eldb	 value,  [portid];
     Sys_Day=value;

     portid=DS_MONTH;
     asm  eldb	 value,  [portid];
     Sys_Month=value;


     portid=DS_YEAR;
     asm  eldb	 value,  [portid];
     Sys_Year=value;

     portid=DS_CENTURY;
     asm  eldb	 value,  [portid];
     Sys_Century=value;

     portid=DS_REGC;
     asm  eldb	 value,  [portid];
     portid=DS_REGD;
     asm  eldb	 value,  [portid];
}



void EPA3_SoftTimer(void) /* 1ms   */
{
     int i;
     register unsigned long portid;
     register unsigned int  portioa;
     register unsigned int  portiob;
     register unsigned char value;
     register unsigned char data;
     register unsigned char image;


     wsr=0;
     int_mask=int_mask | EPA0_INT_BIT;
     value=epa3_time;


     pVar->sdelay++;

/* YkTask =================================================  */
Task51: 	value=Task[51].Use;
		image=Task[51].WaitControl;
		asm
		{
		   bbc	   value,  0,	 Task50;
		   bbs	   image,  7,	 Task51_timer;
		}
		asm br	Task50;
Task51_timer:	portioa=Task[51].TimerCount;
		portioa=portioa-1;
		Task[51].TimerCount=portioa;
		asm
		{
		   cmp	   r0,portioa;
		   bne	   Task51_OverPoll;
		}
		portioa=Task[51].TimerLimit;
		if(portioa!=0)
		{
		  Task[51].WaitStatus=Task[51].WaitStatus | 0x80; //定时到
		  Task[51].TimerCount=portioa;//初始化时间基值
		}
Task51_OverPoll:asm
		{
		   bbs	   image,  6,	 Task51_OverWait;
		};
		asm br	Task50;
Task51_OverWait:portioa=Task[51].OverWaitCount;
		portioa=portioa-1;
		Task[51].OverWaitCount=portioa;
		asm
		{
		   cmp	   r0, portioa;
		   bne	   Task50;
		}
		Task[51].WaitStatus =Task[51].WaitStatus  | 0x40;//定时到
	      //Task[51].WaitControl=Task[51].WaitControl & 0xBF;//定时到
/* YcCalc ===Task===============================================  */
Task50: 	value=Task[50].Use;
		image=Task[50].WaitControl;
		asm
		{
		   bbc	   value,  0,	 Task49;
		   bbs	   image,  7,	 Task50_timer;
		}
		asm br	Task49;
Task50_timer:	portioa=Task[50].TimerCount;
		portioa=portioa-1;
		Task[50].TimerCount=portioa;
		asm
		{
		   cmp	   r0,portioa;
		   bne	   Task50_OverPoll;
		}
		portioa=Task[50].TimerLimit;
		if(portioa!=0)
		{
		  Task[50].WaitStatus=Task[50].WaitStatus | 0x80; //定时到
		  Task[50].TimerCount=portioa;//初始化时间基值
		}
Task50_OverPoll:asm
		{
		   bbs	   image,  6,	 Task50_OverWait;
		};
		asm br	Task49;
Task50_OverWait:portioa=Task[50].OverWaitCount;
		portioa=portioa-1;
		Task[50].OverWaitCount=portioa;
		asm
		{
		   cmp	   r0, portioa;
		   bne	   Task49;
		}
		Task[50].WaitStatus =Task[50].WaitStatus  | 0x40;//定时到
	      //Task[50].WaitControl=Task[50].WaitControl & 0xBF;//定时到
/* XmScan ===Task===============================================  */
Task49: 	value=Task[49].Use;
		image=Task[49].WaitControl;
		asm
		{
		   bbc	   value,  0,	 Task48;
		   bbs	   image,  7,	 Task49_timer;
		}
		asm br	Task48;
Task49_timer:	portioa=Task[49].TimerCount;
		portioa=portioa-1;
		Task[49].TimerCount=portioa;
		asm
		{
		   cmp	   r0,portioa;
		   bne	   Task49_OverPoll;
		}
		portioa=Task[49].TimerLimit;
		if(portioa!=0)
		{
		  Task[49].WaitStatus=Task[49].WaitStatus | 0x80; //定时到
		  Task[49].TimerCount=portioa;//初始化时间基值
		}
Task49_OverPoll:asm
		{

		   bbs	   image,  6,	 Task49_OverWait;
		};
		asm br	Task48;
Task49_OverWait:portioa=Task[49].OverWaitCount;
		portioa=portioa-1;
		Task[49].OverWaitCount=portioa;
		asm
		{
		   cmp	   r0, portioa;
		   bne	   Task48;
		}
		Task[49].WaitStatus =Task[49].WaitStatus  | 0x40;//定时到
	      //Task[49].WaitControl=Task[49].WaitControl & 0xBF;//定时到

/* DisPlay======Task============================================  */
Task48: 	value=Task[48].Use;// asm eldb	 value,  2350[portid];
		image=Task[48].WaitControl;
		asm
		{
		   bbc	   value,  0,	 Task47;
		   bbs	   image,  7,	 Task48_timer;
		}
		asm br	Task47;
Task48_timer:	portioa=Task[48].TimerCount;
		portioa=portioa-1;
		Task[48].TimerCount=portioa;
		asm
		{
		   cmp	   r0,portioa;
		   bne	   Task48_OverPoll;
		}
		portioa=Task[48].TimerLimit;
		if(portioa!=0)
		{
		  Task[48].WaitStatus=Task[48].WaitStatus | 0x80; //定时到
		  Task[48].TimerCount=portioa;//初始化时间基值
		}
Task48_OverPoll:asm
		{
		   bbs	   image,  6,	 Task48_OverWait;
		};
		asm br	Task47;
Task48_OverWait:portioa=Task[48].OverWaitCount;
		portioa=portioa-1;
		Task[48].OverWaitCount=portioa;

⌨️ 快捷键说明

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