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

📄 tsystem.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:

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



     clrbit(&p2_dir, 3);	    /* P2.3=outport		  */
     clrbit(&p2_mode,3);	    /* P2.3=I/O 		 */



     clrbit(&p6_dir,4);   /* P6.4=SCK=outport	   */
     clrbit(&p6_dir,5);   /* P6.5=SO=outport	   */
     clrbit(&p6_dir,6);   /* P6.6=CS=outport	   */
     clrbit(&p6_dir,7);   /* P6.7=WP=outport	   */

     clrbit(&p6_mode,4);  /* P6.4=I/O=SCK	   */
     clrbit(&p6_mode,5);  /* P6.5=I/O=SO=SI	   */
     clrbit(&p6_mode,6);  /* P6.6=I/O=CS	   */
     clrbit(&p6_mode,7);  /* P6.7=I/O=WP	   */

     setbit(&p6_reg, 4);  /* P6.4=I/O=VCC	   */
     setbit(&p6_reg, 5);  /* P6.5=I/O=VCC	   */
     setbit(&p6_reg, 6);  /* P6.6=I/O=VCC	   */
     setbit(&p6_reg, 7);  /* P6.7=I/O=VCC	   */

     Wren_Cmd(); //写允许命令
     Wren_Cmd(); //写允许命令
     Wrsr_Clr(); //1.4	second	reset

     for(i=0;i<10;i++)
     {
       delay(1000);
     }

     for(i=0;i<32;i++)
     {
	yktest[i]=0;
     }


     for(i=0;i<10;i++)
     {
	 KeyCount[i]=0;
     };

     for(i=0;i<25;i++)
     {
	 YSFG[i]=0;
     }
     YSIPR=(unsigned long)SoeBuf;
     YSCON=0;

     rst_wdog();

     rst_wdog();

     for(i=0;i<120;i++)
     {
	 BvBuf[i]=0;
	 SoeBuf[i].msl=0;
	 SoeBuf[i].msh=0;
	 SoeBuf[i].sec=0;
	 SoeBuf[i].hou=0;
	 SoeBuf[i].min=0;
	 SoeBuf[i].day=0;
	 SoeBuf[i].object0=0;
	 SoeBuf[i].object1=0;
     }
     rst_wdog();

     for(i=0;i<0x1000;i++)
     {
	 YXBUF0[i]=0;
	 YXBUF1[i]=0;
     };

     rst_wdog();
     for(i=0;i<1024;i++)
     {
	 LastLcdBuf[i]=~LcdBuf[i];
     };

     epa0error=0;
     errorf=0;



     rst_wdog();
     for(i=0;i<MAXTASK;i++)
     {
	 Task[i].Use=0;
	 Task[i].ResetNum=0; //复位次数
	 Task[i].WaitControl=0x00;
	 Task[i].WaitStatus=0;
	 Task[i].TimerCount=0;
	 Task[i].TimerLimit=0;
	 Task[i].OverWaitCount=0;
	 Task[i].OverWaitLimit=0;
	 Task[i].MailQueueLimit=0;
	 Task[i].MailQueueLength=0;
	 Task[i].MailQueueHead=NULL;
	 Task[i].MailQueueTail=NULL;
	 Task[i].Args=NULL;
	 Task[i].TaskFunc=NULL;
     };

     rst_wdog();

     outportb(PSD_CONTROL_E,	0x00); /* I/O  */
     outportb(PSD_DIRECTION_E,	0xBF); /* PE.7	OUTPUT LED2  */
     outportb(PSD_DRIVE_E,	0x00); /* 互补输出  */

     outportb(PSD_DIRECTION_B,	0xff); /* outport  */
     outportb(PSD_DRIVE_B,	0x00); /* 互补输出  */

     outportb(PSD_DRIVE_A,	0x00); /* 互补输出  */

     outportb(PSD_DRIVE_F,	0x00); /* 互补输出  */


     outportb(PSD_DIRECTION_A,	      0x00); /* inport */
     ch=inportb(PSD_DATAIN_A);
     ch=ch | 0x02;
     outportb(PSD_DIRECTION_A,	      0xff); /*outport */
     outportb(PSD_DATAOUT_A,	      ch);
     outportb(PSD_DRIVE_A,	0x00); /* 互补输出  */

     outportb(PSD_PMMR0,	0x38);
     outportb(PSD_PMMR2,	0x70);


     setbit(&p1_reg, 2);	    /* P1.2作为输入口必须先置 1  */
     clrbit(&p1_dir, 2);	    /* P1.2=outport		 */
     clrbit(&p1_mode,2);	    /* P1.2=I/O 		 */

     setbit(&p1_reg, 2);	    /* P1.2作为输入口必须先置 1  */
     setbit(&p1_dir, 2);	    /* P1.2=inport		 */
     setbit(&p1_mode,2);	    /* P1.2=EPA2		 */

     epa2_con=CAPTURE|DOWN_EDGE|USE_TIMER1;
     int_mask=int_mask | EPA2_INT_BIT;



     setbit(&p2_dir, 7);	    /* P2.7=inport		 */
     clrbit(&p2_mode,7);	    /* P2.7=I/O 		 */

     clrbit(&p2_dir, 3);	    /* P2.3=outport		 */
     clrbit(&p2_mode,3);	    /* P2.3=I/O 		 */


/*   outportb(DS_REGA,	      0x26);	 *Clock initialize*/

/*   outportb(DS_REGB,	      0x8E);	 *Clock initialize*
     outportb(DS_SECOND,	30);
     outportb(DS_MINUTE,	10);
     outportb(DS_HOUR,		12);
     outportb(DS_DATE,		18);
     outportb(DS_MONTH, 	 5);
     outportb(DS_YEAR,		 2);
     outportb(DS_CENTURY,	20);
     outportb(DS_REGB,	      0x1E);  */

     inportb(DS_REGC);
     inportb(DS_REGD);


     pVar->KeyFg=0;
     msvalue=0;
     kr_time_run=0;

     XMFlag=0;
     XMCount=0;
     XM0FullFlag=0;
     XM1FullFlag=0;
     YS_addr=(unsigned long)YXBUF0;

     pVar->IC1821=init1821();
     pVar->NewKey=0xffff;
     pVar->OldKey=0xffff;
     pVar->KeyValue=NULLKEY;
     pVar->KeyID=NULLKEY;


     outportb(PSD_DIRECTION_B,	0xff); /* outport  */
     outportb(PSD_DRIVE_B,	0x00); /* 互补输出  */

     Lcdoff();
     LcdAcmd(0x3E); delay(2000);
     LcdBcmd(0x3E); delay(2000);
     LcdAcmd(0x3F); delay(2000);
     LcdBcmd(0x3F); delay(2000);
     LcdAcmd(0x3F); delay(2000);
     LcdBcmd(0x3F); delay(2000);
     LcdAcmd(0x3F); delay(2000);
     LcdBcmd(0x3F); delay(2000);
     LcdAcmd(0xC0); delay(2000);
     LcdBcmd(0xC0); delay(2200);
     LcdAcmd(0xB8); delay(2000);
     LcdBcmd(0xB8); delay(2000);
     LcdAcmd(0x40); delay(2000);
     LcdBcmd(0x40); delay(2000);
     MAP(0,0,127,7, PICTURE );


     for(i=0;i<MAXCOMNUM;i++) /* 串行通信规约配置表 */
     {
	 ComConfig[i].Use=0;
	 ComConfig[i].Com=0;
     };

     ComConfig[0].Use=0x00;
     ComConfig[0].Com=0x00;   /* 串行通信R13维护软件规约程序 */



     rst_wdog();

     tcan_num=0;
     tcan_len=0;
     tcanbuf_len=0;
     systimems=0;

     SegFg=0;

//   InitR13_1();


     rst_wdog();
     pVar->MenuMode=FACE_MENU;
     init_coef();

//   flash_boot_set_unlock_bybass();

     rst_wdog();


     pVar->yxsum=yxnum*20;
     pVar->ymsum=ymnum*20;
     switch(yxnum)//遥信板个数
     {
       case  0x01:yx_num=0x01;
		  break;
       case  0x02:yx_num=0x03;
		  break;
       case  0x03:yx_num=0x07;
		  break;
       case  0x04:yx_num=0x0F;
		  break;
       case  0x05:yx_num=0x1F;
		  break;
       case  0x06:yx_num=0x3F;
		  break;
	 default: yx_num=0x00;
		  break;
     }
     switch(ymnum)//遥脉板个数
     {
       case  0x01:ym_num=0x01;
		  break;
       case  0x02:ym_num=0x03;
		  break;
       case  0x03:ym_num=0x07;
		  break;
       case  0x04:ym_num=0x0F;
		  break;
	 default: ym_num=0x00;
		  break;
     }

    pVar->Lcd_BG_Count=10000;

     Init_SoftTimer();
     InitAD7865();
     InitKR();
     InitYx();
     init_soepm();
     InitSampleTable();
     InitYC();
     InitYk();
     InitialComHandle();
     InitialComDevice(Can0ComhandleNo);
     InitialComDevice(Can1ComhandleNo);

     InitialComDevice(TaskNoCOM00);
     InitialComDevice(TaskNoCOM01);
     InitialComDevice(TaskNoCOM02);
     InitialComDevice(TaskNoCOM03);
     InitialComDevice(TaskNoCOM04);
     InitialComDevice(TaskNoCOM05);

     Init_Run_Led();
     Default_bvtm();

}

unsigned char InitPostStation(void)
{
  int  i;
  struct Mail FARDATA *TempPtr;
  PostStation.MailQueueLength=0;
  PostStation.MailQueueHead=NULL;
  for(i=0;i<MAXEMPMAIL;i++)
  {
	  // TempPtr=(struct Mail  FARDATA *)malloc(sizeof(struct Mail));
	  // if(TempPtr==NULL)
	  // {
	  //   return(FALSE);
	  // }
	  TempPtr=&Message[i];
	  TempPtr->Link=PostStation.MailQueueHead;
	  PostStation.MailQueueHead=TempPtr;
	  PostStation.MailQueueLength++;
  };
  PostStation.TotMailNum=PostStation.MailQueueLength;
  return(TRUE);
}



void MultiTask(void)
{
  unsigned int i=0,j=0,k=0;
  register unsigned int  port;
  register unsigned char  value;
  unsigned char  ch;
  union WTEMP_ST  wtmp;

  enable();
  enable_pts();

  pVar->ResetSum++;
  wtmp.Word=pVar->ResetSum;
  Wren_Cmd(); //写允许命令
  Byte_Write(0,wtmp.B.Low);
  Wren_Cmd(); //写允许命令
  Byte_Write(1,wtmp.B.High);
  wtmp.B.Low=Byte_Read(0);
  wtmp.B.High=Byte_Read(1);
  pVar->ResetSum=wtmp.Word;

  Wren_Cmd(); //写允许命令
  Wrsr_Cmd(); //1.4  second  reset

  while(1)
  {//------------while---------------------------------------
      for(i=47;i<MAXTASK;i++)
      {
	  (*(Task[46].TaskFunc))(Task[46].Args);
	  if(((Task[0].Use) & (Task[0].WaitStatus))) (*(Task[0].TaskFunc))(Task[0].Args);
	  LCD_Device();
	  if(((Task[1].Use) & (Task[1].WaitStatus))) (*(Task[1].TaskFunc))(Task[1].Args);
	  LCD_Device();
	  if(((Task[2].Use) & (Task[2].WaitStatus))) (*(Task[2].TaskFunc))(Task[2].Args);
	  LCD_Device();
	  if(((Task[3].Use) & (Task[3].WaitStatus))) (*(Task[3].TaskFunc))(Task[3].Args);
	  LCD_Device();
	  if(((Task[4].Use) & (Task[4].WaitStatus))) (*(Task[4].TaskFunc))(Task[4].Args);
	  LCD_Device();
	  if(((Task[5].Use) & (Task[5].WaitStatus))) (*(Task[5].TaskFunc))(Task[5].Args);
	  LCD_Device();
	  if(((Task[6].Use) & (Task[6].WaitStatus))) (*(Task[6].TaskFunc))(Task[6].Args);
	  LCD_Device();
	  if(((Task[7].Use) & (Task[7].WaitStatus))) (*(Task[7].TaskFunc))(Task[7].Args);
	  LCD_Device();
	  (*(Task[46].TaskFunc))(Task[46].Args);
	  LCD_Device();

	  if(((Task[i].Use) & (Task[i].WaitStatus)))
	  {
	      (*(Task[i].TaskFunc))(Task[i].Args);
	      LCD_Device();
	  };
	  LCD_Device();
	  KeyScan();
	  LCD_Device();
      };
      enable();
      rst_wdog();
  };//------------while---------------------------------------
}

void SystemInit(void)
{
     InitAllVar();
     InitPostStation();
     InitSysPara();
     CreateDbase();
     CreateTask();
/*   CreateComTask();	*/
}

void SystemRun(void)
{
     MultiTask();
}

void SystemReset(void)
{
     wdog();
     while(1)
     {
	disable();
     }
}

void XmScan(void)
{
     if(((TaskStatus(XmScanTaskNo) & 0x80)!=0)) //定时巡检
     {
	 ResetTimer(XmScanTaskNo);
	 SCANKR();
     }
//   if(((TaskStatus(XmScanTaskNo) & 0x08)!=0))
//   {
//   }
}

void SetFirstChan(struct  SampleTableStruct *pSampleTable)
{
     register unsigned int  portid;
     register unsigned int  value;
     register unsigned char addr,data;


     disable();//电子开关  关断
     DataBusOut(BSQ_BOARD_1_573, BSQ_BOARD_NULL);
     DataBusOut(BSQ_BOARD_2_573, BSQ_BOARD_NULL);
     DataBusOut(BSQ_BOARD_3_573, BSQ_BOARD_NULL);
     DataBusOut(BSQ_BOARD_4_573, BSQ_BOARD_NULL);
     DataBusOut(BSQ_BOARD_5_573, BSQ_BOARD_NULL);
     DataBusOut(BSQ_BOARD_6_573, BSQ_BOARD_NULL);
     DataBusOut(BSQ_BOARD_7_573, BSQ_BOARD_NULL);
     DataBusOut(BSQ_BOARD_8_573, BSQ_BOARD_NULL);
     enable();

     //电子开关切换到下一条线路
     disable();

     addr=pSampleTable->Board1_Addr[0];
     data=pSampleTable->Board1_Data[0];

//   addr=BSQ_BOARD_1_573;//第1块板
//   data=BSQ_BOARD_NUM1;



     value=PIO_A_DAT;	       /*  outpout 数据总线  */
     asm  stb  data,	    [value];
     asm  stb  data,	    [value];
     asm  stb  data,	    [value];
     value=PIO_B_DAT;	       /*  output 地址总线  */
     asm  stb  addr,	    [value];
     asm  stb  addr,	    [value];
     asm  stb  addr,	    [value];
     asm  stb  addr,	    [value];
     data=0xff;
     asm  stb  data,	    [value]; //清地址总线
     addr=pSampleTable->Board2_Addr[0];
     data=pSampleTable->Board2_Data[0];

//   addr=BSQ_BOARD_2_573;//第1块板
//   data=BSQ_BOARD_NUM1;



     value=PIO_A_DAT;	       /*  outpout 数据总线  */
     asm  stb  data,	    [value];
     asm  stb  data,	    [value];
     asm  stb  data,	    [value];
     asm  stb  data,	    [value];
     value=PIO_B_DAT;	       /*  output 地址总线  */
     asm  stb  addr,	    [value];
     asm  stb  addr,	    [value];
     asm  stb  addr,	    [value];
     asm  stb  addr,	    [value];
     asm  stb  addr,	    [value];
     data=0xff;
     asm  stb  data,	    [value]; //清地址总线
     enable();
}

⌨️ 快捷键说明

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