作业帮 > 综合 > 作业

单片机18B20传感器测温问题

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/27 22:48:15
单片机18B20传感器测温问题
小弟写了一段18B20温度测试然后用数码管显示的程序,使用STC12C2052AD单片机,数码管A段接于P1.7,DP段接于P1.0,其余依次,位选为P3.2,3.3,3.4,3.5.现在是仿真无问题,但接入实际电路后度取出的温度取整后全部为255,即FF,显示出来的全都是-1,求教诸位.
附代码.
\x05LED1 EQU P3.2
\x05LED2 EQU P3.3
\x05LED3 EQU P3.4
\x05LED4 EQU P3.5
\x05DQ EQU P3.7
\x05ORG 0000H
\x05LJMP MAIN
\x05ORG 0200H
MAIN:
\x05MOV 30H,#000H
\x05MOV 31H,#000H
\x05LOOP:
\x05
\x05LCALL RST18B20
\x05MOV A,#0CCH
\x05LCALL WR18B20
\x05MOV A,#44H
\x05LCALL WR18B20
\x05LCALL RST18B20
\x05MOV A,#0CCH
\x05LCALL WR18B20
\x05MOV A,#0BEH
\x05LCALL WR18B20
\x05LCALL READTEMPER
\x05LCALL DISP_NUM
\x05LJMP LOOP
DISP_NUM:
\x05MOV R0,#0FFH
\x05MOV A,031H
\x05JNB ACC.7,DISP_CONT_1;判断符号位
\x05MOV R0,#0FDH
\x05;若为负则取绝对值
\x05MOV R2,31H
\x05MOV A,#000H
\x05CLR C
\x05SUBB A,R2
\x05DISP_CONT_1:
\x05MOV DPTR,#NUM_TAB
\x05;输出温度标号
\x05MOV P1,#0FFH
\x05ORL P3,#03CH
\x05CLR LED4
\x05MOV P1,#0E5H
\x05LCALL DELAY3000U
\x05;输出个位
\x05MOV P1,#0FFH
\x05ORL P3,#03CH
\x05CLR LED3
\x05MOV B,#00AH
\x05DIV AB
\x05MOV R1,A
\x05MOV A,B
\x05MOVC A,@A+DPTR
\x05MOV P1,A
\x05LCALL DELAY3000U
\x05;输出十位
\x05MOV P1,#0FFH
\x05ORL P3,#03CH
\x05CLR LED2
\x05MOV A,R1
\x05MOVC A,@A+DPTR
\x05MOV P1,A
\x05LCALL DELAY3000U
\x05;输出符号位
\x05MOV P1,#0FFH
\x05ORL P3,#03CH
\x05CLR LED1
\x05MOV P1,R0
\x05LCALL DELAY3000U
\x05RET
RST18B20:
;传感器复位
\x05SETB DQ
\x05NOP
\x05;拉低总线480us
\x05CLR DQ
\x05MOV R0,#0EFH
\x05DJNZ R0,$
\x05MOV R0,#0EFH
\x05DJNZ R0,$
\x05NOP
\x05;释放总线
\x05SETB DQ
\x05;等待低电平信号回应50ms
\x05WAITTING:
\x05MOV R0,#25H
\x05JNB DQ,DSR3
\x05DJNZ R0,WAITTING
\x05;显示横线,表示18B20没有回应
\x05MOV P1,#0FDH
\x05CLR LED4
\x05CLR LED3
\x05CLR LED2
\x05CLR LED1
\x05;等待超时,重新进行复位
\x05LJMP RST18B20
\x05DSR3:
\x05MOV R0,#065H
\x05DJNZ R0,$
\x05SETB DQ
\x05MOV P1,#0FFH
\x05SETB LED4
\x05SETB LED3
\x05SETB LED2
\x05SETB LED1
\x05RET
READTEMPER:
\x05MOV R0,#030H
\x05MOV R7,#002H
\x05READBYTE:
\x05MOV R6,#008H
\x05READBIT:
\x05CLR C
\x05CLR DQ
\x05NOP
\x05NOP
\x05NOP
\x05SETB DQ
\x05MOV R5,#009H
\x05DJNZ R5,$
\x05MOV C,DQ
\x05MOV R5,#017H
\x05DJNZ R5,$
\x05RRC A
\x05DJNZ R6,READBIT
\x05MOV @R0,A
\x05INC R0
\x05DJNZ R7,READBYTE
\x05;将读取的温度整数部分提取并暂存回31H
\x05MOV A,030H
\x05ANL A,#0F0H
\x05SWAP A
\x05MOV R0,A
\x05MOV A,031H
\x05ANL A,#00FH
\x05SWAP A
\x05ORL A,R0
\x05MOV 31H,A
\x05RET
WR18B20:
\x05MOV R0,#008H
\x05CLR C
\x05WR1:
\x05CLR DQ
\x05MOV R1,#006H
\x05DJNZ R1,$
\x05RRC A
\x05MOV DQ,C
\x05MOV R1,#023
\x05DJNZ R1,$
\x05SETB DQ
\x05NOP
\x05DJNZ R0,WR1
\x05SETB DQ
\x05RET
DELAY3000U:
\x05MOV R4,#7
\x05Y3:
\x05MOV R5,#216
\x05DJNZ R5,$
\x05DJNZ R4,Y3
\x05RET
NUM_TAB:
\x05DB 003H,09FH,025H,00DH,099H,049H,041H,01FH,001H,009H
\x05END
怕没人回答,所以少悬赏,
好吧,我在说详细点,P1连接四位七段数码管,P3.7连接的是传感器的数据端.晶振12MHZ,而且据我所知STC单片机初始化后内部存储单元均为00H,那么FFH应该是从哪里获得的,电路为印刷电路板,经过飞针测试.
单片机18B20传感器测温问题
DS18B20的操作延时量是调试的重点,所以你这样提问没人能回答,因为不知道你用什么频率的晶振,如果你的程序是AT系列单片机的程序,你可以把延时量加大4-5倍试试