#include "ioCC2430.h"
#include "stdio.h"
#define uint unsigned int
#define ConversionNum 20
//定义控制灯的端口
#define led1 P1_0
#define led2 P1_1
void Delay(uint);
void initUARTtest(void);
void InitialAD(void);
void UartTX_Send_String(char *Data,int len);
char adcdata[]=" 0.0V ";
/****************************************************************
*函数功能 :延时 *
*入口参数 :定性延时 *
*返 回 值 :无 *
*说 明 : *
****************************************************************/
void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
}
/****************************************************************
*函数功能 :初始化串口1 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :57600-8-n-1 *
****************************************************************/
void initUARTtest(void)
{
CLKCON &= ~0x40; //晶振
while(!(SLEEP & 0x40)); //等待晶振稳定
CLKCON &= ~0x47; //TICHSPD128分频,CLKSPD不分频
SLEEP |= 0x04; //关闭不用的RC振荡器
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
U0CSR |= 0x80; //UART方式
U0GCR |= 10; //baud_e = 11;
U0BAUD |= 216; //波特率设为57600
UTX0IF = 1;
U0CSR |= 0X40; //允许接收
IEN0 |= 0x84; //开总中断,接收中断
}
/****************************************************************
*函数功能 :初始化ADC *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :参考电压AVDD,转换对象是1/3AVDD *
****************************************************************/
void InitialAD(void)
{
//P1 out
P1DIR = 0x03; //P1控制LED
led1 = 1;
led2 = 1; //关LED
ADCH &= 0X00; //清EOC标志
ADCCON3=0xbf; //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
//14位分辨率
ADCCON1 = 0X30; //停止A/D
ADCCON1 |= 0X40; //启动A/D
}
/****************************************************************
*函数功能 :串口发送字符串函数 *
*入口参数 : data:数据 *
* len :数据长度 *
*返 回 值 :无 *
*说 明 : *
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void main(void)
{
char temp[2];
float num;
initUARTtest(); //初始化串口
InitialAD(); //初始化ADC
led1 = 1;
while(1)
{
if(ADCCON1>=0x80)
{
led1 = 1; //转换完毕指示
temp[1] = ADCL;
temp[0] = ADCH;
ADCCON1 |= 0x40; //开始下一转换
temp[1] = temp[1]>>2;
temp[1] |= temp[0]<<6;
temp[0] = temp[0]>>2; //数据处理
temp[0] &= 0x3f;
num = (temp[0]*256+temp[1])*3.3/8192; //有一位符号位,取2^13;
num /= 2;
//定参考电压为3.3V。14位精确度
adcdata[1] = (char)(num)%10+48;
//adcdata[2] = '.';
adcdata[3] = (char)(num*10)%10+48;
UartTX_Send_String(adcdata,6); //串口送数
//包括空格
Delay(30000);
led1 = 0; //完成数据处理
Delay(30000);
}
}
}