(ZIGBEE——温湿度采集)
 
采集芯片内温感器,使用ADC数模转换
 
使用串口助手显示温度
 
#include<ioCC2530.h>
#include<string.h>
#include<stdio.h>
#define uchar unsigned char 
#define uint unsigned int
//ADC配置及温度采集
int getTemperature(void)
{
  char i;
  uint value;
  uint Adcvalue;
  Adcvalue=0;
  TR0=0X01;               //开启温度传感器
  ATEST=0X01;             //将温度传感器与ADC连接
  for(i=0;i<4;i++)        //取四次平均值
  {
    ADCCON3 |=0X3E;       //0011 1110 ,12位分辨率,单个通道选择温度传感器
    ADCCON1 |=0X40;       //0100 0000,使用1.25V内部电压
   
    while(!(ADCCON1 &0X80)); //等待ADC转换完成
    value=ADCL>>2;           //ADC寄存器低两位无效
    value |=(((uint)ADCH)<<6);
    Adcvalue+=value;         //ADC被赋值为4次AD值之和
  }
  value=Adcvalue>>2;        //累加除以4.得到平均值
  return (value*0.0629-303.3); //根据AD值,计算出实际温度
}
//初始化串口0函数
void initUART0()
{
  CLKCONCMD &=~0X40;         //设置系统时钟源为32MHZ晶振 1011 1111
  while(CLKCONSTA & 0X40);   //等待晶振稳定
  CLKCONCMD &=~0X47;        //设置系统主时钟频率为32MHZ  1011 1000
  
  PERCFG &=~0X01;              //USART0 使用位置1 P0_2,P0_3口  1111 1110
  P0SEL |=0X3C;             //P0用作串口,外设
  U0CSR |=0XC0;             //使用UART方式,且允许接收   1100 0000
  U0UCR |=0;                  //串口0的配置
  U0GCR |=9;
  U0BAUD |=59;                //波特率的配置 19200
  UTX0IF=1;                  //UART0 TX中断标志位置1
  IEN0=0X84;                //开总中断
}
//串口发送字符函数
void UartTX_SEND_STRING(char *Data,int len)
{
  uint j;
  for(j=0;j<len;j++)
  {
    U0DBUF=*Data++;      //将字符串每个字符取出发送给串口
    while(UTX0IF==0);    //检测字符是否发送完毕
    UTX0IF=0;
  }
}
//延时函数
void delay(uint ms)
{
  char i,j;
  while(ms)
  {
    for(i=0;i<=167;i++)
    {
      for(j=0;j<=48;j++);
    }
    ms--;
  }
}
//主函数
void main()
{ 
  char str[3];
  //char *data;
 char Avgtemp;
  initUART0();          //调用初始化串口0函数
  while(1)
  {
      Avgtemp=getTemperature();
     // sprintf(data, "%f", Avgtemp);
      //UartTX_SEND_STRING(data,strlen(data)); 
      str[0]=Avgtemp/10+0X30;
      str[1]=Avgtemp%10+0X30;
      str[2]='\0';
      UartTX_SEND_STRING(str,3);  //发送到串口
      delay(100);
  }
}