⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temperture.c

📁 温度检测
💻 C
字号:
#include<c8051f000.h>
#define SYSCLK 16000000
#define SAMPLERATE 50000
sfr16   ADC0=0xBE;
sfr16   TMR3RL=0x92;
sfr16   TMR3=0x94;
sbit	P00=P0^0;
long    result;
long	temprature;
int		temp_int;
int		temp_frac;
void SYSCLK_Init(void);
void ADC_Init();
void PORT_Init();
void Timer3_Init(unsigned int counts);
void DAC_Init();
//void UART_Init();
void main(void)
{	
    WDTCN=0xde;
	WDTCN=0xad;
	SYSCLK_Init();
	PORT_Init();
	Timer3_Init(50000);
//	UART_Init();
	ADC_Init();
	ADCEN=1;									//ADC转换允许
	DAC_Init();
	EA=1;										//开总中断
	while(1)
	{
		EA=0;									//关总中断
		temprature=result;
		EA=1;
		DAC0L=temprature|0x00FF;
		DAC0H=(temprature|0xFF00)>>8;
		//计算温度(1%100温度)
	   temprature-=41758;
	   temprature=(temprature*100)/154;
	   temp_int=temprature/100;
	   temp_frac=temprature-temp_int*100;
	}

}
void SYSCLK_Init()
{
	OSCICN=OSCICN|0x03;							//启用内部晶振16MHZ
}
void PORT_Init() 
{
	XBR1=0x00;
	XBR2=0x40;
	PRT0CF=0xFF;								//PO推挽输出
}
void ADC_Init()
{
	ADC0CN=0x05;								//ADC0禁止定时器3触发左对齐
	REF0CN=0x07;								//允许温度传感器工作
	AMX0SL|=0x0f;								//选择温度传感器作为AD输入
	ADC0CF=0x81;								//分频系数(为16〕与增益(为2)设置
	EIE2|=0x02;									//允许ADC中断
}
void DAC_Init()
{
	DAC0CN=0x84;								//DAC允许,左对齐方式
}
void Timer3_Init(unsigned int counts)
{
	TMR3CN=0x02;								//停止定时器3,清除TF3,系统时钟为时基
	TMR3RL=~counts+1;							//赋初值 
	TMR3=TMR3RL;
	EIE2&=!0x01;								//开T3中断
	TMR3CN|=0x04;								//启动T3
}
void ADC0_ISR(void) interrupt 15
{
	ADCINT=0;									//清转换结束标志
	result=ADC0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -