嵌入式成长轨迹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 }