嵌入式成长轨迹48 【Zigbee项目】【CC2430基础实验】【AVDD】

将AD的源设为电源电压,AD参考电压为AV D D ,并将转换得到温度通过串口送至电脑。开始转换黄灯亮绿灯暗,转换完毕绿灯亮黄灯暗。


void InitialAD(void);
函数原型:

 1 void InitialAD(void) 
 2 { 
 3  //P1 out 
 4   P1DIR = 0x03;      //P1 控制LED 
 5  led1 = 1; 
 6  led2 = 1;  //关LED 
 7  
 8   ADCH &= 0X00;    // 清EOC标志  
 9  ADCCON3=0xbf;  //单次转换, 参考电压为电源电压,对 1/3 AVDD进行A/D 转换 
10       //14位分辨率 
11   ADCCON1 = 0X30;    // 停止A/D 
12  
13  ADCCON1 |= 0X40; //启动A/D 
14 } 

函数功能:设 P10,P11 设为输出控制 LED 灯,将 AD转换源设为电源电压,参考电压为电源电压,ADC结果分辨率设为14 位(最高精度),AD模式为单次转换,启动ADC转换。

  1 //main.c
  2 #include "ioCC2430.h"
  3 #define uint unsigned int
  4 
  5 #define ConversionNum 20
  6 //定义控制灯的端口
  7 #define led1 P1_0
  8 #define led2 P1_1
  9 
 10 void Delay(uint);
 11 void initUARTtest(void);
 12 void InitialAD(void);
 13 void UartTX_Send_String(char *Data,int len);
 14 
 15 char adcdata[]=" 0.0V ";
 16 
 17 /****************************************************************
 18 *函数功能 :延时                        *
 19 *入口参数 :定性延时                        *
 20 *返 回 值 :无                            *
 21 *说    明 :                            *
 22 ****************************************************************/
 23 void Delay(uint n)
 24 {
 25     uint i;
 26     for(i=0;i<n;i++);
 27     for(i=0;i<n;i++);
 28     for(i=0;i<n;i++);
 29     for(i=0;i<n;i++);
 30     for(i=0;i<n;i++);
 31 }
 32 
 33 /****************************************************************
 34 *函数功能 :初始化串口1                        *
 35 *入口参数 :无                            *
 36 *返 回 值 :无                            *
 37 *说    明 :57600-8-n-1                        *
 38 ****************************************************************/
 39 void initUARTtest(void)
 40 {
 41     CLKCON &= ~0x40;              //晶振
 42     while(!(SLEEP & 0x40));      //等待晶振稳定
 43     CLKCON &= ~0x47;             //TICHSPD128分频,CLKSPD不分频
 44     SLEEP |= 0x04;                  //关闭不用的RC振荡器
 45 
 46     PERCFG = 0x00;                //位置1 P0口
 47     P0SEL = 0x3c;                //P0用作串口
 48 
 49     U0CSR |= 0x80;                //UART方式
 50     U0GCR |= 10;                //baud_e = 10;
 51     U0BAUD |= 216;                //波特率设为57600
 52     UTX0IF = 1;
 53 
 54     U0CSR |= 0X40;                //允许接收
 55     IEN0 |= 0x84;                //开总中断,接收中断
 56 }
 57     
 58 
 59 /****************************************************************
 60 *函数功能 :初始化ADC                        *
 61 *入口参数 :无                                *
 62 *返 回 值 :无                            *
 63 *说    明 :参考电压AVDD,转换对象是1/3AVDD            *
 64 ****************************************************************/
 65 void InitialAD(void)
 66 {
 67     //P1 out
 68     P1DIR = 0x03;         //P1控制LED
 69     led1 = 1;
 70     led2 = 1;        //关LED
 71 
 72     ADCH &= 0X00;        //清EOC标志    
 73     ADCCON3=0xbd;        //单次转换,参考电压为电源电压,AVDD进行A/D转换
 74                         //14位分辨率
 75     ADCCON1 = 0X30;        //停止A/D
 76 
 77     ADCCON1 |= 0X40;    //启动A/D
 78 
 79 }
 80 
 81 /****************************************************************
 82 *函数功能 :串口发送字符串函数                    *
 83 *入口参数 : data:数据                        *
 84 *        len :数据长度                        *
 85 *返 回 值 :无                                *
 86 *说    明 :                            *
 87 ****************************************************************/
 88 void UartTX_Send_String(char *Data,int len)
 89 {
 90   int j;
 91   for(j=0;j<len;j++)
 92   {
 93     U0DBUF = *Data++;
 94     while(UTX0IF == 0);
 95     UTX0IF = 0;
 96   }
 97 }
 98 
 99 
100 /****************************************************************
101 *函数功能 :主函数                        *
102 *入口参数 :无                            *
103 *返 回 值 :无                            *
104 *说    明 :无                            *
105 ****************************************************************/
106 void main(void)
107 {    
108     char temp[2];
109         float num;
110     initUARTtest();                                 //初始化串口
111     InitialAD();                                    //初始化ADC
112 
113     led1 = 1;
114         led2 = 0;
115     while(1)
116     {
117         if(ADCCON1>=0x80)
118         {
119                         led2 = 0;
120             led1 = 1;              //转换完毕指示
121             temp[1] = ADCL;
122             temp[0] = ADCH;
123             ADCCON1 |= 0x40;          //开始下一转换
124 
125                         temp[1] = temp[1]>>2;           //数据处理
126             temp[1] |= temp[0]<<6;
127 
128                         temp[0] = temp[0]>>2;    
129                         temp[0] &= 0x3f;
130 
131                         num = (temp[0]*256+temp[1])*3.3/2047;
132                         //定参考电压为3.3V。12位精确度
133                         adcdata[1] = (char)(num)%10+48;
134                         //adcdata[2] = '.';
135                         adcdata[3] = (char)(num*10)%10+48;
136     
137             UartTX_Send_String(adcdata,6);    //串口送数
138                                                         //包括空格
139 
140             Delay(30000);
141                         led2 = 1;
142                         led1 = 0;                       //完成数据处理
143                         Delay(30000);      
144                 }
145     }
146 }
原文地址:https://www.cnblogs.com/zeedmood/p/2666927.html