导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→CC2430/CC2431实例程序---片内温度传感器使用[

* 30252: CC2430/CC2431实例程序---片内温度传感器使用[推荐]

   wireless2009 
wireless2009发表的帖子 

 CC2430/CC2431实例程序---片内温度传感器使用[推荐]
//说明:本实验在成都无线龙提供的CC2430模块中调试通过。
//取片内温度传感器为AD 源,并将转换得到温度通过串口送至电脑。
#include "ioCC2430.h"
#include "temp.h"
#include "stdio.h"
#define uint unsigned int
#define ConversionNum 20
//定义控制灯的端口cd wxl
#define led1 P1_0
#define led2 P1_1
void Delay(uint);
void initUARTtest(void);
void UartTX_Send_String(char *Data,int len);
char adcdata[]=" 0.0C ";
//将片内温度传感器AD 转换的结果转换成温度。
#define ADC14_TO_CELSIUS(ADC_value) ( ((ADC_value) >  >   4) - 315)
/****************************************************************
* 连续进行4 次AD 转换,
* 将得到的结果求均值后将AD 结果转换为温度返回。****************************************************************/
INT8 getTemperature(void){
UINT8 i;
UINT16 accvalue;
UINT16 value;
accvalue = 0;
for( i = 0; i   < 4; i++ )
{
ADC_SINGLE_CONVERSION(ADC_REF_1_25_V | ADC_14_BIT | ADC_TEMP_SENS);
ADC_SAMPLE_SINGLE();
while(!ADC_SAMPLE_READY());
value = ADCL >  >   2;
value |= (((UINT16)ADCH)   <  < 6);
accvalue += value;
}
value = accvalue >  >   2; // devide by 4
return ADC14_TO_CELSIUS(value);
}
 /****************************************************************
*函数功能 :初始化串口0     *
*入口参数 :无        *
*返 回 值 :无        *
*说    明 :57600-8-n-1       *cd wxl
*将I/0 P10,P11 设置为输出去控制LED, 将系统时钟设为高速晶振,将P0口设置为
*串口0功能引脚,串口0使用UART模式,波特率设为57600,允许接收。在使用串口之前调用。
****************************************************************/
void initUARTtest(void)
{
    CLKCON &= ~0x40;              //晶振
    while(!(SLEEP & 0x40));      //等待晶振稳定
    CLKCON &= ~0x47;             //TICHSPD128分频,CLKSPD不分频
    SLEEP |= 0x04;      //关闭不用的RC振荡器
    PERCFG = 0x00;     //位置1 P0口
    P0SEL = 0x3c;     //P0用作串口
    U0CSR |= 0x80;     //UART方式
    U0GCR |= 10;     //baud_e = 10;
    U0BAUD |= 216;     //波特率设为57600
    UTX0IF = 1;
U0CSR |= 0X40;     //允许接收
    IEN0 |= 0x84;     //开总中断,接收中断
}
/****************************************************************
*将系统时钟设为晶振,设AD 目标为片机温度传感器。
****************************************************************/
Void  initTempSensor(void)
{
DISABLE_ALL_INTERRUPTS();
SET_MAIN_CLOCK_SOURCE(0);
*((BYTE __xdata*) 0xDF26) = 0x80;
}
/****************************************************************
*函数功能 :串口发送字符串函数 cd wxl 。串口发送数据, *data 为发送缓冲的指针,len 为发送数据的长度,在初始化串口后。才可以正常调用。
*入口参数 : data:数据       *
*     len :数据长度            *
*返 回 值 :无              *
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j  <len;j++)
{
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
}
}
void UartTX_Send_word(char word)
{
    U0DBUF = word;
    while(UTX0IF == 0);
    UTX0IF = 0;
}
/****************************************************************
*函数功能 :主函数      
****************************************************************/
void main(void)

     char i;
        char temperature[10];
        INT16 avgTemp;
     initUARTtest();                                 //初始化串口cd wxl
     initTempSensor();                               //初始化ADC
        while(1)
        {
          avgTemp = 0;
          for(i = 0 ; i   < 64 ; i++)
          {
            avgTemp += getTemperature();
            avgTemp >  >  = 1;
          }
              sprintf(temperature, (char *)"%dC", (INT8)avgTemp);
             UartTX_Send_String(temperature,4);
             UartTX_Send_word(0x0A);
             Delay(20000);
        }
}


发表时间:2009年2月26日13:20:46

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:[推荐] ZigBee无线定位技术剖析引 言  CC2431/
[下一篇帖子]:please send the data to m