?? 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 + -