⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wendu.asm

📁 c语言编的单片机程序
💻 ASM
字号:
	FLAG1   	BIT    F0        ;DS18B20存在标志位
 	DQ      	BIT    P2.2
 	TEMPER_L    EQU   	29H
 	TEMPER_H    EQU   	28H
 	A_BIT      	EQU    35H
 	B_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    P1.2       ;二极管指示
            AJMP   TSR5
TSR4: 		CLR   FLAG1
            LJMP   TSR7
TSR5: 		MOV   R0,#06BH
TSR6: 		DJNZ   R0,TSR6
TSR7:		SETB   DQ          ;表明不存在
            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  p1.2
            LCALL  DISPLAY      ;调用数码管显示子程序
            setb P1.2
            LJMP MAIN
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.6;开个位显示
             acall d1ms ;显示1ms
             setb p2.6
             mov a,b_bit ;取十位数
             MOVC A,@A+DPTR ;查十位数的7段代码
             mov p0,a ;送出十位的7段代码
             clr p2.7;开十位显示
             acall d1ms ;显示1ms
             setb p2.7
             djnz r1,dplop ;100次没完循环
             djnz r0,dpl1 ;4个100次没完循环
             ret

 ;***********************************
D1MS: 			MOV R7,#70  ;1MS延时
             	DJNZ R7,$
            	 RET
 ;*************************
 TAB:         DB 03FH,06H,5BH,4FH,66H,06DH,07DH,07H,07EH,06FH
				END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -