#include "temperature.h"
#define HAL_ADC_REF_125V 0x00
#define ADC_12_BIT 0x30
#define ADC_TEMP_SENS 0x0e
#define ADC_TO_CELSIUS(ADC_VALUE) ((ADC_VALUE>>4)-334);
void Temperature_Init(void)
{
TR0 |= 0x01;
ATEST |= 0x01;
}
unsigned int Read_Temperature(void)
{
unsigned int value;
unsigned char tmpADCCON3 = ADCCON3;
ADCIF = 0;
ADCCON3 = (HAL_ADC_REF_125V|ADC_12_BIT|ADC_TEMP_SENS);
while(!ADCIF);
value = ADCL>>2;
value |= ((unsigned int )ADCH)<<6;
ADCCON3 = tmpADCCON3;
return ADC_TO_CELSIUS(value);
}
//头文件=================================
#ifndef __TEMPERATURE_H__
#define __TEMPERATURE_H__
#include "all.h"
void Temperature_Init(void);
unsigned int Read_Temperature(void);
#endif
//例子==============================
#include "all.h"
#include "led.h"
#include "timer.h"
#include "uart.h"
#include "adc.h"
#include "temperature.h"
typedef unsigned char uint8;
typedef unsigned short int uint16;
void DelayMS(uint16 msec)
{
uint16 i,j;
for (i=0; i<msec; i++)
for (j=0; j<536; j++);
}
void main(void)
{
char p_buf[]="hello world\r\n";
char buf[30];
unsigned int tempvalue;
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
InitGPIO();
Uart_Init(UART_BAUDRATE_115200);
Uart_String(p_buf);
Temperature_Init();
while(1) //死循环
{
tempvalue = Read_Temperature();
sprintf(buf,"T=%03dC\r\n",tempvalue);
Uart_String(buf);
DelayMS(1000);
}
}
QQ图片20180831104734.png
网友评论