方案给你,不知是否有用。
原理图说明:因为AT89C51的I/O口高电平驱动能力不足,故加了R3。
R1选择问题,假如你的测量的温度多数情况下在T附近,则R1就取在T度时热敏电阻的阻值,因为这样可以使你的ADC值在128上下摆动。当然也可以取其他值,我用的就是25度时的值,因为厂家会给出25度时的热敏电阻的阻值,这个值比较准确,而且一般为整数,在电阻的系列值中容易找到R1的值,我用的热敏电阻是R25=10K的,所以R1用了10K的精密电阻(1%)。热敏电阻我用的是3%的NTC电阻。转换值与温度的关系你用热敏电阻的公式推一下就可以得到。还有该方案的测温范围不是很宽,你可以尝试用恒定电流加在热敏电阻上的方法,只是uA级的恒流源不好做,因为该方案能满足我的要求,故没有做其他尝试。
;--------------------------------------------------------------------
; 程序名称: ∑-△AD 转换程序
; 输入条件: (无)
; 输出条件: A=8位ADC结果
; 影响资源: A、PSW、R6、R7
;--------------------------------------------------------------------
ADCProg:
SETB ADC
MOV R6, #2 ;为了正确跟踪输入电压,采样连续采样两次,舍去第一次的值
MOV R7, #0
AD_Start:
CLR A ;ADC输出=0
AD_Loop:
MOV C, ADC
MOV ADC_CON, C
JC AD_Count
DEC A ;ADC输出减1
AD_Count:
CALL Delay_15us
DJNZ R7, AD_Loop ;采样256次
DJNZ R6, AD_Start ;循环2次
SETB AD_CON
RET
;====================================================================
;15us延迟
Delay_15us:
MOV R4, #6
DJNZ R4, $
RET
此主题相关图片如下:
发表时间:2003年7月21日11:27:26