版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21352095/article/details/83046917
演示使用CC2530的ADC采集电源电压。先对VDD/3进行采样,然后将结果乘3以得到VDD的电压值,按下按键S0时串口输出一次电压,同时翻转LED灯。
- 初始化UART
halMcuWaitUs(10000); //等待时间稳定,约10ms
CLKCONCMD &= ~0x47; //选择外部32MHZ时钟, 不分频
//TICKSPD不改变,保持为0x01
while( (CLKCONSTA & 0x47) != 0x00 ); //切换时钟源后再次等待稳定
P0DIR |= 0x40; //配置IO为输出
/* 初始化串口 */
P0SEL |= 0x0C; //将P02,P03设为外设功能
PERCFG &= ~0x01; //串口0占用P02 P03
U0CSR = 0X80; //USART模式设为UART模式
U0UCR = 0x00; //禁用流控,禁用奇偶检验,1位停止位
U0GCR |= 8; //9600
U0BAUD = 59;
- 按下按键时检测电压
while(1)
{
if (KV_1 == halScanKey())
{
adc = ADCL;
adc = ADCH; //清除ADCCON1.EOC标志
ADCCON3 = 0x3f; //内部参考电压,12位有效精度,带1位符号位,即11位有效数据2048
while (!(ADCCON1 & 0x80));
adcResult = ADCL;
adcResult |= ((uint16)ADCH << 8);
if (adcResult & 0x8000)//负温度
{
adcResult = ~adcResult + 1;
}
adcResult >>= 4;
tVdd = (float)(adcResult) * 1.15 / 2048;
tVdd *= 3;
if (tVdd > 1.0)
{
tString[0] = (uint8)tVdd % 10 + '0';
}
else
{
tString[0] = '0';
}
tString[1] = '.';
tString[2] = (uint16)(tVdd * 10) % 10 + '0';
tString[3] = 'V';
tString[4] = '\n';
halUart0SendString(tString,5);
LED_R_TOG();
while( KV_1 == halScanKey());
}
}