📄 general.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 + -