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

📄 general.c

📁 MSP430F413单相电表DEMO(编译器IAR 3.42A)
💻 C
字号:

unsigned int ChkSum(unsigned char *Ptr,int Len)
{
  unsigned int Sum=0x55;
   while(Len>0)
   {
      Sum += *Ptr;
      Ptr++;
      Len--;
   }
   return(Sum);
}


//**********************************************************************
// turn byte data to BCD data
//**********************************************************************
unsigned char Byte2BCD(unsigned char Data)
{
   unsigned char Rslt=0;
   if (Data>=99) return 0x99;
   while(Data>9)
   {
      Data-=10;
      Rslt+=0x10;
   }
   return(Rslt+Data);
}

//**********************************************************************
// turn word data to BCD data
//**********************************************************************
void Word2BCD(unsigned char *Ptr, unsigned int Data)
{
   if (Data>=9999)
   {
      *(Ptr+1) = 0x99;
      *Ptr = 0x99;
      return;
   }

   *(Ptr+1)= 0;
   while(Data>=1000)
   {
      Data-=1000;
      *(Ptr+1) += 0x10;
   }
   while(Data>=100)
   {
      Data-=100;
      *(Ptr+1) += 0x1;
   }
   *Ptr = Byte2BCD( (char)Data );
}

//**********************************************************************
// turn long data to BCD data
//**********************************************************************
void Long2BCD(unsigned char *Ptr, unsigned long Data)
{
   if (Data>=999999)
   {
      *(Ptr+2) = 0x99;
      *(Ptr+1) = 0x99;
      *Ptr = 0x99;
      return;
   }
   *(Ptr+2) = 0;
   while(Data>=100000)
   {
      Data-=100000;
      *(Ptr+2) += 0x10;
   }
   while(Data>=10000)
   {
      Data-=10000;
      *(Ptr+2) += 0x1;
   }
   Word2BCD((unsigned char*)Ptr, (unsigned int)Data);
}

//**********************************************************************
// turn Kwh(BCD4) data to BCD data
//**********************************************************************
void Long2Kwh(unsigned char *Ptr, unsigned long Data)
{
   if (Data>=99999999)
   {
      *(Ptr+3) = 0x99;
      *(Ptr+2) = 0x99;
      *(Ptr+1) = 0x99;
      *Ptr = 0x99;
      return;
   }
   *(Ptr+3) = 0;
   while(Data>=10000000)
   {
      Data-=10000000;
      *(Ptr+3) += 0x10;
   }
   while(Data>=1000000)
   {
      Data-=1000000;
      *(Ptr+3) += 0x1;
   }
   Long2BCD(Ptr, Data);
}

//**********************************************************************
// turn BCD data to byte data
//**********************************************************************
unsigned char BCD2Byte(unsigned char Data)
{
   return(((Data>>4)&0x0f)*10+(Data&0x0f));
}

//**********************************************************************
// turn BCD data to word data
//**********************************************************************
unsigned int BCD2Word(unsigned char *Ptr)
{
   return(  (int)BCD2Byte(*Ptr)+
            (int)BCD2Byte(*(Ptr+1))*100 );
}

//**********************************************************************
// turn BCD data to word data
//**********************************************************************
unsigned long BCD2Long(unsigned char *Ptr)
{
   return(  (long)BCD2Byte(*Ptr)+
            (long)BCD2Byte(*(Ptr+1))*100+
            (long)BCD2Byte(*(Ptr+2))*10000 );
}

//**********************************************************************
// turn BCD data to word data
//**********************************************************************
unsigned long Kwh2Long(unsigned char *Ptr)
{
   return(  (long)BCD2Byte(*Ptr)+
            (long)BCD2Byte(*(Ptr+1))*100+
            (long)BCD2Byte(*(Ptr+2))*10000+
            (long)BCD2Byte(*(Ptr+3))*1000000 );
}



//**********************************************************************
// Clear 1 segment of Flash
//**********************************************************************
void FlashClear( unsigned char *Data_ptr )
{
	_DINT();
	FCTL1 = FWKEY + ERASE;  /* ERASE = 1 */
	FCTL3 = FWKEY;          /* Lock = 0 */
	*Data_ptr=0;            /* erase Flash segment */
	_EINT();
}

//**********************************************************************
// Write 1 byte into Flash Memory
//**********************************************************************
void FlashWtByte( unsigned char *Data_ptr, unsigned char byte )
{
	_DINT();
	FCTL3 = FWKEY;           /* Lock = 0 */
	FCTL1 = 0x0A540;          /* WRT = 1 */
	*Data_ptr=byte;           /* program Flash word */
}

//**********************************************************************
// Write 1 word into Flash Memory
//**********************************************************************
void FlashWtWord( unsigned int *Data_ptr, unsigned int word )
{
	_DINT();
	FCTL3 = 0x0A500;          /* Lock = 0 */
	FCTL1 = 0x0A540;          /* WRT = 1 */
	*Data_ptr=word;           /* program Flash word */
}

//**********************************************************************
// Write n byte into blank Flash Memory
//**********************************************************************
void FlashWtBlock( unsigned char *Data_ptr, unsigned char *Src, unsigned int Len )
{
   while ( Len>0 )
   {
      FlashWtByte( Data_ptr, *Src );
      Data_ptr++;
      Src++;
      Len--;
   }
}

/***********************************************************************/
/*                         Flash_memcpy                                */
/* programs nLen memory data into the flash memory                     */
/***********************************************************************/
void Flash_byte_memcpy( unsigned char *Data_ptr, unsigned char *memaddr, unsigned int nLen )
{
	_DINT();
	FCTL3 = 0x0A500;          /* Lock = 0 */
	FCTL1 = 0x0A540;          /* WRT = 1 */
	for(; nLen > 0; nLen--)
	{
		*Data_ptr=*memaddr;           /* program Flash word */
		Data_ptr++;
		memaddr++;
	}
	_EINT();
}

/***********************************************************************/
/*                         Flash_memcpy                                */
/* programs nLen memory data into the flash memory                     */
/***********************************************************************/
void Flash_word_memcpy( unsigned int *Data_ptr, unsigned int *memaddr, unsigned int nLen )
{
	_DINT();
	FCTL3 = 0x0A500;          /* Lock = 0 */
	FCTL1 = 0x0A540;          /* WRT = 1 */
	for(; nLen > 0; nLen--)
	{
		*Data_ptr=*memaddr;           /* program Flash word */
		Data_ptr++;
		memaddr++;
	}
	_EINT();
}


//**********************************************************************
// Write n byte into blank Flash Memory
//**********************************************************************
void FlashFill( unsigned char *Data_ptr, unsigned int Len, unsigned char byte )
{
	_DINT();
	while ( Len>0 )
	{
		FlashWtByte( Data_ptr, byte );
		Data_ptr++;
		Len--;
	}
	_EINT();
}


//**********************************************************************
// Memory block copy
//**********************************************************************
void MemCopy( unsigned char *Dest, unsigned char *Src, unsigned char Len )
{
   while ( Len>0 )
   {
      *Dest = *Src;
      Dest++;
      Src++;
      Len--;
   }
}


//**********************************************************************
// Memory block copy
//**********************************************************************
void MemFill( unsigned char *Data_Ptr, unsigned int Len, unsigned char byte )
{
   while ( Len>0 )
   {
      *Data_Ptr = byte;
      Data_Ptr++;
      Len--;
   }
}

/***********************************************************************/
/* secure all flash                                                    */
/***********************************************************************/
void FlashSecure(void)
{
	_DINT();
	FCTL1 = 0x0A500;          /* ERASE,WRITE = 0 */
	FCTL3 = 0x0A510;          /* Lock = 1 */
}

⌨️ 快捷键说明

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