毕业论文-基于DS18B20数字温度传感器的数字温度计设计 下载本文

;写DS18B20的子程序,写一个字节 WRITE_1820:

MOV R2,#8 ;一共8位数据 CLR C WR1:

CLR P2.4 ;写开始至少1us低电平,此处约12us MOV R3,#5 ;在写开始15us之前要读入数据,也即在写\时要在启动后15us内 DJNZ R3,$ ;拉高数据线,而写\还是\,此处12us后数据线拉高(写\时) RRC A

MOV P2.4,C MOV R3,#25 ;延时15us-60us让DS18B20采样数据线,此处延时约51us DJNZ R3, ;注意写\过程总持续时间要为60us-120us,开始延时

12us,这里延时51us,总共约63us

SETB P2.4 NOP

DJNZ R2,WR1 ;8位数据是否写完 SETB P2.4 RET

;读DS18B20的子程序,从DS18B20中读出两个字节的温度数据 READ_1820:

MOV R4,#2 ;将温度高位和低位从DS18B20中读出 MOV R1,#29H ;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H) RE1:

MOV R2,#8 ;数据一共有8位 RE2: CLR C SETB P2.4 NOP

NOP ;读开始低电平延时至少1us,这里延时2us CLR P2.4 NOP NOP NOP

SETB P2.4 ;设为数据输入 MOV R3,#5 ;延时10us DJNZ R3,$ MOV C,P2.4 ;读与写一样,启动后15us之前读入数据,这里延时13us

后读入数据

MOV R3,#25 ;延时50us,保证读总过程持续60us,这里总过程约63us DJNZ R3,$ RRC A

DJNZ R2,RE2 ;8位数据是否读完? MOV @R1,A DEC R1 ;读完存缓冲区,缓冲区地址减1

13

DJNZ R4,RE1 ;两字节温度值是否读完,读完则返回,否则继续 RET ;显示子程序 DISPLAY: MOV P3,#0FFH

MOV A,29H ;将29H中的十六进制数转换成10进制 MOV B,#10 ;16进制/10=10进制 DIV AB

MOV B_BIT,A ;十位在a MOV A_BIT,B ;MOV A,R0 ;JNB ACC.3,DL1

MOV C_BIT,#5 AJMP DL2 DL1:

MOV C_BIT,#0 DL2:

MOV DPTR,#NUMTAB ;MOV R0,#2 S1:MOV R1,#50

S2:MOV A,C_BIT ;MOVC A,@A+DPTR ;MOV P3,A ;CLR P1.2 ;CLR P1.3

ACALL D1MS SETB P1.2 SETB P1.3 MOV P3,#0FFH

MOV A,A_BIT ;MOVC A,@A+DPTR ;MOV P3,A ;CLR P3.7

CLR P1.1 ;ACALL D1MS SETB P1.1 MOV P3,#0FFH

MOV A,B_BIT ;MOVC A,@A+DPTR ;MOV P3,A ;CLR P1.0 ;ACALL D1MS SETB P1.0 MOV P3,#0FFH

个位在b 精度0.5度 指定查表启始地址 取十分位数

查十分位数的7段代码 送出十分位的7段代码 开十分位显示 取个位数

查个位的7段代码 送出个位的7段代码 开个位显示 取十位数

查十位数的7段代码 送出十位的7段代码 开十位显示 14

DJNZ R1,S2 DJNZ R0,S1 RET

;1MS延时(按12MHZ算) D1MS:

MOV R6,#10 L:

MOV R7,#49 DJNZ R7,$ DJNZ R6,L RET

;7段数码管0~9数字的共阳显示代码NUMTAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H END

15