CC2530片内温度采集(串口发送)
时间: 2023-09-09 21:11:59 浏览: 250
CC2530芯片内置了一个温度传感器,可以通过读取内部寄存器的方式获取温度值,并通过串口发送出去。以下是CC2530片内温度采集并串口发送的示例代码:
```c
#include "ioCC2530.h"
#define UART_RXD P0_2
#define UART_TXD P0_3
#define BAUD_RATE 115200
void InitUART(void)
{
PERCFG = 0x00; // UART0在P0上
P0SEL = 0x0C; // P0.2和P0.3用作UART
U0CSR |= 0x80; // UART模式
U0GCR |= 11; // 115200波特率
U0BAUD = 216; // 115200波特率
U0UCR |= 0x80; // 允许UART接收和发送
}
void InitADC(void)
{
ADCCON3 |= 0x80; // 打开ADC电源
ADCCON1 = 0x10; // 内部温度传感器,12位精度
ADCCON2 = 0x00; // 不启用参考电压和增益
ADCCON1 |= 0x20; // 启动ADC转换
while (!(ADCCON1 & 0x80)); // 等待转换完成
}
void SendByte(unsigned char byte)
{
while (!(U0CSR & 0x02)); // 等待发送缓冲区为空
U0DBUF = byte; // 发送数据
}
void SendString(unsigned char *str)
{
while (*str != 0)
{
SendByte(*str);
str++;
}
}
void main(void)
{
unsigned char str[20];
unsigned int temp;
InitUART();
while (1)
{
InitADC();
temp = (unsigned int)ADCL + ((unsigned int)ADCH << 8);
temp = ((temp - 600) * 34 / 100) + 250;
sprintf(str, "Temperature: %u.%u C\r\n", temp / 10, temp % 10);
SendString(str);
}
}
```
上述代码中,我们首先调用`InitUART()`函数初始化串口,然后调用`InitADC()`函数启动ADC转换并获取温度值,最后通过串口发送出去。需要注意的是,由于CC2530的内部温度传感器精度比较低,我们需要手动对ADC读取的值进行转换,才能得到正确的温度值。在上述代码中,我们对读取的值进行了一些简单的计算,得到了摄氏度单位的温度值,并通过`sprintf()`函数将其转换为字符串格式,然后通过`SendString()`函数发送出去。
阅读全文