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

📄 tsystem.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
//
// File name =TSYSTEM.CPP
//设计 何风涛
#include	"class.h"
#include	"classext.h"
void InitCanBus(int  CanPort)
{
  //DCL CAN_BAUD0(9) BYTE PUB CST(0BFH,0B1H,98H,89H,84H,81H,80H,80H,80H);
  //DCL CAN_BAUD1(9) BYTE PUB CST(07FH,02FH,2FH,7FH,7FH,7FH,7FH,2FH,25H);
  // 0--- (1+8+16)*(63+1)*0.1us = 160.00us =	6.25K BP
  // 1--- (1+3+16)*(49+1)*0.1us = 100.00us =   10K    BP
  // 2--- (1+3+16)*(24+1)*0.1us =  50.00us =   20K    BP
  // 3--- (1+8+16)*( 9+1)*0.1us =  25.00us =   40K    BP
  // 4--- (1+8+16)*( 4+1)*0.1us =  12.50us =   80K    BP
  // 5--- (1+8+16)*( 1+1)*0.1us =   5.00us =  200K    BP
  // 6--- (1+8+16)*( 0+1)*0.1us =   2.50us =  400K    BP
  // 7--- (1+3+16)*( 0+1)*0.1us =   2.00us =  500K    BP
  // 8--- (1+3+ 6)*( 0+1)*0.1us =   1.00us = 1000K    BP
  // CAN_BP:缺省为二分频方式:T_OSC=2/20M=0.1us
  // T_SCL=(BRP+1)*T_OSC;
  // T_SYNCSEG=1*T_SCL;
  // T_TSEG1=(TSEG1+1)*T_SCL;
  // T_TSEG2=(TSEG2+1)*T_SCL;
  // T_BIT=T_SYNCSEG+T_TSEG1+T_TSEG2;

  switch(CanPort)
  {
     case  0x00:disable();
		setbit(&p1_reg,5);	       /* P1.5作为输入口必须先置 1  */
		clrbit(&p1_dir,5);	       /* P1.5=outport		    */
		clrbit(&p1_mode,5);	       /* P1.5=I/O		    */
		setbit(&p1_reg, 5);	       /* P1.5作为输入口必须先置 1  */
		setbit(&p1_dir, 5);	       /* P1.5=inport		    */
		setbit(&p1_mode,5);	       /* P1.5=EPA5		    */
		t1control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
		epa5_con=0;
		epa5_con=CAPTURE|DOWN_EDGE|USE_TIMER1;
		int_mask=int_mask | EPA5_INT_BIT;
		epa_mask=epa_mask | EPA5_EPAMASK_BIT;
		CAN0_CTL=RESET_REQUEST;       /* 01		  */
		CAN0_CTL=RESET_REQUEST;       /* 01		  */
		CAN0_AMR=0xFF;
		CAN0_ACR=0x03;		      /* 节点号 	  */
		CAN0_CDR=0x04;//FCLK/10
		//000: Fclk/2
		//001: Fclk/4
		//010: Fclk/6
		//011: Fclk/8
		//100: Fclk/10
		//101: Fclk/12
		//110: Fclk/14
		//111: Fclk
		switch(comset[0].speed)
		{
		   case    10://6.25K
			      CAN0_BTR0=0xBF;	    /* cell's baud rate */
			      CAN0_BTR1=0x7F;
			      break;
		   case    11://10K
			      CAN0_BTR0=0xB1;	    /* cell's baud rate */
			      CAN0_BTR1=0x2F;
			      break;
		   case    12://20K
			      CAN0_BTR0=0x98;	    /* cell's baud rate */
			      CAN0_BTR1=0x2F;
			      break;
		   case    13://40K
			      CAN0_BTR0=0x89;	    /* cell's baud rate */
			      CAN0_BTR1=0x7F;
			      break;
		   case    14://80K
			      CAN0_BTR0=0x84;	    /* cell's baud rate */
			      CAN0_BTR1=0x7F;
			      break;
		   case    15://200K
			      CAN0_BTR0=0x81;	    /* cell's baud rate */
			      CAN0_BTR1=0x7F;
			      break;
		   case    16://400K
			      CAN0_BTR0=0x80;	    /* cell's baud rate */
			      CAN0_BTR1=0x7F;
			      break;
		   case    17://800K
			      CAN0_BTR0=0x80;	    /* cell's baud rate */
			      CAN0_BTR1=0x2F;
			      break;
		   case    18://1000K
			      CAN0_BTR0=0x80;	    /* cell's baud rate */
			      CAN0_BTR1=0x25;
			      break;
		      default://200K
			      CAN0_BTR0=0x81;	    /* cell's baud rate */
			      CAN0_BTR1=0x7F;
			      break;
		}
		CAN0_OCR=CAN_OUT_CTRL; /*      * 0FAH	    */
		CAN0_CTL=RESET_NULL;
		CAN0_CTL=CAN_CTRL_RIE;
		CAN0_CMD=RCAN_RELEASE;
		break;
     case  0x01:disable();
		setbit(&p1_reg, 6);	       /* P1.6作为输入口必须先置 1  */
		clrbit(&p1_dir, 6);	       /* P1.6=outport		    */
		clrbit(&p1_mode,6);	       /* P1.6=I/O		    */
		setbit(&p1_reg, 6);	       /* P1.6作为输入口必须先置 1  */
		setbit(&p1_dir, 6);	       /* P1.6=inport		    */
		setbit(&p1_mode,6);	       /* P1.6=EPA6		    */
		t1control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
		epa6_con=0;
		epa6_con=CAPTURE|DOWN_EDGE|USE_TIMER1;
		int_mask=int_mask | EPA6_INT_BIT;
		epa_mask=epa_mask | EPA6_EPAMASK_BIT;
		CAN1_CTL=RESET_REQUEST;       /* 01		  */
		CAN1_CTL=RESET_REQUEST;       /* 01		  */
		CAN1_AMR=0xFF;
		CAN1_ACR=0x03;		      /* 节点号 	  */
		CAN1_CDR=0x04;//FCLK/10
		//000: Fclk/2
		//001: Fclk/4
		//010: Fclk/6
		//011: Fclk/8
		//100: Fclk/10
		//101: Fclk/12
		//110: Fclk/14
		//111: Fclk
		switch(comset[1].speed)
		{
		   case    10://6.25K
			      CAN1_BTR0=0xBF;	    /* cell's baud rate */
			      CAN1_BTR1=0x7F;
			      break;
		   case    11://10K
			      CAN1_BTR0=0xB1;	    /* cell's baud rate */
			      CAN1_BTR1=0x2F;
			      break;
		   case    12://20K
			      CAN1_BTR0=0x98;	    /* cell's baud rate */
			      CAN1_BTR1=0x2F;
			      break;
		   case    13://40K
			      CAN1_BTR0=0x89;	    /* cell's baud rate */
			      CAN1_BTR1=0x7F;
			      break;
		   case    14://80K
			      CAN1_BTR0=0x84;	    /* cell's baud rate */
			      CAN1_BTR1=0x7F;
			      break;
		   case    15://200K
			      CAN1_BTR0=0x81;	    /* cell's baud rate */
			      CAN1_BTR1=0x7F;
			      break;
		   case    16://400K
			      CAN1_BTR0=0x80;	    /* cell's baud rate */
			      CAN1_BTR1=0x7F;
			      break;
		   case    17://800K
			      CAN1_BTR0=0x80;	    /* cell's baud rate */
			      CAN1_BTR1=0x2F;
			      break;
		   case    18://1000K
			      CAN1_BTR0=0x80;	    /* cell's baud rate */
			      CAN1_BTR1=0x25;
			      break;
		      default://200K
			      CAN1_BTR0=0x81;	    /* cell's baud rate */
			      CAN1_BTR1=0x7F;
			      break;
		}
		CAN1_OCR=CAN_OUT_CTRL; /*      * 0FAH		  */
		CAN1_CTL=RESET_NULL;
		CAN1_CTL=CAN_CTRL_RIE;
		break;
	default:break;
  }
}


void InitAD7865(void)
{
/*   625*20(M)=0x30D4	625*20=12500  */
     int i;


     outport(ADFREQ_COEF,	 6250);
     outport(AD7874_CMD,	 0x0F);

     disable();
     DataBusOut(BSQ_BOARD_1_573, 0x00);
     DataBusOut(BSQ_BOARD_2_573, 0x00);
     DataBusOut(BSQ_BOARD_3_573, 0x00);
     DataBusOut(BSQ_BOARD_4_573, 0x00);
     DataBusOut(BSQ_BOARD_5_573, 0x00);
     DataBusOut(BSQ_BOARD_6_573, 0x00);
     DataBusOut(BSQ_BOARD_7_573, 0x00);
     DataBusOut(BSQ_BOARD_8_573, 0x00);

     pVar->freqdivsum=3125;/*  200ns *3125=625us */

     Init_EPA0_Freq(3125);



     Pass=0;
     Yc_Sample=0;
//-----初始化采样链表--------------------------------------------------------------------------------------------
     headSampleTable=&SampleTable[0];
     nextSampleTable=headSampleTable;
     memset(headSampleTable,0,sizeof(struct SampleTableStruct)*MAXSAMPLECOUNT);

     pVar->headADBUF=ADBUF0;

     pVar->ADBUF[0] =ADBUF0;
     pVar->ADBUF[1] =ADBUF1;
     pVar->ADBUF[2] =ADBUF2;
     pVar->ADBUF[3] =ADBUF3;
     pVar->ADBUF[4] =ADBUF4;
     pVar->ADBUF[5] =ADBUF5;
     pVar->ADBUF[6] =ADBUF6;
     pVar->ADBUF[7] =ADBUF7;
     pVar->ADBUF[8] =ADBUF8;
     pVar->ADBUF[9] =ADBUF9;
     pVar->ADBUF[10]=ADBUF10;
     pVar->ADBUF[11]=ADBUF11;
     pVar->ADBUF[12]=ADBUF12;
     pVar->ADBUF[13]=ADBUF13;
     pVar->ADBUF[14]=ADBUF14;
     pVar->ADBUF[15]=ADBUF15;
}

void  InitSampleCycle(int cycle)
{
      SampleTable[cycle].Board1_Addr[0]=Board1_Addr[cycle];
      SampleTable[cycle].Board1_Data[0]=Board1_Data[cycle];
      SampleTable[cycle].Board2_Addr[0]=Board2_Addr[cycle];
      SampleTable[cycle].Board2_Data[0]=Board2_Data[cycle];
      SampleTable[cycle].Flag=0;
      SampleTable[cycle].SLimit=SLimit[cycle];
      SampleTable[cycle].BSQ[0] =Bsq0[cycle];
      SampleTable[cycle].BSQ[1] =Bsq1[cycle];
      SampleTable[cycle].BSQ[2] =Bsq2[cycle];
      SampleTable[cycle].BSQ[3] =Bsq3[cycle];
      SampleTable[cycle].FreqFlag=FreqFlag[cycle];
}

void InitSampleTable(void)
{
     unsigned int i,j,k,it;
     unsigned char u1,u2,u3,i1,i2,i3,ub;

     for(i=1;i<MAXSAMPLECOUNT;i++)
     {
	nextSampleTable->Link=&SampleTable[i];
	nextSampleTable=nextSampleTable->Link;
     }
     nextSampleTable->Link=NULL;
     pVar->SampleCycle=0;  /* 采样周期 */

     j=mrnum;
     if(j>7) j=7; //模入板个数

     switch(j)
     {
       case  0x01:
       case  0x02:for(i=0;i<4;i++)
		  {
		       InitSampleCycle(i);
		       pVar->SampleCycle++;  /* 采样周期 */
		  }
		  break;
       case  0x03:for(i=0;i<8;i++)
		  {
		       InitSampleCycle(i);
		       pVar->SampleCycle++;  /* 采样周期 */
		  }
		  break;
       case  0x04:for(i=0;i<12;i++)
		  {
		       InitSampleCycle(i);
		       pVar->SampleCycle++;  /* 采样周期 */
		  }
		  break;
       case  0x05:for(i=0;i<16;i++)
		  {
		       InitSampleCycle(i);
		       pVar->SampleCycle++;  /* 采样周期 */
		  }
		  break;
       case  0x06:for(i=0;i<20;i++)
		  {
		       InitSampleCycle(i);
		       pVar->SampleCycle++;  /* 采样周期 */
		  }
		  break;
       case  0x07:for(i=0;i<24;i++)
		  {
		       InitSampleCycle(i);
		       pVar->SampleCycle++;  /* 采样周期 */
		  }
		  break;
      default:	  pVar->SampleCycle=0;	/* 采样周期 */
		  break;
     }
     j=0;

     pVar->lnsum=0;
     for(i=0;i<MAXLINENUM;i++)
     {
	 it=0;

	 for(j=0;j<6;j++)
	 {
	    if(LineSetdata[i][j]!=0) it=1;
	 }

	 if(it!=0)
	 {
	      SampleTable[pVar->SampleCycle].LineNo=pVar->lnsum;
	      pVar->lnsum++;

	      u1=LineSetdata[i][0]; /* U1 第 1 节拍  */
	      if(u1>56) u1=0;
	      SampleTable[pVar->SampleCycle].BSQ[0]=u1;/* U1 */
	      SampleTable[pVar->SampleCycle].Board1_Addr[0]=BsqAddr[u1];
	      SampleTable[pVar->SampleCycle].Board1_Data[0]=BsqData[u1];
	      i1=LineSetdata[i][1]; /* I1 第 1 节拍  */
	      if(i1>56) i1=0;
	      SampleTable[pVar->SampleCycle].BSQ[1]=i1; /* I1 */
	      SampleTable[pVar->SampleCycle].Board2_Addr[0]=BsqAddr[i1];
	      SampleTable[pVar->SampleCycle].Board2_Data[0]=BsqData[i1];

	      u2=LineSetdata[i][2]; /* U2 第 2 节拍  */
	      if(u2>56) u2=0;
	      SampleTable[pVar->SampleCycle].BSQ[2]=u2;
	      SampleTable[pVar->SampleCycle].Board1_Addr[1]=BsqAddr[u2];
	      SampleTable[pVar->SampleCycle].Board1_Data[1]=BsqData[u2];
	      i2=LineSetdata[i][3]; /* I2 第 2 节拍  */
	      if(i2>56) i2=0;
	      SampleTable[pVar->SampleCycle].BSQ[3]=i2;
	      SampleTable[pVar->SampleCycle].Board1_Addr[1]=BsqAddr[i2];
	      SampleTable[pVar->SampleCycle].Board1_Data[1]=BsqData[i2];

	      u3=LineSetdata[i][4]; /* U3 第 3 节拍  */
	      if(u3>56) u3=0;
	      SampleTable[pVar->SampleCycle].BSQ[4] =u3;/* U3 */
	      SampleTable[pVar->SampleCycle].Board1_Addr[2]=BsqAddr[u3];
	      SampleTable[pVar->SampleCycle].Board1_Data[2]=BsqData[u3];
	      i3=LineSetdata[i][5]; /* I3 第 3 节拍  */
	      if(i3>56) i3=0;
	      SampleTable[pVar->SampleCycle].BSQ[5]=i3;/* I3 */
	      SampleTable[pVar->SampleCycle].Board2_Addr[2]=BsqAddr[i3];
	      SampleTable[pVar->SampleCycle].Board2_Data[2]=BsqData[i3];

	      if((u3!=0)||(i3!=0))
	      {//三表法

	      }else
	      {//二表法

	      }

	      if(LINETYPE[i]!=0)
	      {//U=U+I
		 SampleTable[pVar->SampleCycle].Flag=2;//二表法 一周波采样
	      }else
	      {//P=U*I
		 SampleTable[pVar->SampleCycle].Flag=1;//二表法 一周波采样 计算功率
	      }
	      SampleTable[pVar->SampleCycle].SLimit=32*4+4;
	      pVar->SampleCycle++;
	 }else	break;
     }
     if(pVar->SampleCycle!=0) /* 采样周期 */
     {
	SampleTable[pVar->SampleCycle].Link=NULL;
	SampleTable[pVar->SampleCycle-1].Link=NULL;
	headSampleTable=&SampleTable[0];
	nextSampleTable=headSampleTable;
	SetFirstChan(headSampleTable);//电子开关切换到下一条线路
     }else
     {
	SampleTable[pVar->SampleCycle].Link=NULL;
	headSampleTable=NULL;
	nextSampleTable=headSampleTable;
     }
     MaxLine=pVar->lnsum;
}

unsigned char InitAllVar(void)
{
     union WTEMP_ST  wtmp;
     disable();
     disable_pts();
     wsr = 0;	// Use SFR without suffix
//   for(WORK=0;WORK<10;WORK++)
//   {
//	for(WTMP=0;WTMP<10000;WTMP++)
//	{//WAIT  PLD
//	   rst_wdog();
//	}
//   }

     outportb(PIO_A_CMD,      0x00);  /*  input 数据总线  */
     outportb(PIO_B_CMD,      0xFF);  /*  output 地址总线  */
     outportb(PIO_B_DAT,      0xFF);  /*  清地址总线	   */
     outportb(PIO_A_CMD,      0xFF);  /*  output 数据总线  */


     outportb(PIO_C_CMD,      0xFF);  /*  output   */
     outportb(PIO_D_CMD,      0xFF);  /*  output   */
     outportb(PTC_A_CMD,      0xFF);  /*  output   */
     outportb(PTC_B_CMD,      0xFF);  /*  output   */

     outportb(KEYCONTROL,     0xFF);  /*  output   */
     outportb(KEYDATA,	      0xff);  /*  1  */
     outportb(KEYCONTROL,     0x00);  /*  input   */

     DataBusOut(DY_BOARD_1_573, 0x55);

     InitYk();

     pVar=(struct AllVarStruct	FARDATA *)malloc(sizeof(struct AllVarStruct));
     if(pVar==NULL)  return(FALSE);
     memset(pVar, 0,sizeof(struct AllVarStruct));
//   memset(LNLIB,0,sizeof(struct LNTYPE)*MAXLINENUM);
     pVar->ycnum=32;
     pVar->dcnum=mrnum*8;
     pVar->jcnum=mrnum*8;
     pVar->maxyxnum=48;
     pVar->maxymnum=48;
//   pVar->maxywnum=48;
//   pVar->maxyknum=32;
     pVar->action=NOUSE;
     pVar->MenuMode=FACE_MENU;
//   pVar->displayline=12;//  12 条 线 路
     pVar->Lcd_BG_Count=30000;
     pVar->LcdBCount=64;

     wtmp.B.Low=Byte_Read(0);
     wtmp.B.High=Byte_Read(1);
     pVar->ResetSum=wtmp.Word;


     return(TRUE);
}



void CreateTask(void)
{
     CreateATask(DisplayTaskNo,10,NULL,Display,0xff,0xff);//创建Display   任务	  每隔190毫秒 执行一次
     SetTimer(DisplayTaskNo,100);
     CreateATask(XmScanTaskNo, 10,NULL,XmScan,0xff,0xff); //创建SCANKR	  任务
     SetTimer(XmScanTaskNo,10);
     CreateATask(YcCalcTaskNo, 10,NULL,YcCalc,0xff,0xff); //创建YcCalc	  任务
     SetTimer(YcCalcTaskNo,100);
     CreateATask(YkTaskNo, 10,NULL,YkTask,0xff,0xff);	  //创建YkTask	  任务
     SetTimer(YkTaskNo,0);
     CreateATask(DbaseTaskNo,10,NULL,DbaseTask,0xff,0xff);//创建DbaseTask 任务
     SetTimer(DbaseTaskNo,20);
     CreateATask(ComDeviceTaskNo,10,NULL,COM_Device_Task,0xff,0xff);
     SetTimer(ComDeviceTaskNo,1);
}

void InitSysPara(void)	    // 初始化系统参数
{
     int  i=0,j=0,k;
     register unsigned char  ch;

     unsigned int  addr,data;
     unsigned char  chh;

     disable();
     wsr = 0;		    // Use SFR without suffix
     int_pending=0;
     int_pend1=0;
     int_mask1=0;
     int_mask=0x00;
     epa_mask=0;
     epa_mask1=0;
     ptssel=0;
     epa6_con=0;
     epa0_con=0;

⌨️ 快捷键说明

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