博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝牙4.0 BLE基础之vdd检测new
阅读量:5305 次
发布时间:2019-06-14

本文共 2047 字,大约阅读时间需要 6 分钟。

外部ADC通道,我们现在用的是A0脚,也就是P00通道

把它设置成输出的一个模式。在程序中设置,代码如下:

#include <ioCC2540.h>

#define HAL_ADC_REF_125V 0x00

#define HAL_ADC_DEC064 0X00

#define HAL_ADC_CHN_VDD3 0x0f

unsigned char cmd;

unsigned int Read_Vddvalue(void)

{

  unsigned int value;

  unsigned char tmpADCCON3 = ADCCON3;

  ADCIF=0;

  ADCCON3=(HAL_ADC_REF_125V|HAL_ADC_DEC064|HAL_ADC_CHN_VDD3);    //选择一个进程为125v的基准电压,设置抽取率,选择ADC的引脚

  while(!ADCIF);

  value=ADCL>>2;

  value|=((unsigned int)ADCH)<<6;

  ADCCON3=tmpADCCON3;

  return (value);

}

#pragma vector = URX0_VECTOR

__interrupt void UART0_ISR(void)

{

    URX0IF = 0;       // 清中断标志

    cmd = U0DBUF;

   

}

void UartSendString(char *Data, int len)

{

    unsigned int i;

    

    for(i=0; i<len; i++)

    {

        U0DBUF = *Data++;

        while(UTX0IF == 0);

        UTX0IF = 0;

    }

}

void InitUart(unsigned int baudrate)

{

    CLKCONCMD &= ~0x40;                        //设置系统时钟源为32MHZ晶振

    while(CLKCONSTA & 0x40);                   //等待晶振稳定为32M

    CLKCONCMD &= ~0x47;                        //设置系统主时钟频率为32MHZ   

    PERCFG = 0x00;           //外设控制寄存器 USART 0IO位置:0P0口位置1

    P0SEL = 0x0c;            //P0_2,P0_3用作串口(外设功能)

    P2DIR &= ~0xC0;          //P0优先作为UART0

    

    U0CSR |= 0x80;           //设置为UART方式

    switch(baudrate)

    {

    case 115200:

                U0GCR = 11;           

                U0BAUD = 216;           //波特率设为115200

                break;

    case 9600:

                U0GCR = 8;           

                U0BAUD = 59;           //波特率设为9600

                break;

    default:

                U0GCR = 8;           

                U0BAUD = 59;           //波特率设为9600

                break;

    }

    UTX0IF = 0;              //UART0 TX中断标志初始置位0

    U0CSR |= 0x40;           //允许接收

    IEN0 |= 0x84;            //开总中断允许接收中断  

}

/****************************************************************************

* 程序入口函数

****************************************************************************/

void main(void)

{   

  unsigned int vddvalue;

  unsigned char buf[5]="0.0V";

  InitUart(115200);

  while(1)

  {

   if(cmd=='A')

   {

    cmd = 0;

    vddvalue=Read_Vddvalue();

    vddvalue=(vddvalue*25)>>8;//(vddvalue*1.25/2^7)放大10(vddvalue*12.5/2^7)

                              //(vddvalue*25/2^8)->(vddvalue*25)>>8

    vddvalue=vddvalue*3;//VDD/3作为一个ADC输入通道,因此对该通道的检测,得到VDD/3的值,那么VDD高行是这个值乘以3

    buf[0]=vddvalue/10+'0';

    buf[1]='.';

    buf[2]=vddvalue%10+'0';

    UartSendString(buf,strlen(buf));

   }

  }

   

}

 

寄存器图表:

 

 

 

运行结果,发送一个A产生一个数据

 

如果采用其他的通道,转换过后也是和这个一样的,这里寄存器有选择的地方,就是用正电压作为参考,使用内部的温度传感器来采,对应的地方把它旋转过来,最后可以传播或者获取这个相应的温度信息。

 

 

原文链接:

转载于:https://www.cnblogs.com/maizi008/p/6029598.html

你可能感兴趣的文章
[20]iwl3945 no power management and solution of fan contorl
查看>>
关于 IdentityServer 部署到生产环境相关问题踩坑记录
查看>>
Asp.Net Mvc5 结合 SignalR2.0+ 实现消息交互简单例子
查看>>
梳理 Opengl ES 3.0 (二)剖析一个GLSL程序
查看>>
jQuery起点教程之使用选择器和事件
查看>>
初见 sublime text
查看>>
3.2.2 变量 时标符
查看>>
C语言运算符优先级
查看>>
Struts2标签库之iterator
查看>>
Linux 安装tomcat 及过程中遇到的问题
查看>>
解决接收不到组播包的问题
查看>>
[HDU 3336]Count the String[kmp][DP]
查看>>
xml--通过jdom解析及生产XML
查看>>
二叉树遍历
查看>>
有感于NC的强大
查看>>
信息系统开发平台OpenExpressApp - 报表模块支持ReportObjectView
查看>>
显示隐藏文件 osx 10.10
查看>>
shell脚本之字符串运算的使用
查看>>
二叉树
查看>>
<%@ include file=""%>与<jsp:include page=""/>区别
查看>>