ORG 0000H
DQ EQU P1.6
AJMP MAIN
ORG 0030H
MAIN:LCALL REST1820
MOV A,#0CCH
LCALL WRITE1820
MOV A,#44H
LCALL WRITE1820 ;奶奶的害的老子以为写时序错了原来 忘了加?
LCALL REST1820
LCALL DELAY1
MOV A,#0CCH
LCALL WRITE1820
MOV A,#0BEH
LCALL WRITE1820
LCALL READ1820
MOV P0,A
AJMP MAIN
REST1820:SETB DQ ;总线拉高
NOP
NOP ;给硬件反应时间
CLR DQ ;拉低总线
LCALL DELAY1 ;延时500微秒,符合时序要求
SETB DQ ;拉高总线
NOP
NOP ;等待稳定
JB DQ,$ ;应答
LCALL DELAY2 ;延时200微秒 ,满足时需要求
SETB DQ ;拉高
NOP
NOP ;结束
NOP
RET
WRITE1820: MOV R2,#8
WRITE: SETB DQ
NOP
NOP
CLR DQ ;开始延时15微秒
MOV R1,#6
DJNZ R1,$
RRC A
MOV DQ,C
MOV R1,#20
DJNZ R1,$ ;延时45微秒
NOP
NOP
NOP
NOP
DJNZ R2,WRITE
RET
READ1820:
MOV R2,#8
READ: SETB DQ
NOP
NOP
CLR DQ
NOP ;***********************************************************************************************
NOP ;* *
SETB DQ ;* 晶振: f=11.0592MHZ *
MOV R1,#4 ;* *
DJNZ R1,$ ;* 结论:只要按手册编程,无所不能 *
MOV C,DQ ;* 单片机:stc89c52rc40c-pdip40 *
RRC A ;* *
MOV R1,#20 ;* *
DJNZ R1,$ ;* 单总线温度传感器:达拉斯18b20 *
DJNZ R2,READ ;* *
RET ;* 接口:p1.6 *
DELAY1:MOV R1,#229 ;* *
DJNZ R1,$ ;* 电源:+5v *
RET ;* *
DELAY2:MOV R1,#100 ;* 日期:2015年五月 *
DJNZ R1,$ ;***********************************************************************************************
RET
END
|