zigbee---使用内置传感器

mac2025-03-14  13

串口发送传感温度

1.使用ADC数模转换,计算出内置温度传感器的值 2.使用串口助手显示开发板传送上来的温度数据

实验思路: 使用ADC并进行4次数据的采集,最后求出平均值,利用规则公式计算出对应的温度, 将得到的浮点数转化成字符串利用串口发送,(1.可以使用整除,求余运算之后加上0x30进行转化,不过该方法精度较低 2.使用Sprintf函数将浮点型数拼接成字符串,这应该是特别好的方法),串口发送时是分一个字符一个字符的发送,使用strlen函数求取字符串的长度。

重点:如果使用的粤嵌开发板记得如下语句,否则拿到的温度值将为负数 实现代码:

#include <ioCC2530.h> #include "exboard.h" #include "string.h" #include "stdio.h" float getTemperature(void); //函数声明 void initUART0(void); void UartTX_Send_String(char *Data,int len); uint value; void delay(int i); void main(void) { char *data; float temp; initUART0(); while(1) { temp=getTemperature(); sprintf(data,"%f摄氏度 %d电压值\n",temp,value); //字符串拼接函数,在头文件stdio.h中 UartTX_Send_String(data,strlen(data)); delay(100); } } //软件延时函数 void delay(int i) { int j; for(;i>0;i--) for(j=0;j<10000;j++); } float getTemperature(void) { char i; float va; uint AdcValue; AdcValue=0; TR0=0x01;//将内置温度传感器与ADC连接,粤嵌开发版的有这个需求 ATEST=0x01; for(i=0;i<4;i++)//求取四次的平均值 { ADCCON3|=0x3E; ADCCON1|=0x40; //使用1.25v内部电压,12位分辨率,AD源为片内温度 //传感器开启单通道ADC while(!(ADCCON1&0x80)); //等待AD转换完成 value=ADCL>>2; //AdcValue被赋值为4次AD值之和 value|=(((uint)ADCH)<<6); AdcValue+=value; } value=AdcValue>>2; //累加除以4,得到平均值 va=(float)value*0.0629-303.3; //根据AD值,计算出实际的温度 return va; } //串口通信初始化函数 void initUART0(void) { CLKCONCMD&=~0x40; //设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振稳定 CLKCONCMD&=~0x47; //设置系统主时钟频率为32MHZ PERCFG=0x00; //位置1 P0口 P0SEL=0x3C; //P0作为串口 P2DIR&=~0x0C; //P0优先作为UART0 U0CSR|=0x80; //串口设置为UART方式 U0GCR|=9; U0BAUD|=59; //波特率设为19200 UTX0IF=1; //UART0 TX中断标志初始置位1 U0CSR|=0x40; //允许接收 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; } }

实验现象:串口助手接收

串口助手下载地址链接:https://pan.baidu.com/s/1OLWEsXeW6bvpmMpiGBOSbA 提取码:vze7 复制这段内容后打开百度网盘手机App,操作更方便哦

最新回复(0)