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

📄 tpublic.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
	    asm  ld  value,[portid];
	    pVar->flash_dat[i]=value;
	    portid=portid+2;
	    rst_wdog();
	}
}

void flashwrite_a(unsigned int addr)
{
	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+pVar->flash_dat[ui];

	}
	pVar->flash_dat[4095]=sum;

	portid=addr;
	flash_boot_erase_sector(portid);
	portid=adrbak;
	for(i=0;i<4096;i++)
	{
	    rst_wdog();
	    flash_boot_write_with_poll(portid,pVar->flash_dat[i]);
	    portid=portid+2;
	}
}




//--------------------------------------------------------------------------//
unsigned int  atobit(register unsigned int os ,register unsigned int Bitnum)
{
   register unsigned int  temp;
   asm
   {
	clr  temp;
	inc  temp;
	shl  temp,  Bitnum;
	and  os,    temp;
   }
   return  os;
}
void KeyScan(void)
{
	   register unsigned long portid;
	   register unsigned int  newkey,chgkey,oldkey,keyfg;
	   portid=KEYDATA;

	   if(pVar->Lcd_BG_Count>=30000)
	   {
	     pVar->Lcd_BG_Flag=0;
	     pVar->Lcd_BG_Count=0;

	   }else  pVar->Lcd_BG_Count++;

	   oldkey=pVar->OldKey;
	   chgkey=oldkey;
	   keyfg=pVar->KeyFg;
	   asm	eldb   newkey,	[portid];
	   asm
	   {/* 478 =F1	*/
		 bbc  newkey,	4,  keynext00;
		 orb  newkey+1,     #0x01;
	   };
	   goto  keyend00;
keynext00: asm
	   {
		 bbc  newkey,	7,  keynext01;
		 orb  newkey+1,     #0x01;
	   }
	   goto  keyend00;
keynext01: asm
	   {
		 orb   newkey,	 #0x90;
		 andb  newkey+1, #0xfe;
	   }
keyend00:  asm
	   {/* 578 =F2	*/
		 bbc  newkey,	5,  keynext02;
		 orb  newkey+1,     #0x02;
	   };
	   goto  keyend01;
keynext02: asm
	   {
		 bbc  newkey,	7,  keynext03;
		 orb  newkey+1,     #0x02;
	   }
	   goto  keyend01;
keynext03: asm
	   {
		 orb   newkey,	 #0xA0;
		 andb  newkey+1, #0xfd;
	   }
keyend01:  asm
	   {/* 678 =RESET  */
		 bbc  newkey,	6,  keynext04;
		 orb  newkey+1,     #0x04;
	   };
	   goto  keyend02;
keynext04: asm
	   {
		 bbc  newkey,	7,  keynext05;
		 orb  newkey+1,     #0x04;
	   }
	   goto  keyend02;
keynext05: asm
	   {
		 orb   newkey,	 #0xC0;
		 andb  newkey+1, #0xfb;
	   }
keyend02:  asm	xor    chgkey,	newkey;
/*--------------key00-----------------------------------*/
KEY00:	   asm
	   {
		bbs    keyfg,	0,	     YS00;
		bbc    chgkey,	0,	     KEY01;
	   }
GK00:	   keyfg=keyfg | 0x0001;
	   pVar->Keytm[0]=0;
	   goto   KEY01;
YS00:	   pVar->Keytm[0]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	0,	     DT00;
FG00:	   keyfg=keyfg &  0xFFFE;
	   goto   KEY01;
DT00:	   if(pVar->Keytm[0]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x01;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=0;
		 Lcd_on();
		 pVar->KeyID=0;
	      }
	      keyfg=keyfg &  0xFFFE;
	   }
/*--------------key01-----------------------------------*/
KEY01:	   asm
	   {
		bbs    keyfg,	1,	     YS01;
		bbc    chgkey,	1,	     KEY02;
	   }
GK01:	   keyfg=keyfg | 0x0002;
	   pVar->Keytm[1]=0;
	   goto   KEY02;
YS01:	   pVar->Keytm[1]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	1,	     DT01;
FG01:	   keyfg=keyfg &  0xFFFD;
	   goto   KEY02;
DT01:	   if(pVar->Keytm[1]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x02;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=1;
		 pVar->KeyID=1;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFFFD;
	   }
/*--------------key02-----------------------------------*/
KEY02:	   asm
	   {
		bbs    keyfg,	2,	     YS02;
		bbc    chgkey,	2,	     KEY03;
	   }
GK02:	   keyfg=keyfg | 0x0004;
	   pVar->Keytm[2]=0;
	   goto   KEY03;
YS02:	   pVar->Keytm[2]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	2,	     DT02;
FG02:	   keyfg=keyfg &  0xFFFB;
	   goto   KEY03;
DT02:	   if(pVar->Keytm[2]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x04;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=2;
		 pVar->KeyID=2;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFFFB;
	   }
/*--------------key03-----------------------------------*/
KEY03:	   asm
	   {
		bbs    keyfg,	3,	     YS03;
		bbc    chgkey,	3,	     KEY04;
	   }
GK03:	   keyfg=keyfg | 0x0008;
	   pVar->Keytm[3]=0;
	   goto   KEY04;
YS03:	   pVar->Keytm[3]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	3,	     DT03;
FG03:	   keyfg=keyfg &  0xFFF7;
	   goto   KEY04;
DT03:	   if(pVar->Keytm[3]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x08;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=3;
		 pVar->KeyID=3;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFFF7;
	   }
/*--------------key04-----------------------------------*/
KEY04:	   asm
	   {
		bbs    keyfg,	4,	     YS04;
		bbc    chgkey,	4,	     KEY05;
	   }
GK04:	   keyfg=keyfg | 0x0010;
	   pVar->Keytm[4]=0;
	   goto   KEY05;
YS04:	   pVar->Keytm[4]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	4,	     DT04;
FG04:	   keyfg=keyfg &  0xFFEF;
	   goto   KEY05;
DT04:	   if(pVar->Keytm[4]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x10;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=4;
		 pVar->KeyID=4;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFFEF;
	   }
/*--------------key05-----------------------------------*/
KEY05:	   asm
	   {
		bbs    keyfg,	5,	     YS05;
		bbc    chgkey,	5,	     KEY06;
	   }
GK05:	   keyfg=keyfg | 0x0020;
	   pVar->Keytm[5]=0;
	   goto   KEY06;
YS05:	   pVar->Keytm[5]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	5,	     DT05;
FG05:	   keyfg=keyfg &  0xFFDF;
	   goto   KEY06;
DT05:	   if(pVar->Keytm[5]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x20;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=5;
		 pVar->KeyID=5;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFFDF;
	   }
/*--------------key06-----------------------------------*/
KEY06:	   asm
	   {
		bbs    keyfg,	6,	     YS06;
		bbc    chgkey,	6,	     KEY07;
	   }
GK06:	   keyfg=keyfg | 0x0040;
	   pVar->Keytm[6]=0;
	   goto   KEY07;
YS06:	   pVar->Keytm[6]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	6,	     DT06;
FG06:	   keyfg=keyfg &  0xFFBF;
	   goto   KEY07;
DT06:	   if(pVar->Keytm[6]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x40;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=6;
		 pVar->KeyID=6;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFFBF;
	   }
/*--------------key07-----------------------------------*/
KEY07:	   asm
	   {
		bbs    keyfg,	7,	     YS07;
		bbc    chgkey,	7,	     KEY08;
	   }
GK07:	   keyfg=keyfg | 0x0080;
	   pVar->Keytm[7]=0;
	   goto   KEY08;
YS07:	   pVar->Keytm[7]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey,	7,	     DT07;
FG07:	   keyfg=keyfg &  0xFF7F;
	   goto   KEY08;
DT07:	   if(pVar->Keytm[7]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x80;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=7;
		 pVar->KeyID=7;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFF7F;
	   }

/*--------------key08--------F1-------------------------*/
KEY08:	   asm
	   {
		bbs    keyfg+1,   0,	       YS08;
		bbc    chgkey+1,  0,	       KEY09;
	   }
GK08:	   keyfg=keyfg | 0x0100;
	   pVar->Keytm[8]=0;
	   goto   KEY09;
YS08:	   pVar->Keytm[8]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey+1,  0,	       DT08;
FG08:	   keyfg=keyfg &  0xFEFF;
	   goto   KEY09;
DT08:	   if(pVar->Keytm[8]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x0100;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=8;
		 pVar->KeyID=8;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFEFF;
	   }
/*--------------key09--------F2-------------------------*/
KEY09:	   asm
	   {
		bbs    keyfg+1,   1,	       YS09;
		bbc    chgkey+1,  1,	       KEY10;
	   }
GK09:	   keyfg=keyfg | 0x0200;
	   pVar->Keytm[9]=0;
	   goto   KEY10;
YS09:	   pVar->Keytm[9]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey+1,  1,	       DT09;
FG09:	   keyfg=keyfg &  0xFDFF;
	   goto   KEY10;
DT09:	   if(pVar->Keytm[9]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x0200;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=9;
		 pVar->KeyID=9;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFDFF;
	   }
/*--------------key10--------RESET----------------------*/
KEY10:	   asm
	   {
		bbs    keyfg+1,   2,	       YS10;
		bbc    chgkey+1,  2,	       KEY11;
	   }
GK10:	   keyfg=keyfg | 0x0400;
	   pVar->Keytm[10]=0;
	   goto   KEY11;
YS10:	   pVar->Keytm[10]+=pVar->KeyTimeCount;
	   asm	bbc    chgkey+1,  2,	       DT10;
FG10:	   keyfg=keyfg &  0xFBFF;
	   goto   KEY11;
DT10:	   if(pVar->Keytm[10]>=KEYSPEED)
	   {
	      oldkey=newkey & 0x0400;
	      if(oldkey==0)
	      {
		 pVar->KeyValue=10;
		 pVar-> KeyID=10;
		 Lcd_on();
	      }
	      keyfg=keyfg &  0xFBFF;
	   }
KEY11:	   pVar->OldKey=newkey;
	   pVar->KeyFg=keyfg;
	   pVar->KeyTimeCount=0;
}

void InitYx(void)
{
     register unsigned int  portioa;
     register unsigned int  portiob;
     register unsigned char value,image;
     union WTEMP_ST Temp;
     int i;


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


     portioa=PIO_B_CMD;
     value=0xff;
     asm  stb  value, [portioa];/* PIO_B_CMD=1outpout  */

     portioa=PIO_A_DAT;   /*  数据    */
     portiob=PIO_B_DAT;   /*  地址    */
     for(i=0;i<25;i++)	YXBUF[i]=0;
     for(i=0;i<30;i++)	KR_LAST[i]=0xff;
     for(i=0;i<(int)yxnum;i++)
     {
	  switch(i)
	  {
		  case	0x00: /* 1 遥信板   */
			      value=YX_BOARD_1_KRL;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[0]=value;

			      YXBUF[0]=~value;

			      value=YX_BOARD_1_KRM;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[1]=value;
			      YXBUF[1]=~value;
			      value=YX_BOARD_1_KRH;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[2]=value;
			      value=~value;
			      value=value & 0x0f;
			      YXBUF[2]|=value;
			      break;
		  case	0x01: /* 2 遥信板   */
			      value=YX_BOARD_2_KRL;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[3]=value;

			      value=~value;
			      image=value & 0xf0;//高四位
			      image=image>>4;
			      value=value & 0x0f;
			      value=value<<4;
			      YXBUF[2]|=value;

			      YXBUF[3]=image;

			      value=YX_BOARD_2_KRM;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[4]=value;
			      value=~value;
			      image=value & 0xf0;//高四位
			      image=image>>4;
			      value=value & 0x0f;
			      value=value<<4;
			      YXBUF[3]|=value;
			      YXBUF[4]=image;

			      value=YX_BOARD_2_KRH;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[5]=value;
			      value=~value;
			      value=value & 0x0f;
			      value=value<<4;
			      YXBUF[4]|=value;
			      break;
		  case	0x02: /* 3 遥信板   */
			      value=YX_BOARD_3_KRL;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[6]=value;

			      YXBUF[5]=~value;
			      value=YX_BOARD_3_KRM;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[7]=value;
			      YXBUF[6]=~value;
			      value=YX_BOARD_3_KRH;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[8]=value;
			      value=~value;
			      value=value & 0x0f;
			      YXBUF[7]|=value;
			      break;
		  case	0x03: /* 4 遥信板   */
			      value=YX_BOARD_4_KRL;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[9]=value;
			      value=~value;
			      image=value & 0xf0;//高四位
			      image=image>>4;
			      value=value & 0x0f;
			      value=value<<4;
			      YXBUF[7]|=value; // 低四位 高字节
			      YXBUF[8]=image;  // 高四位 低字节

			      value=YX_BOARD_4_KRM;
			      asm  stb	 value,    [portiob];
			      asm  ldb	 value,    [portioa];
			      KR_LAST[10]=value;
			      value=~value;
			      image=value & 0xf0;//高四位
			      image=image>>4;
			      value=value & 0x0f; // 低四位
			      value=value<<4;
			      YXBUF[8]|=value; // 低四位  高字节
			      YXBUF[9]=image;  // 高四位  低字节

			      value=YX_BOARD_4_KRH;
			      asm  stb	 value,    [portiob];

⌨️ 快捷键说明

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