📄 temperture.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 + -