ZIGBEE-温湿度采集及串口

mac2025-05-18  28

(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); } }
最新回复(0)