Zigbee之旅(六):幾個重要的CC2430基礎實驗——ADC單次採樣__Zigbee

來源:互聯網
上載者:User
Zigbee之旅(六):幾個重要的CC2430基礎實驗——ADC單次採樣 一、承上啟下

  在無線感應器網路中,很重要的一項就是將感應器的類比值轉換成數字量,以便於傳輸和處理。而ADC(Analog-to-Digital Converter)正是用來完成這種轉換的。

  上一節,我們介紹了CC2430與PC之間的串口通訊。CC2430內部已嵌入一個溫度感應器,本節將在上一節的基礎上,實現一個簡單的關於片內溫度監測的小實驗:利用ADC將片內溫度感應器的電壓值轉換成數字量,利用公式計算出溫度值,然後通過串口將溫度值傳送到PC上並顯示出來。 二、ADC單次採樣 (1)實驗簡介

  利用ADC轉換CC2430片內溫度感應器的溫度值,通過串口將溫度值發送到PC並顯示出來。 (2)程式流程圖

(3)實驗源碼及剖析 /*
    實驗說明:片內溫度採集實驗,通過串口0將資料發送到PC機
*/

#include <ioCC2430.h>

#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3

/*32M晶振初始化
-------------------------------------------------------*/
void  xtal_init( void)
{
   SLEEP  &=  ~ 0x04;              //都上電
   while( !( SLEEP  &  0x40));      //晶體振蕩器開啟且穩定
   CLKCON  &=  ~ 0x47;           //選擇32MHz 晶體振蕩器
   SLEEP  |=  0x04;
}

/*LED燈初始化
-------------------------------------------------------*/
void  led_init( void)
{
   P1SEL   =  0x00;           //P1為普通 I/O 口
   P1DIR  |=  0x0F;           //P1.0 P1.1 P1.2 P1.3 輸出
  
   led1  =  1;
   led2  =  1;
   led3  =  1;
   led4  =  1;
}

/*UART0初始化
-------------------------------------------------------*/
void   Uart0Init( unsigned  char  StopBits , unsigned  char  Parity)
{
    P0SEL  |=   0x0C;                   //初始化UART0連接埠
    PERCFG &=  ~ 0x01;                   //選擇UART0為可選位置一
    U0CSR  =  0xC0;                     //設定為UART模式,而且使能接受器
    U0GCR  =  11;
    U0BAUD  =  216;                     //設定UART0傳輸速率為115200bps
    U0UCR  |=  StopBits| Parity;         //設定停止位與同位
}

/*UART0發送字元
-------------------------------------------------------*/
void   Uart0Send( unsigned  char  data)
{
   while( U0CSR & 0x01);     //等待UART空閑時發送資料
   U0DBUF  =  data;
}

/*UART0發送字串
-------------------------------------------------------*/
void  Uart0SendString( unsigned  char  *s)
{
   while( *s  !=  0)
     Uart0Send( *s ++);
}

/*UART0接收資料
-------------------------------------------------------*/
unsigned  char  Uart0Receive( void)
{
   unsigned  char  data;
   while( !( U0CSR & 0x04));  //查詢是否收到資料,否則繼續等待
   data = U0DBUF;
   return  data;
}

/*延時函數
-------------------------------------------------------*/
void  Delay( unsigned  int n)
{
   unsigned  int  i;
   for( i = 0; i <n; i ++);
   for( i = 0; i <n; i ++);
   for( i = 0; i <n; i ++);
   for( i = 0; i <n; i ++);
   for( i = 0; i <n; i ++);
}

/*得到實際溫度值
-------------------------------------------------------*/
float  getTemperature( void) 
{
   unsigned  int   value;

   ADCCON3   = ( 0x3E);                   //選擇1.25V為參考電壓;14位解析度;對片內溫度感應器採樣
    
   ADCCON1  |=  0x30;                     //選擇ADC的啟動模式為手動
   ADCCON1  |=  0x40;                     //啟動AD轉化             
    
   while( !( ADCCON1  &  0x80));            //等待ADC轉化結束

   value  =   ADCL  >>  2;
   value  |= ( ADCH  <<  6);                //取得最終轉化結果,存入value中
  
   return  value * 0.06229 - 311.43;         //根據公式計算出溫度值
}

/*主函數
-------------------------------------------------------*/
void  main( void)
{

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.