下面是我的源程序,纳闷的是怎么也调不过 请高手看一下,本人感激不尽啊
DQ BIT P1.7 ;数据总线 FLAG1 BIT F0 TEMPER_L EQU 29H ;温度低位 TEMPER_H EQU 28H ;温度高位 A_RIT EQU 35H B_BIT EQU 36H
ORG 0000H LJMP MAIN ORG 0100H
MAIN:LCALL INT18B20 LCALL RECON LCALL GETEM LJMP CHANGE?
//*****1820复位时序********// INT18B20:SETB DQ ;拉高 NOP CLR DQ ;拉低 MOV R0,#0FBH TSR1:DJNZ R0,TSR1 ;延时500us SETB DQ MOV R0,#55H TSR2:JNB DQ,TSR3 ;p1.7低则转移 DJNZ R0,TSR2 TSR3:SETB FLAG1 ;存在则把标志位置位 CLR P0.5 AJMP TSR5 TSR4:CLR FLAG1 ;不存在则清零 LJMP TSR7 TSR5:MOV R0,#06BH TSR6:DJNZ R0,TSR6 ;延时 TSR7:SETB DQ ;最后拉高 RET
RECON:JB FLAG1,RECON RET RECON1:MOV A,#0CCH LCALL WRITE MOV A,#4EH LCALL WRITE MOV A,#7DH LCALL WRITE MOV A,#00H LCALL WRITE MOV A,#1FH LCALL WRITE RET
GETEM: SETB DQ LCALL INT18B20 JB FLAG1,TSS2 RET TSS2: MOV A,#0CCH LCALL WRITE MOV A,#44H LCALL WRITE LCALL INT18B20 MOV A,#0CCH LCALL WRITE MOV A,#0BEH LCALL WRITE LCALL READ RET
WRITE:MOV R2,#8 CLR C WR1:CLR DQ MOV R3,#7 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#22 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET
READ:MOV R4,#2 MOV R1,#29H RE00: MOV R2,#8 RE01:CLR C NOP NOP SETB DQ NOP NOP CLR DQ MOV R3,#3 DJNZ R3,$ SETB DQ NOP NOP NOP NOP MOV C,DQ MOV R3,#1EH DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET
CHANGE:MOV A,29H MOV C,28H.0 RRC A MOV C,28H.1 RRC A MOV C,28H.2 RRC A MOV C,28H.3 RRC A MOV 29H,A CLR P0.5 LCALL DISPLAY CLR P0.5 LJMP MAIN
//****数码管显示子程序*******// DISPLAY:MOV A,29H MOV B,#10 DIV AB MOV B_BIT,A ;存十位 MOV A_RIT,B ;存个位 MOV DPTR,#TAB MOV R0,#4 DP11:MOV R1,#250 ;显示1000次 DPLOP:MOV A,A_RIT MOVC A,@A+DPTR;查表 MOV P0,A ;开个位断码 MOV A,#0FBH MOV P1,A ;开位码 LCALL DIMS ;延时 MOV A,B_BIT MOVC A,@A+DPTR MOV P0,A MOV A,#07FH MOV P0,A DJNZ R1,DPLOP DJNZ R0,DP11 RET
DIMS: MOV R6,#4 DL:MOV R7,#123 DL1:DJNZ R7,DL1 DJNZ R6,DL ;延时1ms子程序 RET TAB : DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
|