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

📄 tpublic.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
			      asm  ldb	 value,    [portioa];
			      KR_LAST[11]=value;
			      value=~value;
			      value=value & 0x0f; // 低四位
			      value=value<<4;
			      YXBUF[9]|=value; // 低四位  高字节

			      break;
		  case	0x04: /* 5 遥信板   */
			      value=YX_BOARD_5_KRL;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[12]=value;
			      YXBUF[10]=~value;
			      value=YX_BOARD_5_KRM;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[13]=value;
			      YXBUF[11]=~value;
			      value=YX_BOARD_5_KRH;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[14]=value;
			      value=~value;
			      value=value & 0x0f;
			      YXBUF[12]|=value;
			      break;
		  case	0x05: /* 6 遥信板   */
			      value=YX_BOARD_6_KRL;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[15]=value;
			      value=~value;
			      image=value & 0xf0;//高四位
			      image=image>>4;
			      value=value & 0x0f;
			      value=value<<4;
			      YXBUF[12]|=value; // 低四位 高字节
			      YXBUF[13]=image;	// 高四位 低字节
			      value=YX_BOARD_6_KRM;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[16]=value;
			      value=~value;
			      image=value & 0xf0;//高四位
			      image=image>>4;
			      value=value & 0x0f;
			      value=value<<4;
			      YXBUF[13]|=value; // 低四位 高字节
			      YXBUF[14]=image;	// 高四位 低字节
			      value=YX_BOARD_6_KRH;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[17]=value;
			      value=~value;
			      value=value & 0x0f;
			      value=value<<4;
			      YXBUF[14]|=value; // 低四位 高字节
			      break;
	  }
     }
     for(i=0;i<13;i++)
     {
	Temp.Word=kgbf[i];
	YXBUF[2*i]  =YXBUF[2*i]   ^ Temp.B.Low;
	YXBUF[2*i+1]=YXBUF[2*i+1] ^ Temp.B.High;
     }

     for(i=15;i<26;i++)
     {
	YXBUF[i]=0;
     }


     for(i=0;i<120;i++)
     {
	 BVTM[i]=bvtm[i];
	 JGTM[i]=0;
     }

     for(i=120;i<200;i++)
     {
	 BVTM[i]=bvtm[i];
	 JGTM[i]=0;
     }

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

     for(i=0;i<25;i++)
     {
	 YSFG[i]=0;
     }

     portioa=PIO_A_CMD;
     value=0xff;
     asm  stb  value, [portioa];/* PIO_A_CMD=0 inpout  */
}

void InitYk(void)
{
  unsigned int	i,j;

  pVar->maxyknum=0;


  for(i=0;i<11;i++)
  {
     ClearYknum(i);
  }
  pVar->maxyknum=kcnum*6;
  pVar->yksum=kcnum*6;
}

void DataBusOut(register unsigned char addr,register unsigned char value)
{
     register unsigned int  pio_addr;
     register unsigned char data;


     pio_addr=PIO_B_DAT; /*  output 地址总线  */
     data=0xff;
     asm  stb  data,	     [pio_addr]; //清地址总线


     pio_addr=PIO_A_DAT; /*  outpout 数据总线  */
     asm  stb  value,	     [pio_addr];
     pio_addr=PIO_B_DAT; /*  output 地址总线  */
     asm  stb  addr,	     [pio_addr];

     pio_addr=PIO_B_DAT; /*  output 地址总线  */
     data=0xff;
     asm  stb  data,	     [pio_addr]; //清地址总线
}

unsigned char DataBusIn(register unsigned char addr)
{
     register unsigned int  pio_addr;
     register unsigned char data,value;


     pio_addr=PIO_B_DAT; /*  output 地址总线  */
     asm  stb  addr,	     [pio_addr];

     pio_addr=PIO_A_DAT; /*  outpout 数据总线  */
     asm  ldb  data,	     [pio_addr];

     pio_addr=PIO_B_DAT; /*  output 地址总线  */
     value=0xff;
     asm  stb  value,	      [pio_addr]; //清地址总线
     return data;
}

void ClearYknum(int unit)
{
     disable();
     switch(unit)
     {
       case 0x00:DataBusOut(YK_BOARD_1_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_1_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_1_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x01:DataBusOut(YK_BOARD_2_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_2_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_2_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x02:DataBusOut(YK_BOARD_3_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_3_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_3_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x03:DataBusOut(YK_BOARD_4_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_4_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_4_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x04:DataBusOut(YK_BOARD_5_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_5_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_5_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x05:DataBusOut(YK_BOARD_6_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_6_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_6_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x07:DataBusOut(YK_BOARD_7_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_7_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_7_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x08:DataBusOut(YK_BOARD_8_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_8_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_8_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x09:DataBusOut(YK_BOARD_9_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_9_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_9_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x0A:DataBusOut(YK_BOARD_10_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_10_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_10_KC9_12,YK_BOARD_NULL_3);
		 break;
       case 0x0B:DataBusOut(YK_BOARD_11_KC0_4, YK_BOARD_NULL_1);
		 DataBusOut(YK_BOARD_11_KC5_8, YK_BOARD_NULL_2);
		 DataBusOut(YK_BOARD_11_KC9_12,YK_BOARD_NULL_3);
		 break;
	default: break;
     }
     enable();
}

unsigned char  SetYknum(unsigned int num,unsigned char type)
{//遥控预置
     int  unit,offset;

     if(num+1>pVar->yksum)	    return (FALSE);
     if((type!=0x33)&&(type!=0xcc)) return (FALSE);
     unit=num/6;
     offset=num % 6;
     disable();
     switch(type)
     {
	case  0x33:DataBusOut(YK_KC0[unit], YK_T0[offset]);
		   DataBusOut(YK_KC1[unit], YK_T1[offset]);
		   DataBusOut(YK_KC2[unit], YK_T2[offset]);
		   break;
	case  0xcc:DataBusOut(YK_KC0[unit], YK_H0[offset]);
		   DataBusOut(YK_KC1[unit], YK_H1[offset]);
		   DataBusOut(YK_KC2[unit], YK_H2[offset]);
		   break;
     }
     enable();
     return (TRUE);
}

void ExeYknum(unsigned int num,unsigned int type)
{
     int  unit,offset;
     unsigned char addr,data;

     if(num+1>pVar->yksum)	    return;
     if((type!=0x33)&&(type!=0xcc)) return;
     unit=num/6;
     offset=num % 6;

     addr=YK_KC0[unit];
     switch(type)
     {
	case  0x33:data=YK_T0[offset];
		   break;
	case  0xcc:data=YK_H0[offset];
		   break;
     }
     data=data |  YK_BOARD_POWER_OR_1;
     data=data &  YK_BOARD_POWER_AND_1;
     disable();
     DataBusOut(addr, data);
     enable();
}


void EscYknum(unsigned int num)
{
     int  unit,offset;
     unsigned char addr,data;

     if(num+1>pVar->yksum)	    return;
     unit=num/6;

     disable();
     DataBusOut(YK_KC0[unit], YK_BOARD_NULL_1);
     DataBusOut(YK_KC1[unit], YK_BOARD_NULL_2);
     DataBusOut(YK_KC2[unit], YK_BOARD_NULL_3);
     enable();
}



void freqsum(void)
{
     long  l,lx,ly;
     int   i,j,k,m;
//
//	  2500*50.00HZ*ARCVL   2500*5*ARCVL  1562.5*5*ARCVL *2	 15625*ARCVL
// 50HZ = -------------------=--------------=------------------=--------------
//	  freqdivsum*90.00     freqdivsum*9   freqdivsum*18	 freqdivsum*18
//

//	  2500*50.00HZ*ARCVL   3125*5*ARCVL
// 50HZ = -------------------=--------------
//	  freqdivsum*90.00     freqdivsum*18
//

     ly=(long)ARCVL-4;
     lx=(long)15625;
     l=lx*ly;
     lx=(long)pVar->freqdivsum;
     if(lx==0) return;
     l=l/lx;
     l=l/18;

     if(l>5550) return;
     if(l<4500) return;

     lx=(long) freqvalue;
     ly=lx-l;
     if(ly<0)ly=-ly;
     if(ly>=20)
     {
	    if(pVar->freqsplt<4)
	    {
	      pVar->freqsplt++;
	      return;
	    }
	    for(i=0;i<10;i++)
	    {
		pVar->freqvalue[i]=l;
	    }
	    pVar->oldfreqvalue=l;
     }else  pVar->freqsplt=0;


     if(pVar->freqcount>=10) pVar->freqcount=0;
     pVar->freqvalue[pVar->freqcount]=l;
     pVar->freqcount++;

     l=0;
     for(i=0;i<10;i++)
     {
	 l=l+pVar->freqvalue[i];
     }
     l=l/10;


     j=(int)l;
     k=(int)pVar->oldfreqvalue;
     m=j-k;
     if(m<0) m=-m;
     if(m<6)
     {
       k=k*3;
       m=k+j;
       m=(m)/4;
       freqvalue=(unsigned int)m;
     }else
     {
       freqvalue=(unsigned int)j;
     }
     pVar->oldfreqvalue=freqvalue;


     l=15625000;
     if(freqvalue<4500)  freqvalue=4500;
     if(freqvalue>5550)  freqvalue=5550;
     WORK=(unsigned int)(l/freqvalue);

     pVar->freqdivsum=WORK;
     Init_EPA0_Freq(WORK);
//   outport(ADFREQ_COEF,   WORK);
}

void freqdefault(void)
{
     int i,j,k;

     k=0;
     for(i=0;i<8;i++)
     {
	j=ADCLIB[i].AVALUE;
	if(j>=400)
	{
	  k=0xff;
	  break;
	}
     }
     if(k==0)
     {
	pVar->freqdivsum=3125;
	Init_EPA0_Freq(3125);
//	outport(ADFREQ_COEF,   6250);
     }
}


void LCD_Device(void)
{
     unsigned char  ch;
     int  i;
     if(LcdAready()<0x80)
     {
	if(pVar->LcdAChg!=0)
	{
	     if(pVar->LcdAChg==2)
	     {
		LcdAcmd(0xB8+pVar->LcdAy);//0 -  7 行
	     } else	  LcdAcmd(0x40);  //0 ~ 63 列
	     pVar->LcdAChg--;
	}else
	{
		 LcdAdat(LcdBuf[pVar->LcdACount]);
		 pVar->LcdACount++;
		 pVar->LcdAx++;
		 if(pVar->LcdAx>=64)
		 {
			   pVar->LcdAx=0;
			   pVar->LcdAy++;
			   if(pVar->LcdAy>=8)
			   {
			     pVar->LcdAy=0;
			     pVar->LcdACount=0;
			   } else pVar->LcdACount=pVar->LcdACount+64;
			   pVar->LcdAChg=2;
		 }
//		 LastLcdBuf[pVar->LcdACount]=LcdBuf[pVar->LcdACount];
	}
     }
     if(LcdBready()<0x80)
     {
	if(pVar->LcdBChg!=0)
	{
	   if(pVar->LcdBChg==2) LcdBcmd(0xB8+pVar->LcdBy);
	       else	  LcdBcmd(0x40);
	   pVar->LcdBChg--;
	}else
	{
		 LcdBdat(LcdBuf[pVar->LcdBCount]);
		 pVar->LcdBCount++;
		 pVar->LcdBx++;
		 if(pVar->LcdBx>=64)
		 {
		      pVar->LcdBx=0;
		      pVar->LcdBy++;
		      if(pVar->LcdBy>=8)
		      {
			pVar->LcdBy=0;
			pVar->LcdBCount=64;
		      }else pVar->LcdBCount=pVar->LcdBCount+64;
		      pVar->LcdBChg=2;
		 }
//		 LastLcdBuf[pVar->LcdBCount]=LcdBuf[pVar->LcdBCount];
	}
     }
}

void LCD_Write(void)
{
     if(pVar->LcdAChg!=0)
     {
	     if(pVar->LcdAChg==2)
	     {
		LcdAcmd(0xB8+pVar->LcdAy);
	     } else	  LcdAcmd(0x40);
	     pVar->LcdAChg--;
     }else
     {
	     LcdAdat(LcdBuf[pVar->LcdACount]);
	     pVar->LcdACount++;
	     pVar->LcdAx++;
	     if(pVar->LcdAx>=64)
	     {
		  pVar->LcdAx=0;
		  pVar->LcdAy++;
		  if(pVar->LcdAy>=8)
		  {
		    pVar->LcdAy=0;
		    pVar->LcdACount=0;
		  } else pVar->LcdACount=pVar->LcdACount+64;
		  pVar->LcdAChg=2;
	     }
     }
     if(pVar->LcdBChg!=0)
     {
	   if(pVar->LcdBChg==2) LcdBcmd(0xB8+pVar->LcdBy);
	       else	  LcdBcmd(0x40);
	   pVar->LcdBChg--;
     }else
     {
	     LcdBdat(LcdBuf[pVar->LcdBCount]);
	     pVar->LcdBCount++;
	     pVar->LcdBx++;
	     if(pVar->LcdBx>=64)
	     {
		  pVar->LcdBx=0;
		  pVar->LcdBy++;
		  if(pVar->LcdBy>=8)
		  {
		    pVar->LcdBy=0;
		    pVar->LcdBCount=64;
		  }else pVar->LcdBCount=pVar->LcdBCount+64;
		  pVar->LcdBChg=2;
	     }
     }
}


void flashwrite_all(unsigned int addr,unsigned int *pData)
{
	register unsigned int portid;
	register unsigned int	value;
	unsigned int   adrbak;
	unsigned int  sum;
	unsigned int  ui;
	int  i;

	flash_boot_reset();// reset flash, read array mode

	portid=addr;
	portid=portid-PSD_FLASH_BASE;
	value=portid/8192;
	portid=PSD_FLASH_BASE+value*8192;
	adrbak=portid;

	sum=0;
	for(ui=0;ui<4095;ui++)
	{
	    sum=sum+pData[ui];

	}
	pData[4095]=sum;

	portid=addr;
	flash_boot_erase_sector(portid);
	portid=adrbak;
	for(i=0;i<4096;i++)
	{
	    rst_wdog();
	    flash_bo

⌨️ 快捷键说明

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