概述
ZigBee-CC2530单片机 - 实现外部电压值的测量
程序源码
/* 包含头文件 */
#include "ioCC2530.h"
#include <string.h>
#define LED1 P1_0 // P1_0定义为P1_0 led灯端口
#define uint16 unsigned short
#define uint32 unsigned long
#define uint unsigned int
unsigned int flag,counter=0; //统计溢出次数
unsigned char s[8];//定义一个数组大小为8
void InitLED()
{
P1SEL&=~0X01; //P1_0设置为普通的IO口 1111 1110
P1DIR |= 0x01; //配置P1_0的方向为输出
LED1=0;
}
void adc_Init(void)
{
APCFG |=1;
P0SEL |= 0x01;
P0DIR &= ~0x01;
}
/************************************************************
* 名称 get_adc
* 功能 读取ADC通道0电压值
* 入口参数 无
* 出口参数 16位电压值,分辨率为10mV
***************获取ADC通道0电压值************************/
uint16 get_adc(void)
{
uint32 value;
ADCIF = 0; //清ADC 中断标志
//采用基准电压avdd5:3.3V,通道0,启动AD转化
ADCCON3 = (0x80 | 0x10 | 0x00);
while ( !ADCIF )
{
; //等待AD转化结束
}
value = ADCH;
value = value<< 8;
value |= ADCL;
// AD值转化成电压值
// 0 表示 0V ,32768 表示 3.3V
// 电压值 = (value*3.3)/32768 (V)
value = (value * 330);
value = value >> 15; // 除以32768
// 返回分辨率为0.01V的电压值
return (uint16)value;
}
/**********串口通信初始化************************/
void initUART0(void)
{
PERCFG = 0x00;
P0SEL = 0x3c;
U0CSR |= 0x80;
U0BAUD = 216;
U0GCR = 10;
U0UCR |= 0x80;
UTX0IF = 0; // 清零UART0 TX中断标志
EA = 1; //使能全局中断
}
/*************************************************
* 函数名称:inittTimer1
* 功 能:初始化定时器T1控制状态寄存器
******************定时器初始化*****************************/
void inittTimer1()
{
CLKCONCMD &= 0x80; //时钟速度设置为32MHz
T1CTL = 0x0E; // 配置128分频,模比较计数工作模式,并开始运行
T1CCTL0 |= 0x04; //设定timer1通道0比较模式
T1CC0L =50000 & 0xFF; // 把50000的低8位写入T1CC0L
T1CC0H = ((50000 & 0xFF00) >> 8); //把50000的高8位写入T1CC0H
T1IF=0; //清除timer1中断标志(同IRCON &= ~0x02)
T1STAT &= ~0x01; //清除通道0中断标志
TIMIF &= ~0x40; //不产生定时器1的溢出中断
//定时器1的通道0的中断使能T1CCTL0.IM默认使能
IEN1 |= 0x02; //使能定时器1的中断
EA = 1; //使能全局中断
}
/***********************************************************
* 函数名称:UART0SendByte
* 功 能:UART0发送一个字节
* 入口参数:c
* 出口参数:无
* 返 回 值:无
************************************************************/
void UART0SendByte(unsigned char c)
{
U0DBUF = c; // 将要发送的1字节数据写入U0DBUF
while (!UTX0IF) ; // 等待TX中断标志,即U0DBUF就绪
UTX0IF = 0; // 清零TX中断标志
}
/**************************************************************
* 函数名称:UART0SendString
* 功 能:UART0发送一个字符串
* 入口参数:*str
* 出口参数:无
* 返 回 值:无
**********************************************************/
void UART0SendString(unsigned char *str)
{
while(*str != '