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

📄 tinter.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
//
// File name =Tinter.C
// 设计 何风涛

#include "class.h"
#include "classext.h"

const unsigned char  DisOperAera0[16]=
{
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
#pragma locate(DisOperAera0=0xFF13E0)

#pragma interruptpage(0xFF0000)
#pragma interrupt(EPAx_isr = 0)
#pragma interrupt(EPA0_SoftTimer=4)
#pragma interrupt(EPA2_SoftTimer=2)
#pragma interrupt(EPA3_SoftTimer=1)

#pragma interrupt(Com232_Rx=0xFF2038)
#pragma interrupt(Com232_Tx=0xFF2036)
#pragma interrupt(Exint_isr=0xFF203C)

void  EPAx_isr( void )
{
    register int	   int_no;
    register unsigned int  time_value;
    register unsigned long portid;
    register unsigned char value;
    wsr=0;

    int_mask=int_mask | EPA0_INT_BIT;

    int_no = epaipv; /* An interrupt EPAx has occured. */
    time_value=epa3_time;

    while(int_no!=0)
    {
	  switch ( int_no )
	  {
	    case 0x01: /* T2 溢出     */
		       break;
	    case 0x02: /* T1 溢出     */
		       break;
	    case 0x03: /* 捕获 通道 1 */
		       break;
	    case 0x04: /* 捕获 通道 0 */
		       break;
	    case 0x05: /* 捕获 溢出 9 */
		       break;
	    case 0x06: /* 捕获 溢出 8 */
		       break;
	    case 0x07: /* 捕获 溢出 7 */
		       break;
	    case 0x08: /* 捕获 溢出 6 */
		       break;
	    case 0x09: /* 捕获 溢出 5 */
		       break;
	    case 0x0A: /* 捕获 溢出 4 */
		       break;
	    case 0x0B: /* 捕获 溢出 3 */
		       break;
	    case 0x0C: /* 捕获 溢出 2 */
		       break;
	    case 0x0D: /* 捕获 溢出 1 */
		       break;
	    case 0x0E: /* 捕获 溢出 0 */
		       break;
	    case 0x0F: /* EPA9 中断   */
		       break;
	    case 0x10: /* EPA8 中断   */
		       break;
	    case 0x11: /* EPA7 中断   */
		       break;
	    case 0x12: /* EPA6 CAN1   中断   */
		       time_value=epa6_time;
		       value=CAN1_INT;
		       if((value & 0x04)!=0)
		       {//出错中断
			  pVar->Can_Error[1]++;
			  CAN1_CMD=RCAN_RELEASE;
		       }

		       if((value & 0x01)!=0)
		       {//接收中断
			 value=RCAN1_ID;
			 if(value==comset[1].node)
			 {//报文--------------------------------
			     switch(RCAN1_LEN)
			     {
			       case  0x08:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  ComHandle[1]->CanRxdBuf[time_value+1]=RCAN1_BYT1;
					  ComHandle[1]->CanRxdBuf[time_value+2]=RCAN1_BYT2;
					  ComHandle[1]->CanRxdBuf[time_value+3]=RCAN1_BYT3;
					  ComHandle[1]->CanRxdBuf[time_value+4]=RCAN1_BYT4;
					  ComHandle[1]->CanRxdBuf[time_value+5]=RCAN1_BYT5;
					  ComHandle[1]->CanRxdBuf[time_value+6]=RCAN1_BYT6;
					  break;
			       case  0x20:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x21:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x22:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x23:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  ComHandle[1]->CanRxdBuf[time_value+1]=RCAN1_BYT1;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x24:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  ComHandle[1]->CanRxdBuf[time_value+1]=RCAN1_BYT1;
					  ComHandle[1]->CanRxdBuf[time_value+2]=RCAN1_BYT2;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x25:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  ComHandle[1]->CanRxdBuf[time_value+1]=RCAN1_BYT1;
					  ComHandle[1]->CanRxdBuf[time_value+2]=RCAN1_BYT2;
					  ComHandle[1]->CanRxdBuf[time_value+3]=RCAN1_BYT3;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x26:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  ComHandle[1]->CanRxdBuf[time_value+1]=RCAN1_BYT1;
					  ComHandle[1]->CanRxdBuf[time_value+2]=RCAN1_BYT2;
					  ComHandle[1]->CanRxdBuf[time_value+3]=RCAN1_BYT3;
					  ComHandle[1]->CanRxdBuf[time_value+4]=RCAN1_BYT4;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x27:time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  ComHandle[1]->CanRxdBuf[time_value+1]=RCAN1_BYT1;
					  ComHandle[1]->CanRxdBuf[time_value+2]=RCAN1_BYT2;
					  ComHandle[1]->CanRxdBuf[time_value+3]=RCAN1_BYT3;
					  ComHandle[1]->CanRxdBuf[time_value+4]=RCAN1_BYT4;
					  ComHandle[1]->CanRxdBuf[time_value+5]=RCAN1_BYT5;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x28:// RecFrame();
					  time_value=RCAN1_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[1]->CanRxdBuf[time_value+0]=RCAN1_BYT0;
					  ComHandle[1]->CanRxdBuf[time_value+1]=RCAN1_BYT1;
					  ComHandle[1]->CanRxdBuf[time_value+2]=RCAN1_BYT2;
					  ComHandle[1]->CanRxdBuf[time_value+3]=RCAN1_BYT3;
					  ComHandle[1]->CanRxdBuf[time_value+4]=RCAN1_BYT4;
					  ComHandle[1]->CanRxdBuf[time_value+5]=RCAN1_BYT5;
					  ComHandle[1]->CanRxdBuf[time_value+6]=RCAN1_BYT6;
					  Task[1].WaitStatus =Task[1].WaitStatus | 0x02;
					  time_value=0;
					  break;
				default:  break;
			     }
			 }else
			 {//----------------------------
			     if(value==0x7f)
			     {//对时
			       switch(RCAN1_LEN)
			       {
				   case  0x08:ClockBuf[0]=RCAN1_BYT0;
					      ClockBuf[1]=RCAN1_BYT1;
					      ClockBuf[2]=RCAN1_BYT2;
					      ClockBuf[3]=RCAN1_BYT3;
					      ClockBuf[4]=RCAN1_BYT4;
					      ClockBuf[5]=RCAN1_BYT5;
					      ClockBuf[6]=RCAN1_BYT6;
					      break;
				   case  0x28:ClockBuf[7] =RCAN1_BYT0;
					      ClockBuf[8] =RCAN1_BYT1;
					      ClockBuf[9] =RCAN1_BYT2;
					      ClockBuf[10]=RCAN1_BYT3;
					      ClockBuf[11]=RCAN1_BYT4;
					      ClockBuf[12]=RCAN1_BYT5;
					      ClockBuf[13]=RCAN1_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
			     }//对时
			 }//--------------------------------
			 CAN1_CMD=RCAN_RELEASE;
		       }//接收中断

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

		       if((value & 0x04)!=0)
		       {//发送中断
			  if(ComHandle[1]->TransCanMail!=NULL)
			  {
			     TCAN1_ID	=(ComHandle[1]->TransCanMail)->Data[0];
			     TCAN1_LEN	=(ComHandle[1]->TransCanMail)->Data[1];
			     TCAN1_INDX =(ComHandle[1]->TransCanMail)->Data[2];
			     TCAN1_BYT0 =(ComHandle[1]->TransCanMail)->Data[3];
			     TCAN1_BYT1 =(ComHandle[1]->TransCanMail)->Data[4];
			     TCAN1_BYT2 =(ComHandle[1]->TransCanMail)->Data[5];
			     TCAN1_BYT3 =(ComHandle[1]->TransCanMail)->Data[6];
			     TCAN1_BYT4 =(ComHandle[1]->TransCanMail)->Data[7];
			     TCAN1_BYT5 =(ComHandle[1]->TransCanMail)->Data[8];
			     TCAN1_BYT6 =(ComHandle[1]->TransCanMail)->Data[9];
			     ComHandle[1]->TransCanMail=(ComHandle[1]->TransCanMail)->Link;
			     CAN1_CMD=TCAN_REQUEST;
			     if(ComHandle[1]->TransCanMail==NULL)
			     {
				CAN1_CTL=CAN_CTRL_RIE;
				CAN1_CMD=RCAN_RELEASE;
				ComHandle[1]->Status=2;  //wait;
				//屏蔽发送中断 等待接收
			     }else CAN1_CTL=CAN_CTRL_TIE;
			  }else CAN1_CTL=CAN_CTRL_RIE;
			  Task[1].WaitStatus |=1;
		       }
		       break;
	    case 0x13: /* EPA5	CAN0  中断   */
		       time_value=epa5_time;

		       value=CAN0_INT;
		       if((value & 0x04)!=0)
		       {//出错中断
			  pVar->Can_Error[0]++;
			  CAN0_CMD=RCAN_RELEASE;
		       }

		       if((value & 0x01)!=0)
		       {//接收中断
			 value=RCAN0_ID;
			 if(value==comset[0].node)
			 {//报文--------------------------------
			     switch(RCAN0_LEN)
			     {
			       case  0x08:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  ComHandle[0]->CanRxdBuf[time_value+1]=RCAN0_BYT1;
					  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;
					  break;
			       case  0x20:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x21:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x22:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x23:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  ComHandle[0]->CanRxdBuf[time_value+1]=RCAN0_BYT1;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x24:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  ComHandle[0]->CanRxdBuf[time_value+1]=RCAN0_BYT1;
					  ComHandle[0]->CanRxdBuf[time_value+2]=RCAN0_BYT2;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x25:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  ComHandle[0]->CanRxdBuf[time_value+1]=RCAN0_BYT1;
					  ComHandle[0]->CanRxdBuf[time_value+2]=RCAN0_BYT2;
					  ComHandle[0]->CanRxdBuf[time_value+3]=RCAN0_BYT3;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x26:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  ComHandle[0]->CanRxdBuf[time_value+1]=RCAN0_BYT1;
					  ComHandle[0]->CanRxdBuf[time_value+2]=RCAN0_BYT2;
					  ComHandle[0]->CanRxdBuf[time_value+3]=RCAN0_BYT3;
					  ComHandle[0]->CanRxdBuf[time_value+4]=RCAN0_BYT4;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x27:time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  ComHandle[0]->CanRxdBuf[time_value+1]=RCAN0_BYT1;
					  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;
					  Task[0].WaitStatus =Task[0].WaitStatus | 0x02;
					  time_value=0;
					  break;
			       case  0x28:// RecFrame();
					  time_value=RCAN0_INDX-4;
					  if(time_value>245) time_value=245;
					  ComHandle[0]->CanRxdBuf[time_value+0]=RCAN0_BYT0;
					  ComHandle[0]->CanRxdBuf[time_value+1]=RCAN0_BYT1;

⌨️ 快捷键说明

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