一、实验目的

将采集的内部温度传感器信息通过串口发送到上位机

二、实验过程

1、寄存器配置

ADCCON1(0XB4)
ADC控制寄存器1
BIT7:EOC   ADC结束标志位
0:AD转换进行中                     1:AD转换完成
  BIT6:ST     手动启动AD转换
0:关闭                                  1:启动AD转换(需要BIT5:BIT4=11)
  BIT5:BIT4   AD转换启动方式
00:外部触发
01:全速转换,不需要触发
10:T1通道比较触发
11:手动触发
  BIT3:BIT2     16位随机数发生器控制位
00:普通模式(13x打开)
01:开启LFSR时钟一次(13x打开)
10:保留位
11:关
ADCC0N2(0XB5)
序列AD转换控制寄存器2
BIT7:BIT6        SREF      选择AD转换参考电压
00:内部参考电压(1.25V)
01:外部参考电压AIN7输入
10:模拟电源电压
11:外部参考电压AIN6-AIN7差分输入
  BIT5:BIT4      设置AD转化分辨率
00:64dec,7位有效      
01:128dec,9位有效、
10:256dec,10位有效
11:512dec,12位有效
  BIT3:BIT2:BIT1:BIT0
设置AD转换最末通道,如果置位时ADC正在运行,则在完成序列AD转换后立刻开始,否则置位后AD转换,转换完成后自动清0。
0000:AIN0
0001:AIN1
0010:AIN2
0011:AIN3
0100:AIN4
0101:AIN5
0110:AIN6
0111:AIN7
1000:AIN0-AIN1差分
1001:AIN2-AIN3差分
1010:AIN4-AIN5差分
1011:AIN6-AIN7差分
1100:GND
1101:保留
1110:温度传感器
1111:1/3模拟电源电压
ADCCON3(0XB5)
单通道AD转换控制寄存器3
BIT7:BIT6   SREF   选择单通道AD选择参考电压
00:内部参考电压(1.25V)
01:外部参考电压AIN7输入
10:模拟电源电压
11:外部参考电压AIN6-AIN7差分输入
  BIT5:BIT4       设置单通道AD转换分辨率
00:64dec,7位有效      
01:128dec,9位有效、
10:256dec,10位有效
11:512dec,12位有效
  BIT3:BIT2:BIT1:BIT0
设置AD转换最末通道,如果置位时ADC正在运行,则在完成序列AD转换后立刻开始,否则置位后AD转换,转换完成后自动清0。
0000:AIN0
0001:AIN1
0010:AIN2
0011:AIN3
0100:AIN4
0101:AIN5
0110:AIN6
0111:AIN7
1000:AIN0-AIN1差分
1001:AIN2-AIN3差分
1010:AIN4-AIN5差分
1011:AIN6-AIN7差分
1100:GND
1101:保留
1110:温度传器
1111:1/3模拟电源电压
TR0(0x624B) BIT0:置1表示将温度传感器与ADC连接起来
ATEST(0x61BD) BIT0:置1表示将温度传感器启用

2、源码

adc.h

#ifndef ADC_H_
#define ADC_H_ #include <ioCC2540.h> #define uint unsigned int
#define uchar unsigned char void AdcInit(void);//内部温度传感器 uint GetAdcValue(void);//得到单次转换的AD值 uint TempDeal(uint TempAdValue);//将温度传感器的Ad值转换成温度值,扩大100倍 void ChanceValueToString(uint Data ,uchar *Buff);//将数值转换为字符串 #endif
#include "adc.h"

void AdcInit(void)//内部温度传感器
{
ADCCON1 = 0x33;//软件启动转换
ADCCON3 = 0x3e;//内部参考电压,12位分辨率,选择温度传感器输入
TR0 = 0x01;
ATEST = 0x01;
// ADCCON1 |= 0x40;//软件启动转换
} uint GetAdcValue(void)
{
uint AdValue=0; ADCCON1 |= 0x40;
while(!(ADCCON1 & 0x80));
AdValue = ADCL >>4;
AdValue |= ADCH <<4; return AdValue;
} uint TempDeal(uint TempAdValue)//将温度传感器的Ad值转换成温度值,扩大100倍
{
float Tempruture;
Tempruture = (TempAdValue-1367.5)/4.5+2.5;
TempAdValue = (uint)(Tempruture*100);
return TempAdValue;
} void ChanceValueToString(uint Data ,uchar *Buff)//将数值转换为字符串
{
Buff[0] = (Data/10000)+0x30;
Buff[1] = ((Data/1000)%10)+0x30;
Buff[2] = ((Data/100)%10)+0x30;
Buff[3] = '.';
Buff[4] = ((Data/10)%10)+0x30;
Buff[5] = (Data%10)+0x30;
Buff[6] = '\n';
Buff[7] = '\0';
}

sysclock

#ifndef SYSCLK_H_
#define SYSCLK_H_ #include<ioCC2540.h> void SysClkSet_32M(void);//设置系统时钟为32MHz #endif
#include "sysclk.h"

void SysClkSet_32M(void)//设置系统时钟为32MHz
{
CLKCONCMD &= ~0x40;
while(CLKCONSTA & 0x40);
CLKCONCMD &= ~0x47;
}

usart0

#ifndef USART0_H_
#define USART0_H_ #include<ioCC2540.h> #define uint unsigned int
#define uchar unsigned char void UartInit(void);//115200 void Uart0_SendByte(uchar Byte);//发送一个数据 void Uart0_SendString(uchar *Buff);//发送一个字符串 #endif
#include"usart0.h"

void UartInit(void)
{
P2DIR &= ~0xc0;//备用位置1
PERCFG &= ~0x01;//设置UART0高优先级
P0SEL |= 0x3c;//2 3 4 5作为外设
U0CSR = 0xc0;
U0GCR = 11; //设置波特率,可参考CC2530中文文档中的相应表格
U0BAUD = 216;
EA=1;
URX0IE=1;//接收中断 URX0IF--接收中断标志位 UTX0IF--发送完成标志位
} void Uart0_SendByte(uchar Byte)//发送一个字符
{
U0DBUF=Byte;
while(!UTX0IF);
UTX0IF=0;
} void Uart0_SendString(uchar *Buff)//发送一串字符
{
uchar *p;
p=Buff;
while(*p != 0)
{
Uart0_SendByte(*p);
p++;
}
} #pragma vector = URX0_VECTOR //中断向量
__interrupt void Uart0RxInt(void)
{
URX0IF=0;
Uart0_SendByte(U0DBUF);
}

mian

#include<ioCC2540.h>
#include"sysclk.h"
#include"usart0.h"
#include"adc.h" #define uint unsigned int
#define uchar unsigned char
void Delay(uint n);
uchar TempDis[8]; void main()
{
SysClkSet_32M();//设置系统时钟为32MHz
UartInit(); //115200 while(1)
{
AdcInit(); //初始化ADC
ChanceValueToString(TempDeal(GetAdcValue()),TempDis);//获取当前温度值并将其装换成字符串
Uart0_SendString(TempDis);//打印温度值
Delay(1000);
}
} void Delay(uint n)
{
uint i,j;
for(i=n;i>0;i--)
for(j=5000;j>0;j--);
}

CC2540开发板学习笔记(六)——AD控制(自带温度计)的更多相关文章

  1. CC2540开发板学习笔记(五)——串口通信

    (一)串口发送 一.实验现象: 开发板实现功能发送 二.实验过程 1.PL2303 USB转串口电路图 2.串口发送 (1)查看用户手册有: UART0 对应的外部设备 IO 引脚关系为: P0_2 ...

  2. CC2540开发板学习笔记(三)——外部中断

    一.实验内容 通过外部中断方式依次按下按键S1控制LED1的亮灭 二.实验过程 1.电路原理图同上 2.中断的概念 比如说我们在执行main函数时,突然来了个指令.优先级比现在执行的main还高,那我 ...

  3. CC2540开发板学习笔记(二)——按键

    一.实验内容 用按键S1控制LED1的亮和灭 二.实验过程 1.电路原理: 可以看出,当S按下P0.0和P0.1接地,反之则接高电压. 2.寄存器使用: 依旧应该首先进行3个基本寄存器的设定,对LED ...

  4. CC2540开发板学习笔记(九)—— BLE协议简介

    一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...

  5. CC2540开发板学习笔记(七)—— 睡眠唤醒

    (一)中断唤醒 一.实验内容 通过中断唤醒在睡眠模式下的CC2540 二.实验原理 1.系统电源管理(工作方式) (1)全功能模式: 高频晶振(16M或者32M)和低频晶振(32.768K RCOSC ...

  6. CC2540开发板学习笔记(一)——LED点亮

    一.实验内容: 点亮LDE1.2 二.实验原理: 1.电路原理图: 就一个发光二极管串联一个电阻.电阻是为了防止电流过大.利用发光二极管的单向导电性,在P1为高电平是点亮LED,在低电平是熄灭LED. ...

  7. CC2540开发板学习笔记(八)—— 看门狗

    一.功能: 防止程序跑飞,使得系统重新进入工作状态,即一种复位操作吧. 但需要不停地喂狗= =(就是不断的执行某种操作),假如说你的程序跑到了不知道哪里去的错误时,即不会实现喂狗,就会发生复位,程序就 ...

  8. CC2540开发板学习笔记(四)——定时器

    一.实验内容 分别使用定时器T1和T3使得LED周期性闪烁 二.实验过程 1.定时器T1(查询IRCON来控制) (1)需要调配的寄存器 T1CTL(0XE4) Timer1控制寄存器   BIT3, ...

  9. 【4412嵌入式开发板学习笔记】认识uboot

    转自迅为讨论群:http://www.topeetboard.com 重要说明:这份笔记不是4412开发配套的,是我在网上看视频的时候下载上课老师的笔记后修改的.所以我试了一下笔记上的uboot命令, ...

随机推荐

  1. linux基本命令(2)-备份压缩命令

    一.tar命令 .解压文件 .tar.gz -C /opt (解压到/opt下) / /opt/tomcat (建立链接文件) 二.zip命令 // 1.把/home目录下面的mydata目录压缩为m ...

  2. C开发基础--函数调用栈

    发现有一些问题几乎是所有的新人都会遇到,而且也常因为缺乏一些基本的知识而无从下手.函数调用栈的内容就是其中之一.于是花点时间把以前写的内容整理出来. 程序在运行期间,内存中有一块区域,用来实现程序的函 ...

  3. 老项目的#iPhone6于iPhone6Plus适配#iPhone6分辨率与适配

    技术博客http://www.cnblogs.com/ChenYilong/    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4011744.html ,转 ...

  4. POJ 1837 Balance

    Balance Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9240 Accepted: 5670 Description G ...

  5. 滑动菜单栏(一)开源项目SlidingMenu的使用

    本帖最后由 user1 于 2013-7-16 21:56 编辑 一.SlidingMenu简介相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右 ...

  6. 新一代 Tor发布,它牛在哪里?

    导读 知名匿名搜索引擎Tor,最近发布了基于火狐浏览器45-ESR的6.0版本,增强了对HTML5的支持,并更新了用来保护加密流量及其更新机制的安全功能.火狐45-ESR版本的全称为Firefox E ...

  7. Apache服务器常规操作

    导读 Apache是世界上排名第一的Web服务器,50%以上的Web服务器都在使用Apache,它几乎可以在所有计算机平台上运行.下面就由我给大家说说Apache服务器的一些常规操作. Apache服 ...

  8. 虚拟机里面安装Openfiler 2.99

    简介 Openfiler 由rPath Linux驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN).Open ...

  9. VS2010编译链接openssl静态库

    最近工作需要使用一些加密算法.之前尝试过cryptopp以及polarssl,听说openssl中的加密模块特别全,并且特别好用.于是想尝试一下. 一.环境配置 下载openssl,我这里使用的是op ...

  10. Rotate bitmap by real angle

    tl;dr; Use GDI+ SetWorldTransform With WinAPI's SetWorldTransform you can transform the space of dev ...