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

📄 tsystem.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
			      ComHandle[sio]->TxdProWarn=0;
			      InitialY12Task(sio);
			      break;
	case  TaskNoCOM02:    //COM3 驱动程序
			      Init_COM3();//16C554_CSA
			      ComHandle[sio]->UseInfo=2;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP

			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);

			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->RxdBuf=(unsigned int *)malloc(300);
			      memset(ComHandle[sio]->RxdBuf,0,300);
			      ComHandle[sio]->RxdBufTail   = 0;
			      ComHandle[sio]->RxdBufHead   = 0;
			      ComHandle[sio]->RxdBufLength = 0;
			      ComHandle[sio]->RxdBufSize   = 300;
			      ComHandle[sio]->RxdProWarn   = 1;

			      ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
			      memset(ComHandle[sio]->TxdBuf,0,300);
			      ComHandle[sio]->TxdBufHead=0;
			      ComHandle[sio]->TxdBufTail=0;
			      ComHandle[sio]->TxdBufLength=0;
			      ComHandle[sio]->TxdBufSize=300;
			      ComHandle[sio]->TxdProWarn=0;
			      InitialY12Task(sio);
			      break;
	case  TaskNoCOM03:    //COM4 驱动程序
			      Init_COM4();//16C554_CSB
			      ComHandle[sio]->UseInfo=2;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP

			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);

			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->RxdBuf=(unsigned int  *)malloc(300);
			      memset(ComHandle[sio]->RxdBuf,0,300);
			      ComHandle[sio]->RxdBufTail   = 0;
			      ComHandle[sio]->RxdBufHead   = 0;
			      ComHandle[sio]->RxdBufLength = 0;
			      ComHandle[sio]->RxdBufSize   = 300;
			      ComHandle[sio]->RxdProWarn   = 1;
			      ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
			      memset(ComHandle[sio]->TxdBuf,0,300);
			      ComHandle[sio]->TxdBufHead=0;
			      ComHandle[sio]->TxdBufTail=0;
			      ComHandle[sio]->TxdBufLength=0;
			      ComHandle[sio]->TxdBufSize=300;
			      ComHandle[sio]->TxdProWarn=0;
			      InitialY12Task(sio);
			      break;
	case  TaskNoCOM04:    //COM5 驱动程序
			      Init_COM5();//16C554_CSC
			      ComHandle[sio]->UseInfo=2;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP

			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);

			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->RxdBuf=(unsigned int  *)malloc(300);
			      memset(ComHandle[sio]->RxdBuf,0,300);
			      ComHandle[sio]->RxdBufTail   = 0;
			      ComHandle[sio]->RxdBufHead   = 0;
			      ComHandle[sio]->RxdBufLength = 0;
			      ComHandle[sio]->RxdBufSize   = 300;
			      ComHandle[sio]->RxdProWarn   = 1;
			      ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
			      memset(ComHandle[sio]->TxdBuf,0,300);
			      ComHandle[sio]->TxdBufHead=0;
			      ComHandle[sio]->TxdBufTail=0;
			      ComHandle[sio]->TxdBufLength=0;
			      ComHandle[sio]->TxdBufSize=300;
			      ComHandle[sio]->TxdProWarn=0;
			      InitialY12Task(sio);
			      break;
	case  TaskNoCOM05:    //COM6 驱动程序
			      Init_COM6();//16C554_CSD
			      ComHandle[sio]->UseInfo=2;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP

			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);

			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->RxdBuf=(unsigned int  *)malloc(300);
			      memset(ComHandle[sio]->RxdBuf,0,300);
			      ComHandle[sio]->RxdBufTail   = 0;
			      ComHandle[sio]->RxdBufHead   = 0;
			      ComHandle[sio]->RxdBufLength = 0;
			      ComHandle[sio]->RxdBufSize   = 300;
			      ComHandle[sio]->RxdProWarn   = 1;
			      ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
			      memset(ComHandle[sio]->TxdBuf,0,300);
			      ComHandle[sio]->TxdBufHead=0;
			      ComHandle[sio]->TxdBufTail=0;
			      ComHandle[sio]->TxdBufLength=0;
			      ComHandle[sio]->TxdBufSize=300;
			      ComHandle[sio]->TxdProWarn=0;
			      InitialY12Task(sio);
			      break;
	default:	      break;
      }
      return (TRUE);
}


unsigned char  InitialComHandle(void)
{
     int i;
     for(i=0;i<MAXCOMNUM;i++)
     {
	 ComHandle[i]=(struct TComStruct *)malloc(sizeof(struct TComStruct));
	 if(ComHandle[i]==NULL)  return(FALSE);
	 memset(ComHandle[i],0,sizeof(struct TComStruct));
     }
     return (TRUE);
}


unsigned char CreateDbase(void)
{ //YX	  SOE	 AC    DC    LN    YM	  DW	YK
     pDataLibary=(struct Libarystruct *)malloc(sizeof(struct Libarystruct));
     if(pDataLibary==NULL)  return(FALSE);
     memset(pDataLibary,0,sizeof(struct Libarystruct));
     pDataLibary->yxbuf=YXBUF;
     pDataLibary->ymbuf=YMBUF;
     return (TRUE);
}

void DbaseTask(void)
{
     int i,j,k,m;
     TakeLetterDbase(); //要求处理接收的邮件
     if(((TaskStatus(DbaseTaskNo)&0x80)!=0)) //定时巡检
     {//档位生成
	 ResetTimer(DbaseTaskNo);
	 for(i=0;i<4;i++)
	 {
		switch(DWTYPE[i])
		{
		  case	0x00://编码型
			     j=0;
			     k=DWBNO[i][4];
			     if(k!=0)
			     {
				k--;
				if( ChkBit(YXBUF,k)!=0) j=j+16;
			     }
			     k=DWBNO[i][3];
			     if(k!=0)
			     {
				k--;
				if( ChkBit(YXBUF,k)!=0) j=j+8;
			     }
			     k=DWBNO[i][2];
			     if(k!=0)
			     {
				k--;
				if( ChkBit(YXBUF,k)!=0) j=j+4;
			     }
			     k=DWBNO[i][1];
			     if(k!=0)
			     {
				k--;
				if( ChkBit(YXBUF,k)!=0) j=j+2;
			     }
			     k=DWBNO[i][0];
			     if(k!=0)
			     {
				k--;
				if( ChkBit(YXBUF,k)!=0) j=j+1;
			     }
			     pDataLibary->dw[i].dw=j;
			     pDataLibary->dw[i].dwvalue=j*25;
			     break;
		  case	0x01://位置型
			     k=0;
			     for(j=0;j<20;j++)
			     {
				  m=DWBNO[i][j];
				  if(m!=0)
				  {
				     m--;
				     if(ChkBit(YXBUF,m)!=0)
				     {
					k=j+1;
					break;
				     }
				  }
			     }
			     pDataLibary->dw[i].dw=k;
			     pDataLibary->dw[i].dwvalue=k*25;
			     break;
		  case	0x02://直流型
			     k=DWBNO[i][0];
			     if(k==0)
			     {
				 j=0;
			     }else
			     {
				 k--;
				 j=ADCLIB[k].ZVALUE[0];
			     }
			     j=j+125;
			     k=j/250;
			     pDataLibary->dw[i].dw=k;
			     pDataLibary->dw[i].dwvalue=k*25;
			     break;
		}
	 }
     }
}

void TakeLetterDbase(void)
{
     if(TRead(DbaseTaskNo,pDataLibary->Letter))
     {
	// 0 长度
	// 1 目的任务号
	// 2 源任务号
	// 3 cmd
	// 4 datbuf[]
	if(pDataLibary->Letter[0]==0) return;
	switch(pDataLibary->Letter[3])
	{

	   default: break;

	}
     }
}

void YkTask(void)
{
     int i,n,j,m;
     unsigned char  ch, SourceTaskNum,YkCmd,YkNum,YkTyp,YkRet;


     if(((TaskStatus(YkTaskNo)&0x20)!=0))
     {//接收到1个邮件
	 Task[YkTaskNo].WaitStatus=ch;
	 if(TRead(YkTaskNo,pVar->YKRecLetter))
	 {

/*	:   YkSet	    YkRet		 YkExe	     YkEsc
length	: 0 0x08	    0x08		 0x08	     0x08
comack	: 1 0x00	    0x00		 0x00	     0x00
Node	: 2 0x00	    0x00		 0x00	     0x00
DestTask: 3 YkTaskNo	    YkTaskNo		 YkTaskNo    YkTaskNo
SourTask: 4 xxxxxxxx	    xxxxxxxx		 xxxxxxxx    xxxxxxxx
	: 5 YKCMD=0xE0	    YKCMD=0xE1		 YKCMD=0xE2  YKCMD=0xE3

	: 6 YKTYP=0xCC/0x33 YKTYP=0xCC/0x33/0xFF YKTYP=0xAA  YKTYP=0x55
	: 7 YKNUM	    YKNUM		 YKNUM	     YKNUM
*/
	    SourceTaskNum=pVar->YKRecLetter[4];
	    YkCmd=pVar->YKRecLetter[5];
	    YkTyp=pVar->YKRecLetter[6];
	    YkNum=pVar->YKRecLetter[7];
	    switch(YkCmd)
	    {
	       case  0xE0://遥控预置
			  if(pVar->YKFG!=0) break;
			  YkRet=YkTyp;
			  if(SetYknum(YkNum,YkTyp)==FALSE) YkRet=0xff;
			  pVar->YkTyp=YkTyp;
			  pVar->YkNum=YkNum;
			  pVar->YKTrnLetter[0]=0x08;
			  pVar->YKTrnLetter[1]=0x00;
			  pVar->YKTrnLetter[2]=0x00;
			  pVar->YKTrnLetter[3]=SourceTaskNum;
			  pVar->YKTrnLetter[4]=YkTaskNo;
			  pVar->YKTrnLetter[5]=0xE1;
			  pVar->YKTrnLetter[6]=YkRet;
			  pVar->YKTrnLetter[7]=YkNum;
			  if(TWrite(pVar->YKTrnLetter))
			  {
			     pVar->YKFG=0xff;
			     pVar->ykcomm=yksetup;
			     SetTimer(YkTaskNo,30720);//30 秒
			  }else
			  {
			     pVar->ykcomm=yknull;
			     pVar->YKFG=0;
			     ClearYknum(YkNum);
			     SetTimer(YkTaskNo,0);
			  };
			  break;
	       case  0xE2://遥控执行
			  if(pVar->YKFG==0) break;
			  if(YkTyp!=0xAA)   break;
			  ExeYknum(pVar->YkNum,pVar->YkTyp);
			  Wait(YkTaskNo,2048);
			  break;
	       case  0xE3://遥控撤消
			  EscYknum(pVar->YkNum);
			  pVar->ykcomm=yknull;
			  pVar->YKFG=0;
			  SetTimer(YkTaskNo,0);
			  break;
	    }
	 }
     }

     if(((TaskStatus(YkTaskNo)&0x40)!=0))
     {// 继电器复归
	 ResetWait(YkTaskNo);
	 EscYknum(pVar->YkNum);
	 pVar->ykcomm=yknull;
	 pVar->YKFG=0;
	 SetTimer(YkTaskNo,0);
     }
     if(((TaskStatus(YkTaskNo)&0x80)!=0))
     {// 遥控命令超时等待 30秒
	 ResetTimer(YkTaskNo);
	 EscYknum(pVar->YkNum);
	 SetTimer(YkTaskNo,0);
	 pVar->ykcomm=yknull;
	 pVar->YKFG=0;
     }
}

void Init_BlockTrans_PTS_Exint(void)
{
     SamplePts_Exint.ptscount=255;		     /* 控制块计数 */

     SamplePts_Exint.ptssrc=(unsigned int)AD7874_DAT;/* 源地址	   */
     SamplePts_Exint.ptsdst=(unsigned int)ADBUF0;      /* 目地址     */
     SamplePts_Exint.ptscon.di=1;	  /*1:自动增1 目 */
     SamplePts_Exint.ptscon.si=0;	  /*1:自动增1 源 */
     SamplePts_Exint.ptscon.du=1;	  /* 0:块传递完成后重载ptsdst */
					 /* 1:块传递完成后保持ptsdst */
     SamplePts_Exint.ptscon.su=1;	  /* 0:块传递完成后重载ptssrc */
					 /* 1:块传递完成后保持ptssrc */
     SamplePts_Exint.ptscon.b_w=0;	  /* 0:字传输  1:字节传输     */
     SamplePts_Exint.ptscon.mode=0;	  /* 100:单字(节)传输	      */
					 /* 000:块传输		     */
					 /* 110:AD传输		     */
					 /* 010:PWM传输 	     */
     SamplePts_Exint. ptsblock=4;	  /*			      */




     setbit(&p2_dir, 2);	    /* P2.2=inport		 */
     setbit(&p2_mode,2);	    /* P2.2=Exint		 */
     setbit(&p2_reg, 2);	    /* P2.2作为输入口必须先置 1  */
     int_pend1=int_pend1 & 0xbf;

//   ptssel=ptssel	 |  EXINT_INT_BIT;
//   int_mask1=int_mask1 |  0x40;
}

void Init_BlockTrans_PTS_EPA0(void)
{
     SamplePts_Epa0.ptscount=1; 		    /* 控制块计数 */
     SamplePts_Epa0.ptssrc=(unsigned int)(&epa0_time); /* 源地址     */
     SamplePts_Epa0.ptsdst=(unsigned int)(&epa0value);	     /* 目地址	   */
     SamplePts_Epa0.ptscon.di=1;	 /*1:自动增1 目 */
     SamplePts_Epa0.ptscon.si=0;	 /*1:自动增1 源 */
     SamplePts_Epa0.ptscon.du=1;	 /* 0:块传递完成后重载ptsdst */
					 /* 1:块传递完成后保持ptsdst */
     SamplePts_Epa0.ptscon.su=0;	 /* 0:块传递完成后重载ptssrc */
					 /* 1:块传递完成后保持ptssrc */
     SamplePts_Epa0.ptscon.b_w=0;	 /* 0:字传输  1:字节传输     */
     SamplePts_Epa0.ptscon.mode=0;	 /* 100:单字(节)传输	     */
					 /* 000:块传输		     */
					 /* 110:AD传输		     */
					 /* 010:PWM传输 	     */
     SamplePts_Epa0. ptsblock=1;	 /*			     */
//   ptssel=ptssel | 0x10;
     int_mask=int_mask | EPA0_INT_BIT;
}

void Init_EPA0_Freq(unsigned int freq)
{
     t2control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
     epa0_con=COMPARE|RE_ENABLE|USE_TIMER2|RESET_OWN_TIMER;  /* 软件定时器 */
     setbit(&p1_reg, 0);	    /* P1.0作为输入口必须先置 1  */
     setbit(&p1_dir, 0);	    /* P1.0=inport		 */
     setbit(&p1_mode,0);	    /* P1.0=EPA0		 */
     epa0_time=freq;/* 625  */
//   int_mask=int_mask | EPA0_INT_BIT;
}


void Init_SoftTimer(void)
{
     t1control=COUNT_ENABLE|COUNT_UP|CLOCK_INTERNAL|DIVIDE_BY_1;
     epa3_con=COMPARE|RE_ENABLE|USE_TIMER1|RESET_OWN_TIMER;  /* 软件定时器 */
     setbit(&p1_reg, 3);	    /* P1.3作为输入口必须先置 1  */
     clrbit(&p1_dir, 3);	    /* P1.3=outport		  */
     clrbit(&p1_reg, 3);	    /* P1.3=0			  */
     setbit(&p1_dir, 3);	    /* P1.3=inport		 */
     setbit(&p1_mode,3);	    /* P1.3=EPA3		 */
     epa3_time=5000;/* 1ms  */
     int_mask=int_mask | EPA3_INT_BIT;
}

void Init_COM1(void)
{
     unsigned char ch;

     clrbit(&p2_mode, 0);
     clrbit(&p2_mode, 1);	    /* P2.0 P2.1  I/O	       */
     clrbit(&p2_dir, 0);	    /* P2.0=outport		  */
     clrbit(&p2_dir, 1);	    /* P2.1=outport		  */
     setbit(&p2_reg, 0);	    /* P2.0作为输入口必须先置 1  */
     setbit(&p2_reg, 1);	    /* P2.1作为输入口必须先置 1  */

     switch(comset[2].speed) //20000000/speed/16
     {
	 case  0x00://300B
		    sp_baud=0x9046; /*	 300BPS   */
		    break;
	 case  0x01://600B
		    sp_baud=0x8823; /*	 600BPS   */
		    break;
	 case  0x02://1200B
		    sp_baud=0x8411; /*	1200BPS   */
		    break;
	 case  0x03://1800B
		    sp_baud=0x82B6; /*	1800BPS   */
		    break;
	 case  0x04://2400B
		    sp_baud=0x8208; /*	2400BPS   */
		    break;
	 case  0x05://3600B
		    sp_baud=0x815B; /*	3600BPS   */
		    break;
	 case  0x06://4800B
		    sp_baud=0x8104; /*	4800BPS   */
		    break;
	 case  0x07://7200B
		    sp_baud=0x80AD; /*	7200BPS   */
		    break;
	 case  0x08://9600B
		    sp_baud=0x8081; /*	9600BPS   */
		    break;
	 case  0x09://19.2KB
		    sp_baud=0x8041; /*	19.2kbS   */
		    break;
     }


//   sp_baud=0x8208; /*  2400BPS		 */
     sp_con=0x09;    /*  模式一 		 */
     ch=sp_status;
     setbit(&p2_reg, 0);	    /* P2.0作为输入口必须先置 1  */
     setbit(&p2_reg, 1);	    /* P2.1作为输入口必须先置 1  */
     clrbit(&p2_dir, 0);	    /* P2.0=outport		  */
     setbit(&p2_dir, 1);	    /* P2.1=inport		 */
     setbit(&p2_mode, 0);
     setbit(&p2_mode, 1);	    /*	P2.0 P2.1为特殊功能方式 */

     wsr=0x1f;
//   sp_baud_1f=0x8208; /*  2400BPS		    */
     sp_con_1f=0x09;/*	模式一			*/
     ch=sp_status_1f;
     p2_reg_1f=p2_reg_1f | 0xff;
     p2_dir_1f=p2_dir_1f & 0xfe;
     p2_mode_1f=p2_mode_1f | 0x03;
     p2_reg_1f=p2_reg_1f | 0xff;
     wsr=0;



//   p2_dir  &=0xfe; /*  TXD输出		 */
//   p2_mode |=0x03;
     int_mask1=int_mask1 | 0x18;

⌨️ 快捷键说明

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