找回密码
 注册
搜索
查看: 879|回复: 0

[讨论] c8051f120片上温度传感器实用的问题

[复制链接]
发表于 2013-6-16 21:55:36 | 显示全部楼层 |阅读模式
//内部温度传感器调试程序//
//ADC0_TEMP.c
#include
#define ADC0START temppage=SFRPAGE;SFRPAGE=0x00;AD0BUSY=1;SFRPAGE=temppage
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
sfr16 PCA0CP0=0xfb;
sfr16 PCA0CP1=0xfd;
sfr16 PCA0CP2=0xe9;
sfr16 PCA0CP3=0xeb;
sfr16 PCA0CP4=0xed;
sfr16 PCA0CP5=0xe1;
sfr16 ADC0VAL=0xbe;
sfr16 ADC0GT=0xc4;
sfr16 ADC0LT=0xc6;
uchar temppage;
bit isnewdata;
uint kk;
float temp;
xdata float t[20];//存放温度检测数据,为20个数据
void adc0_mux(uchar type,uchar source);
void adc0_source(uchar source);
void p3anolog_ini(uchar port);
void HVDA_ini(uchar gaind);
void adc0_ini();
void delay1ms(uint time);
void config();
void adc0_mux(uchar type,uchar source){//type 配置测量方式为差动还是单端输入
//source 为ADC0通道选择(共有9个通道)
        SFRPAGE=0x00;
        AMX0CF=type;
        AMX0SL=source;
}
void adc0_source(uchar source){//ADC0通道选择,为adc0_mux()的简化函数
        SFRPAGE=0x00;
        AMX0SL=source;
}

void adc0_ini(){
        SFRPAGE=0x00;
        ADC0CF=0x80;//ADC0时钟为系统时钟17分频,PGA增益为1
        ADC0CN=0x80;
        /*AD0EN=1,ADC0模块使能
        AD0TM=0,ADC0为连续跟踪模式
        AD0CM1:AD0CM0=00b,为AD0BUSY启动方式
        AD0LJST=0,数据存储格式右对齐,即ADC0H存放12bit高四位*/
        REF0CN&=0x0f;//AD0VRS=0,ADC0参考电压为VREFA
        REF0CN|=0x07;//TEMPE=1,内部温度传感器工作
        /*BIASE=1,偏移产生器工作
        REFBE=1,内部参考电平工作,电路部分须将VREF参考输出(C8051F40的第12管脚)与VREF0(C8051F040的16管脚相连,并最好并联一个4.7uF和0.1uF的旁路电容以电平滤波*/
        adc0_source(9);//选择第9通道,即选择温度信号为AD转换
        EIE2 |= 0x02;        //开ADC0中断
}
void delay1ms(uint time){//延迟1ms
        uint i;
        uint j;
        for (i=0;i19)
                                i=0;//在此设断点,观察程序运行结果
                        delay1ms(100);
                        ADC0START;
                }
        }
}
void ADC0_ISR() interrupt 15{//ADC0中断
        SFRPAGE=0x00;
        AD0INT=0;
        isnewdata=1;
       
}
执行程序后,不管温度变化,ADC0H和ADC0L始终等于0XFF和0X0F,测出的温度始终不变,为什么这样呢?也不知道ADC0H和ADC0L的值正确不?
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 23:19 , Processed in 0.045469 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表