1. 程式人生 > >TI CC2530 學習筆記-11-NewBit-CC2530-UART0-定時傳送

TI CC2530 學習筆記-11-NewBit-CC2530-UART0-定時傳送

TI CC2530 學習筆記-目錄

TI CC2530 學習筆記-11-NewBit-CC2530-UART0-定時傳送

功能:用定時器3製作一個時鐘,每當秒更新時將時間列印後從串列埠送出。使用指令可以設定時間,設定格式為"#hh:mm:nn"。

  1. 配置定時器,UART,LED
  halMcuWaitUs(10000);  //等待時間穩定,約10ms
  CLKCONCMD &= ~0x47;   //選擇外部32MHZ時鐘, 不分頻
                        //TICKSPD不改變,保持為0x01,即定時器標記頻率為16MHz
  while( (CLKCONSTA & 0x47) != 0x00 ); //切換時鐘源後再次等待穩定
  P0DIR |= 0x40;    //配置IO為輸出
/* 初始化串列埠 */
  P0SEL |= 0x0C; //將P02,P03設為外設功能
  PERCFG &= ~0x01;   //串列埠0佔用P02 P03
  U0CSR = 0X80;    //USART模式設為UART模式
  U0UCR = 0x00;    //禁用流控,禁用奇偶檢驗,1位停止位
  U0CSR |= 0x40;    //允許接收
  U0GCR   |= 8;     //9600
  U0BAUD  =  59;
  IEN0 |= 0x04;     //開串列埠0接收中斷
  /* 初始化定時器4*/
  T4CTL = 0xE2;   //128分頻(0.125Mhz),模模式
  T4CCTL0 = 0x04; //比較模式
  T4CC0 = 125;    //溢位值
  T4CTL |= 0x08;
  T4CCTL0 |= 0x40;//開T4通道0中斷
  T4IE = 1;   //開T4中斷
  /* 初始化定時器3 */
  T3CTL = 0xE2;   //128分頻(0.125Mhz),模模式
  T3CCTL0 = 0x04; //比較模式
  T3CC0 = 125;    //溢位值
  T3CTL |= 0x08;  //開啟溢位中斷
  T3CCTL0 |= 0x40;//開T3通道0中斷
  T3IE = 1;        //定時器3中斷使能
  T3CTL |= 0x10;  //啟動定時器
  IEN0 |= 0X80;   //開總中斷
  LED_R_IO = LED_R_ACTIVE;//點亮LED

2.在main函式的while迴圈輸出時間和檢測是否有設定時間

  while(1)
  {
    if (culUartRxBufferRead(uartRxBuf, &length) == SUCCESS)//UART收到資料
    {
      if (length == 9)//判斷資料長度
      {
        culTimeSet(uartRxBuf); //設定時間
      }
    }
    if (gTimeBrush == 1)//判斷重新整理時間標誌位
    {
      culTimePutOut();//列印時間
      gTimeBrush = 0; //清除標誌位
    }
  }
}
  1. 定時器3中斷函式,用於計算時分秒
#pragma vector = T3_VECTOR
 __interrupt void T3_ISR( void )
{
  T3IF = 0;			//可不清中斷標誌,硬體自動完成
  gMsCountForTime ++;
  if (gMsCountForTime >= 1000)//1000ms
  {
    gMsCountForTime = 0;
    gTimeBrush = 1;
    if (gTime[2] < 59)
    {
      gTime[2] ++;            //秒加1
    }
    else
    {
      gTime[2] = 0;
      if (gTime[1] < 59)
      {
         gTime[1] ++;         //分鐘加1
      }
      else 
      {
        gTime[1] = 0;
        if (gTime[0] < 23)
        {
          gTime[0] ++;        //小時加1
        }
        else
        {
          gTime[0] = 0;       //24:00 -> 0:00
        }
      }             
    }
  }
}

程式碼:NewBit-ZDK CC2530 基礎例程