1、李曙英李曙英 2015. 2.282015. 2.28无线温度检测实例:协调器建立网络,终端节点加入网络,终端节点实例:协调器建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收周期性的采集温度数据并发送给协调器,协调器将收到的温度值用串口送到的温度值用串口送PCPC机显示机显示与上个实例的区别?与上个实例的区别?- 3 -ADC CC2530的的ADC支持多达支持多达14位的模拟数字转换,具有多达位的模拟数字转换,具有多达12位的有效数位的有效数字位。字位。 它包括一个模拟多路转换器,具有多达它包括一个模拟多路转换器,具有多达8个各自可配置的通道,一个参个各自可
2、配置的通道,一个参考电压发生器。转换结果通过考电压发生器。转换结果通过DMA写入存储器写入存储器。 ADC特征特征 ADC输入输入 ADC转换转换- 4 -ADC特征特征 可选的抽取率,设置了可选的抽取率,设置了712位的分辨率。位的分辨率。 8个独立的输入通道,可接收单端或差分信号。个独立的输入通道,可接收单端或差分信号。 参考电压可选为内部单端、外部单端、外部差分或参考电压可选为内部单端、外部单端、外部差分或AVDD5。 产生中断请求。产生中断请求。 转换结束时的转换结束时的DMA触发。触发。 温度传感器输入。温度传感器输入。 电池测量功能。电池测量功能。- 5 -ADCADC输入输入 A
3、DCADC的输入是通过的输入是通过端口端口0 0来来实现的。输入引脚实现的。输入引脚AIN0-AIN7AIN0-AIN7是连接到是连接到ADCADC的。的。ADCADC输输入有两种配置:单端输入和差分输入入有两种配置:单端输入和差分输入 单端电压输入单端电压输入AIN0AIN0到到AIN7AIN7以通道号码以通道号码0 0到到7 7表示。表示。 通道号码通道号码8 8到到1111表示差分输入,由表示差分输入,由AIN0-1AIN0-1、AIN2-3AIN2-3、AIN4-5AIN4-5和和AIN6-7AIN6-7组成。组成。 通道号码通道号码1212到到1515分别表示分别表示GNDGND、温
4、度传感器和、温度传感器和AVDD5/3AVDD5/3。 以上输入方式在寄存器以上输入方式在寄存器ADCCON2ADCCON2和寄存器和寄存器ADCCON3ADCCON3中详细配置。中详细配置。 - 6 - ADC输入输入 ADCCON2寄存器寄存器-定义定义ADC的序列转换的序列转换位位名称名称复位复位R/W描述描述7:6SREF1:000R/W选择参考电压用于序列转换选择参考电压用于序列转换00:内部参考电压:内部参考电压01:AIN7引脚上的外部参考电压引脚上的外部参考电压10:AVDD5引脚引脚11:AIN6-AIN7差分输入外部参考电压差分输入外部参考电压5:4SDIV01R/W为包含
5、在转换序列内的通道设置抽取率,抽取率也决定完成为包含在转换序列内的通道设置抽取率,抽取率也决定完成转换需要的时间和分辨率转换需要的时间和分辨率00:64抽取率(抽取率(7位有效数字位)位有效数字位)01:128抽取率(抽取率(9位有效数字位)位有效数字位)10:256抽取率(抽取率(10位有效数字位)位有效数字位)11:512抽取率(抽取率(12位有效数字位)位有效数字位)3:0SCH0000R/W序列通道选择,选择序列结束,一个序列可以是从序列通道选择,选择序列结束,一个序列可以是从AIN0到到AIN7(SCH=7)也可以从差分输入)也可以从差分输入AIN0-AIN1到到AIN6-AIN7(
6、8=SCH=11)。对于其它设置,只能执行单个转换。)。对于其它设置,只能执行单个转换。当读取的时侯,这些位将代表有转换进行的通道号码。当读取的时侯,这些位将代表有转换进行的通道号码。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND1101:正电压参考:正电压参考1110:温度传感器:温度传感器1111:VDD/3- 7 -ADC输入输入 ADCCON3ADCCON3寄存器
7、寄存器-定义定义ADCADC单个值转换单个值转换位位名称名称复位复位R/W描述描述7:6EREF1:000R/W选择用于额外转换的参考电压选择用于额外转换的参考电压00:内部参考电压:内部参考电压01:AIN7引脚上的外部参考电压引脚上的外部参考电压10:AVDD5引脚引脚11:AIN6-AIN7差分输入外部参考电压差分输入外部参考电压5:4EDIV00R/W设置用于额外转换的抽取率。抽取率也决定可完成转换需设置用于额外转换的抽取率。抽取率也决定可完成转换需要的时间和分辨率要的时间和分辨率00:64抽取率(抽取率(7位有效数字位)位有效数字位)01:128抽取率(抽取率(9位有效数字位)位有效
8、数字位)10:256抽取率(抽取率(10位有效数字位)位有效数字位)11:512抽取率(抽取率(12位有效数字位)位有效数字位)3:0ECH0000R/W单个通道选择。选择写单个通道选择。选择写ADCCON3触发的单个转换所在的触发的单个转换所在的通道号码。当单个转换完成,该位自动清除。通道号码。当单个转换完成,该位自动清除。0000:AIN00001:AIN10010:AIN20011:AIN30100:AIN40101:AIN10110:AIN60111:AIN71000:AIN0-AIN11001:AIN2-AIN31010:AIN4-AIN51011:AIN6-AIN71100:GND
9、1101:正电压参考:正电压参考1110:温度传感器:温度传感器1111:VDD/3/单次转换单次转换, ,参考电压为电源电压,对参考电压为电源电压,对P0.7P0.7进行采样进行采样 1212位分辨率位分辨率ADCCON3=0 xb7;ADCCON3=0 xb7;- 8 -ADC输入输入 除了输入引脚除了输入引脚AIN0-AIN7AIN0-AIN7,片上温度传感器的输出也可以选择作为,片上温度传感器的输出也可以选择作为ADCADC的输入,的输入,用于温度测量。通过配置寄存器用于温度测量。通过配置寄存器TR0TR0寄存器和寄存器和ATESTATEST寄存器可以获得片上温度寄存器可以获得片上温度
10、 TR0TR0寄存器寄存器位位名称名称复位复位R/W描述描述7:1-0000000R0保留保留0ADCTM0R/W设置为设置为1来连接温度传感器到来连接温度传感器到SOC_ADC。也可参见也可参见ATEST寄存器描述来使能温度寄存器描述来使能温度传感器传感器- 9 -ADC输入输入 除了输入引脚除了输入引脚AIN0-AIN7AIN0-AIN7,片上温度传感器的输出也可以选择作为,片上温度传感器的输出也可以选择作为ADCADC的输入,的输入,用于温度测量。通过配置寄存器用于温度测量。通过配置寄存器TR0TR0寄存器和寄存器和ATESTATEST寄存器可以获得片上温度寄存器可以获得片上温度 ATE
11、STATEST寄存器寄存器位位名称名称复位复位R/W描述描述7:6-00R0保留保留5:0ATEST_CTRL5:0000000R/W控制模拟测试模式:控制模拟测试模式:000000:禁用:禁用000001:使能温度传感器。其它值保留:使能温度传感器。其它值保留- 10 -ADC转换转换 ATESTATEST寄存器寄存器ADCADC的转换分为的转换分为ADCADC序列转换和序列转换和ADCADC单个转换。单个转换。ADCADC执行一系列的转执行一系列的转换,并把转换结果通过换,并把转换结果通过DMADMA移动到存储器,不需要任何移动到存储器,不需要任何CPUCPU的干预的干预 ADCADC序列
12、转换与序列转换与APCFGAPCFG寄存器的设置有关,寄存器的设置有关,APCFGAPCFG为为8 8位模拟输入的位模拟输入的I/OI/O引脚设置,引脚设置,如果模拟如果模拟I/OI/O使能,每一个通道正常情况下应是使能,每一个通道正常情况下应是ADCADC序列的一部分。如果相应的序列的一部分。如果相应的模拟模拟I/OI/O被禁用,将启用差分输入,处于差分的两个引脚必须在被禁用,将启用差分输入,处于差分的两个引脚必须在APCFGAPCFG寄存器中寄存器中设置为模拟输入引脚。设置为模拟输入引脚。 ADCCON2.SCHADCCON2.SCH寄存器位用于定义一个寄存器位用于定义一个ADCADC序列
13、转换,它来自序列转换,它来自ADCADC输入。如果输入。如果ADCCON2.SCHADCCON2.SCH设置为一个小于设置为一个小于8 8的值,转换序列来自的值,转换序列来自AIN0-AIN7AIN0-AIN7的每个通道上;的每个通道上;当当ADCCON2.SCHADCCON2.SCH设置为一个在设置为一个在8 8和和1212之间的值,序列包括差分输入;当之间的值,序列包括差分输入;当ADCCON2.SCHADCCON2.SCH大于或等于大于或等于1212,为单个,为单个ADCADC转换。转换。- 11 -ADC转换转换 除了序列转换,每个通道都可以进行除了序列转换,每个通道都可以进行ADCA
14、DC单个转换,单个转换,ADCADC单个转换通过配置寄存单个转换通过配置寄存器器ADCCON3.SCHADCCON3.SCH完成。当通过写完成。当通过写ADCCON3ADCCON3触发的一个单个转换完成时,触发的一个单个转换完成时,ADCADC将产将产生一个中断。生一个中断。 ADCADC的数字转换结果可以通过设置寄存器的数字转换结果可以通过设置寄存器ADCCON1ADCCON1获得。获得。 位位名称名称复位复位R/W描述描述7EOC0R/H0转换结束。当转换结束。当ADCH被获取的时候清除。如果已读取前被获取的时候清除。如果已读取前一数据之前,完成一个新的转换,一数据之前,完成一个新的转换,
15、EOC位仍然为高。位仍然为高。0:转换没有完成:转换没有完成1:转换完成:转换完成6ST0开始转换。读为开始转换。读为1,直到转换完成,直到转换完成0:没有转换正在进行:没有转换正在进行1:开始转换序列:开始转换序列 如果如果ADCCON1.ATAEL=11没有其它序没有其它序列进行转换列进行转换5:4STSEL1:011R/W1启动选择,选择该事件,将启动一个新的转换序列。启动选择,选择该事件,将启动一个新的转换序列。00:P2.0引脚的外部触发引脚的外部触发01:全速,不等待触发器:全速,不等待触发器10:定时器:定时器1通道通道0比较事件比较事件11:ADCCON1.ST=13:2RCT
16、RL1:000R/W控制控制16位随机数发生器。操作完成自动清零。位随机数发生器。操作完成自动清零。00:正常运行:正常运行01:LFSR的时钟一次的时钟一次10:保留:保留11:停止。关闭随机数发生器:停止。关闭随机数发生器1:0-11R/W保留保留/开启开启ADADADCCON1=0 x40;ADCCON1=0 x40;- 12 -ADC转换转换 ADC的数字转换结果存放在寄存器的数字转换结果存放在寄存器ADCH和和ADCL中中 位位名称名称复位复位R/W描述描述7:2ADC5:0000000RADC转换结果低位部分转换结果低位部分1:0-00R0保留保留ADCL ADC数据低位数据低位A
17、DCH ADC数据低高位数据低高位位位名称名称复位复位R/W描述描述7:0ADC13:60 x00RADC转换结构高位部分转换结构高位部分/将转换的结果从将转换的结果从ADC:ADCHADC:ADCH中取出放入到中取出放入到temptemp中中 temp1 = ADCL;temp1 = ADCL;temp0 = ADCH;temp0 = ADCH;- 13 -ADC转换转换 下述内容用于实现任务下述内容用于实现任务描述,描述,将将AVDDAVDD(3.3v3.3v)ADAD转换,通过串口在转换,通过串口在PCPC机显示结机显示结果果 ADAD的初始化的初始化void InitialAD(voi
18、d)void InitialAD(void) /清清EOCEOC标志标志ADCH &= 0X00;ADCH &= 0X00;/P0.7/P0.7端口模拟端口模拟I/OI/O使能使能ADCCFG |= 0X80;ADCCFG |= 0X80;/单次转换单次转换, ,参考电压为电源电压,对参考电压为电源电压,对P07P07进行采样进行采样 1212位分辨位分辨率率ADCCON3=0 xb7;ADCCON3=0 xb7;/停止停止A/DA/DADCCON1 = 0X30;ADCCON1 = 0X30;/启动启动A/DA/DADCCON1 |= 0X40;ADCCON1 |= 0X40; - 14 -
19、ADC转换转换 下述内容用于实现任务下述内容用于实现任务描述,描述,将将AVDD(3.3v)AD转换,通过串口在转换,通过串口在PC机显机显示结果示结果 头文件、宏定义以及函数声明头文件、宏定义以及函数声明#include ioCC2530.h#include ioCC2530.h#define #define uintuint unsigned unsigned intint/定义控制灯的端口定义控制灯的端口#define LED1 P1_0#define LED1 P1_0#define LED2 P1_1#define LED2 P1_1char temp2;char temp2;uin
20、t adc;uint adc;float num;float num;char adcdata= 0.0V ;char adcdata= 0.0V ;/函数声明函数声明void Delay(uint);void Delay(uint);void initUARTtest(void);void initUARTtest(void);void InitialAD(void);void InitialAD(void);void void UartTX_Send_StringUartTX_Send_String(char (char * *Data,intData,int lenlen););- 15
21、 -ADC转换转换 下述内容用于实现任务描述下述内容用于实现任务描述4.D.7,将,将AVDD(3.3v)AD转换,通过串口在转换,通过串口在PC机显示结果机显示结果 主函数部分主函数部分void main(void)void main(void) /P1 /P1控制控制LEDLED P1DIR = 0 x03; P1DIR = 0 x03; / /关关LEDLED LED1 = 1; LED1 = 1; LED2 = 1; LED2 = 1; / /初始化串口初始化串口 initUARTtestinitUARTtest();(); / /初始化初始化ADCADC InitialADIniti
22、alAD();(); while(1) while(1) / /等待等待ADCADC转换完成转换完成 if(ADCCON1&0 x80) if(ADCCON1&0 x80) LED1 = 0; LED1 = 0; temp1 = ADCL; temp1 = ADCL; temp0 = ADCH; temp0 = ADCH; / /初始化初始化ADAD InitialADInitialAD();(); / /开始下一转换开始下一转换 ADCCON1 |= 0 x40; ADCCON1 |= 0 x40; / /adcadc赋值赋值 adcadc |= ( |= (uintuint)temp1;)
23、temp1; adcadc |= ( ( |= ( (uintuint) temp0 )8;) temp0 )=2;=2; if(adc&0 x8000)adc = 0; if(adc&0 x8000)adc = 0; num = adc num = adc* *3.3/8096;3.3/8096; / /定参考电压为定参考电压为3.3V3.3V。1414位精确度位精确度 adcdata1 = (char)(num)%10+48; adcdata1 = (char)(num)%10+48; adcdata3 = adcdata3 = (char)(num(char)(num* *10)%10+
24、48;10)%10+48; / /串口送数包括空格串口送数包括空格 UartTX_Send_String(adcdata,6); UartTX_Send_String(adcdata,6); / /完成数据处理完成数据处理 Delay(30000); Delay(30000); /LED1 /LED1状态改变状态改变 LED1 = LED1; LED1 = LED1; Delay(30000); Delay(30000); Zstack中ADC应用 协调器协调器建立网络,终端节点加入网络,终端节点周期建立网络,终端节点加入网络,终端节点周期性的采集温度数据并发送给协调器,协调器将收到的性的采集
25、温度数据并发送给协调器,协调器将收到的温度值用串口送温度值用串口送PCPC机机显示显示协调器协调器功能功能 :建网,接收数据,向串口发数据:建网,接收数据,向串口发数据终端节点功能:终端节点功能: 无线测温-协调器编程1 1 建网建网2 2 用户任务:事件用户任务:事件1 1: 接收数据接收数据-什么事件?什么事件? SYS_EVENT_MSG SYS_EVENT_MSG下的下的 AF_INCOMING_MSG_CMDAF_INCOMING_MSG_CMD 事件事件2 2:向串口发数据:向串口发数据-什么时候?什么时候? 接收到数据后接收到数据后-事件事件2 2包含包含 在事件在事件1 1内内
26、 无线测温-协调器编程涉及:串口设置、初始化;涉及:串口设置、初始化;-同上例同上例 温度数据存储区温度数据存储区无线测温-协调器编程特殊之处:数据传递一般会用数据包。特殊之处:数据传递一般会用数据包。 特点:命令头特点:命令头 + + 数据数据 + + 命令尾命令尾 用结构体构建数据包用结构体构建数据包本本例中的温度数据:例中的温度数据: structstruct RFRXBUF RFRXBUF unsigned char Head; unsigned char Head; unsigned char value2; unsigned char value2; unsigned char T
27、ail; unsigned char Tail; BUF; BUF;typedeftypedef union h union h uint8 TEMP4; uint8 TEMP4; structstruct RFRXBUF RFRXBUF unsigned char Head; unsigned char Head; unsigned char value2; unsigned char value2; unsigned char Tail; unsigned char Tail; BUF; BUF; TEMPERATURE ;TEMPERATURE ;TEMPERATURE TEMPERAT
28、URE temperaturetemperature; ; / /定义温度数据包存储区定义温度数据包存储区温度数据包在终端、协调器之间传递,温度数据包在终端、协调器之间传递,TEMPERATURE TEMPERATURE 类类要告知协调器、终端要告知协调器、终端-怎么做?怎么做? 加入加入Coordinator.hCoordinator.h、Enddevice.hEnddevice.h中中 无线测温-协调器编程事件事件1 1触发:触发:CoordApp_ProcessEventCoordApp_ProcessEvent任务中任务中 case AF_INCOMING_MSG_CMD: case
29、AF_INCOMING_MSG_CMD: GenericApp_MessageMSGCBGenericApp_MessageMSGCB( ( MSGpktMSGpkt ); ); break; break;无线测温-协调器编程void void GenericApp_MessageMSGCBGenericApp_MessageMSGCB( ( afIncomingMSGPacket_tafIncomingMSGPacket_t * *pktpkt ) ) TEMPERATURE TEMPERATURE temperaturetemperature; ; switch switch ( ( pk
30、tpkt-clusterIdclusterId ) ) case GENERICAPP_CLUSTERID:case GENERICAPP_CLUSTERID: osal_memcpyosal_memcpy(&(&temperature,pkttemperature,pkt-cmd.Datacmd.Data, , sizeofsizeof(temperature);/(temperature);/从消息队列中读数据从消息队列中读数据 HalUARTWriteHalUARTWrite(0,(uint8 (0,(uint8 * *)&)&temperature,sizeoftemperature,
31、sizeof(temperature(temperature);/);/数据送串口数据送串口 break;break; 无线测温-终端编程1 1、加入网络、加入网络-同以前例同以前例2 2、周期性的将温度传感器上的电压转换成数字量、周期性的将温度传感器上的电压转换成数字量温温度值,再用无线发送给协调器度值,再用无线发送给协调器无线测温-终端编程1 1 片内温度传感器片内温度传感器/使使能片内温度传感器能片内温度传感器 ATEST = 0 x01; ATEST = 0 x01;/连连上温度传感器上温度传感器 TR0 |= 0 x01; TR0 |= 0 x01;无线测温-终端编程2 2、ADCA
32、DC ADCIF ADCIF = 0= 0; /; /清除清除ADCADC中断中断 ADCCON3 = (HAL_ADC_REF_115v | ADCCON3 = (HAL_ADC_REF_115v | HAL_ADC_DEC_256 | HAL_ADC_CHN_TEMP);HAL_ADC_DEC_256 | HAL_ADC_CHN_TEMP); while ( !ADCIF while ( !ADCIF );/);/等待等待ADAD转换完成转换完成 ADCIF = 0ADCIF = 0; ; value value = ADCL; = ADCL; / / 读取读取AD AD 值值 value
33、 |= (uint16) ADCH) 8 ;value |= (uint16) ADCH) =4 ; value =4 ;数据发送void void GenericApp_SendTheMessageGenericApp_SendTheMessage( void )( void ) uint8 uint8 tvaluetvalue; ; TEMPERATURE TEMPERATURE temperaturetemperature; ; temperature.BUF.Headtemperature.BUF.Head = &; = &; tvaluetvalue = = readTempread
34、Temp();(); temperature.BUF.valuetemperature.BUF.value0 = 0 = tvaluetvalue / 10 +0; / 10 +0; temperature.BUF.valuetemperature.BUF.value1 = 1 = tvaluetvalue % 10 +0; % 10 +0; temperature.BUF.Tailtemperature.BUF.Tail = C; = C; afAddrType_tafAddrType_t my_DstAddrmy_DstAddr; ; my_DstAddr.addrModemy_DstAd
35、dr.addrMode = ( = (afAddrMode_tafAddrMode_t)Addr16Bit;)Addr16Bit; my_DstAddr.endPointmy_DstAddr.endPoint = GENERICAPP_ENDPOINT; = GENERICAPP_ENDPOINT; my_DstAddr.addr.shortAddrmy_DstAddr.addr.shortAddr = 0 x0000; = 0 x0000; AF_DataRequestAF_DataRequest( &( &my_DstAddrmy_DstAddr, &, &GenericApp_epDes
36、cGenericApp_epDesc, , GENERICAPP_CLUSTERID, GENERICAPP_CLUSTERID, sizeofsizeof(temperature),(temperature), (byte (byte * *)&temperature,)&temperature, & &GenericApp_TransIDGenericApp_TransID, , AF_DISCV_ROUTE, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS AF_DEFAULT_RADIUS ); ); HalLedBlinkHalLedBlink(HAL_LED_1
37、,0,50,500(HAL_LED_1,0,50,500););周期性触发发送事件#define SEND_DATA_EVENT #define SEND_DATA_EVENT 0X01 0X01 /定义事件定义事件 / /启动事件启动事件case ZDO_STATE_CHANGE:case ZDO_STATE_CHANGE: GenericApp_NwkStateGenericApp_NwkState = = ( (devStates_tdevStates_t)()(MSGpktMSGpkt-hdr.statushdr.status);); if ( if ( GenericApp_NwkS
38、tateGenericApp_NwkState = DEV_END_DEVICE ) = DEV_END_DEVICE ) osal_set_eventosal_set_event( (GenericApp_TaskID,SEND_DATA_EVENTGenericApp_TaskID,SEND_DATA_EVENT);); / /周期性工作周期性工作if(events if(events & SEND_DATA_EVENT)& SEND_DATA_EVENT) GenericApp_SendTheMessageGenericApp_SendTheMessage();();osal_start
39、_timerExosal_start_timerEx(GenericApp_TaskID,SEND_DATA_(GenericApp_TaskID,SEND_DATA_EVENT,1000EVENT,1000);); return (events SEND_DATA_EVENT); return (events SEND_DATA_EVENT); 无线测温-终端编程程序结构程序结构传感器的操作为一个文件传感器的操作为一个文件-Sensor.cSensor.c, , 涉及到的名称常量定义涉及到的名称常量定义-Sensor.hSensor.h 无线测温-终端编程Sensor.hSensor.h#
40、#ifndefifndef SENSOR_H SENSOR_H#define SENSOR_H#define SENSOR_H# #include include extern extern int8 int8 readTempreadTemp(void);(void);# #endifendif无线测温-终端编程-Sensor.c#include #include Sensor.hSensor.h #include #include #define HAL_ADC_REF_115v 0X00 /#define HAL_ADC_REF_115v 0X00 /设置参考电压设置参考电压为内部参考电
41、压为内部参考电压 :00 00 (7-6 7-6 位)位)#define HAL_ADC_DEC_256 0X20 /#define HAL_ADC_DEC_256 0X20 /设置抽取率设置抽取率256 256 :10 10 (5-4 5-4 位)位)#define HAL_ADC_CHN_TEMP 0X0e/#define HAL_ADC_CHN_TEMP 0X0e/序列通道选择,序列通道选择,11101110:温度传感器(:温度传感器(3-0 3-0 位)位)无线测温-终端编程-Sensor.cint8 int8 readTempreadTemp(void)(void) static u
42、int16 static uint16 reference_voltagereference_voltage; ; static uint8 static uint8 bCalibratebCalibrate = TRUE; = TRUE; uint16 value; uint16 value; int8 temp; int8 temp; ATEST = 0 x01;ATEST = 0 x01; TR0 |= 0 x01; TR0 |= 0 x01; ADCIF = 0; / ADCIF = 0; /清除清除ADCADC中断中断 ADCCON3 = (HAL_ADC_REF_115v | HA
43、L_ADC_DEC_256 | ADCCON3 = (HAL_ADC_REF_115v | HAL_ADC_DEC_256 | HAL_ADC_CHN_TEMP);HAL_ADC_CHN_TEMP); while ( !ADCIF );/while ( !ADCIF );/等待等待ADAD转换转换完成完成ADCIF = 0;ADCIF = 0; value = ADCL; / value = ADCL; / 读取读取AD AD 值值 value |= (uint16) ADCH) 8 ;value |= (uint16) ADCH) =4 ; value =4 ;if( if( bCalibratebCalibrate ) ) / /记录第一次读取的温度值,为后面校正用记录第一次读取的温度值,为后面校正用 reference_voltagereference_voltage = value; = value; bCalibratebCalibrate = FALSE ; = FALSE ; temp = 22 + ( (value - temp = 22 + ( (value - reference_voltagereference_voltage)/4 );)/4 ); return temp; return temp;