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

📄 init.h

📁 USB源程序。适合新手学习使用
💻 H
字号:
#define  VERSION          340               //IAR version
#define  FLASH_B          0x1000            //存放默认的涡街内径,仪表系数,介质密度等参数
#define  FLASH_A          0X1080            //存放修改的涡街内径,仪表系数,介质密度等参数

static float Coefficient[3]={50,9.123,1};   //涡街内径,涡街的仪表系数,管道介质密度

//main variable
unsigned int i;
float Diameter=0,Meter_coeffient=0,Density=0;
//main function
void CLOCK_Init(void);
void FLASH_Init(void);
void Write_unchar_FLASH(unsigned char *Flash_ptr,unsigned char Flash_value);
void Write_float_FLASH (float *Flash_ptr,float Flash_value);
void RESET_FLASH (float *Flash_ptrA,float *Flash_ptrB);
void FLASH_CLR(float *FLASH_ptr );
//////////////////////////////////////////////////////////////////////////
void CLOCK_Init(void)
{
  BCSCTL1=0x00;                         
  BCSCTL2=0x88;
  do				                 //wait in loop until crystal is stable
  {
    IFG1&=~OFIFG;
    for (i = 0xFF; i > 0; i--);                  // Time for flag to set           
  }while(OFIFG&IFG1);  
}
void UART_Init(void)
{
   //------------------------------通讯口初始化------------------------------//   
   P3SEL |= BIT6 + BIT7;
   ME2 |= URXE1 + UTXE1;    // Enable USART1 RXD + TXD
   UCTL1 |= CHAR + SWRST;
   UBR01 = 0x06;	    // set the baud rate=4800 
   UBR11 = 0;		    // UBR+(m7+...m0)/8=32768/4800=6.83
   UMCTL1 = 0xFB;	    // UBR=0xFB   利用公式得出UMCTL1的值     
   UTCTL1|= SSEL0;          //select ACLK
   URCTL1 = URXEIE;         //接受出错中断允许位???
   UCTL1 &= ~SWRST;   
   IE2 |= URXIE1;           // Enable USART1 RX interrupt
}

float *ptrFCoefficient = (float *)FLASH_A;                 // 指向存放涡街口径和仪表修正系数的地址
unsigned char *ptrChCoefficient = (unsigned char *)FLASH_A;// 指向存放涡街口径和仪表修正系数的地址
char COEFFICIENT;

void FLASH_Init(void)
{
  COEFFICIENT = 1; 
  if((*((char *)(ptrFCoefficient+3)))==0xAA)
  {
       Diameter = *ptrFCoefficient;
       Meter_coeffient = *(ptrFCoefficient+1);
       Density = *(ptrFCoefficient+2);
  }
  else
  {
      for(i=0;i<3;i++)
      {
        Write_float_FLASH ((float *)FLASH_B+i,Coefficient[i]);
        Write_float_FLASH ((float *)FLASH_A+i,Coefficient[i]);
      }
      Write_unchar_FLASH ((unsigned char *)FLASH_B+12,0xAA);
      Write_unchar_FLASH ((unsigned char *)FLASH_A+12,0xAA);
      
      Diameter = *ptrFCoefficient;
      Meter_coeffient = *(ptrFCoefficient+1);
      Density = *(ptrFCoefficient+2);
  }
}
void Write_unchar_FLASH(unsigned char *Flash_ptr,unsigned char Flash_value)
{
  FCTL3 = FWKEY;                            // Clear Lock bit
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

  *Flash_ptr = Flash_value;                 // Write value to flash

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}
void Write_float_FLASH (float *Flash_ptr,float Flash_value)
{
  FCTL3 = FWKEY;                            // Clear Lock bit
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

  *Flash_ptr = Flash_value;                 // Write value to flash

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}
void RESET_FLASH (float *Flash_ptrA,float *Flash_ptrB)
{
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
  FCTL3 = FWKEY;                            // Clear Lock bit
  *Flash_ptrA = 0;                          // Dummy write to erase Flash segment B
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

  for (i=0; i<32; i++)
  {
    *Flash_ptrA++ = *Flash_ptrB++;          // Copy value segment A to segment B
  }

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}
void FLASH_CLR(float *Flash_ptr )
{
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
  FCTL3 = FWKEY;                            // Clear Lock bit
  *Flash_ptr = 0;                          // Dummy write to erase Flash segment B  
  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}

⌨️ 快捷键说明

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