(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);
}
}