玻璃棉厂家
免费服务热线

Free service

hotline

010-00000000
玻璃棉厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

基于51单片机的DS18b20汇编源程序

发布时间:2020-07-21 18:45:42 阅读: 来源:玻璃棉厂家

;**********************************FLAG1 BIT F0 ;DS18B20存在标志位DQ BIT P1.7TEMPER_L EQU 29HTEMPER_H EQU 28HA_BIT EQU 35HB_BIT EQU 36H;************程序起始******************** ORG 0000H AJMP MAIN ORG 0100H;**************主程序开始************MAIN: LCALL INIT_18B20 ;LCALL RE_CONFIG LCALL GET_TEMPER AJMP CHANGE

;**********DS18B20复位程序*****************INIT_18B20: SETB DQ NOP CLR DQ MOV R0,#0FBH TSR1: DJNZ R0,TSR1 ;延时 SETB DQ MOV R0,#25H TSR2: JNB DQ ,TSR3 DJNZ R0,TSR2 TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在 CLR P2.0 ;二极管指示 AJMP TSR5 TSR4: CLR FLAG1 LJMP TSR7 TSR5: MOV R0,#06BH TSR6: DJNZ R0,TSR6 TSR7:SETB DQ ;表明不存在 RET;********************设定DS18B20暂存器设定值**************;RE_CONFIG: ;JB FLAG1,RE_CONFIG1 ;RET;RE_CONFIG1: MOV A,#0CCH ;放跳过ROM命令 ;LCALL WRITE_18B20 ;MOV A,#4EH ;LCALL WRITE_18B20 ;写暂存器命令 ;MOV A,#00H ;报警上限中写入00H ;LCALL WRITE_18B20 ;MOV A,#00H ;报警下限中写入00H ; LCALL WRITE_18B20 ;MOV A,#1FH ;选择九位温度分辨率 ; LCALL WRITE_18B20 ; RET;*****************读转换后的温度值****************GET_TEMPER: SETB DQ LCALL INIT_18B20 JB FLAG1,TSS2 RET ;若不存在则返回 TSS2: MOV A,#0CCH ;跳过ROM LCALL WRITE_18B20 MOV A,#44H ;发出温度转换命令 LCALL WRITE_18B20

LCALL DISPLAY ;延时 LCALL INIT_18B20 MOV A,#0CCH ;跳过ROM LCALL WRITE_18B20 MOV A,#0BEH ;发出读温度换命令 LCALL WRITE_18B20 LCALL READ2_18B20 ;读两个字节的温度 RET;***************写DS18B20程序************WRITE_18B20: MOV R2,#8 CLR C WR1: CLR DQ

MOV R3,#6 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET

;***********读18B20程序,读出两个字节的温度*********READ2_18B20: MOV R4,#2 ;低位存在29 H,高位存在28H

MOV R1,#29H RE00: MOV R2,#8 RE01: CLR C SETB C NOP NOP

CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET;************读出的温度进行数据转换**************

CHANGE: MOV A,29H MOV C,28H.0 ;将28H中的最低位移入C RRC A MOV C,28H.1 RRC A MOV C,28H.2 RRC A MOV C,28H.3 RRC A MOV 29H,A ;setb p2.0 LCALL DISPLAY ;调用数码管显示子程序

; setb P2.0 LJMP MAIN;*******************DISPLAY******DISPLAY: mov a,29H;将29H中的十六进制数转换成10进制 mov b,#10 ;10进制/10=10进制 div ab mov b_bit,a ;十位在a mov a_bit,b ;个位在b mov dptr,#TAB ;指定查表启始地址 mov r0,#4 dpl1: mov r1,#250 ;显示1000次 dplop: mov a,a_bit ;取个位数 MOVC A,@A+DPTR ;查个位数的7段代码 mov p0,a ;送出个位的7段代码 clr p2.5;开个位显示 acall d1ms ;显示1ms setb p2.5 mov a,b_bit ;取十位数 MOVC A,@A+DPTR ;查十位数的7段代码 mov p0,a ;送出十位的7段代码 clr p2.4;开十位显示 acall d1ms ;显示1ms setb p2.4 djnz r1,dplop ;100次没完循环 djnz r0,dpl1 ;4个100次没完循环 ret

;*********************************** D1MS: MOV R7,#80 ;1MS延时(按12MHZ算) DJNZ R7,$ RET;*************************TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

碧莲盛 乌鲁木齐

南昌碧莲盛医院

厦门碧莲盛植发医院怎么样