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

📄 wendu.txt

📁 基于单片机c51的开发程序,温度采集系统,开发
💻 TXT
字号:
	DTH   EQU   20H  	     ;温度值高八位 
	DTL   EQU   21H  	     ;温度值低八位 
	NUM1  EQU   22H  	     ;第一位显示字,十位 
	NUM2  EQU   23H  	     ;第二位显示字,个位 
	NUM3  EQU   24H  	     ;第三位显示字,小数位 
	TEMP  EQU   25H 
	DQ    BIT   P1.7             ;定义18B20数字输入输出
 ;============主函数================== 
      	ORG    0000H 
      	AJMP   MAIN 
      	ORG    0100H 
MAIN: 	MOV    DPTR,#07100H
       	MOV    A,#3H
      	MOVX   @DPTR,A               
loop: 	ACALL  RD_REG 
     	ACALL  COUNT     
     	MOV    R1,#10 
LOOPDP: ACALL  DISP 
      	DJNZ   R1,LOOPDP 
      	ACALL  CONVERT         
      	SJMP   loop
 ;初始化18B20
BE_18B20: CLR   C 
          CLR   C 
          CLR   DQ                  ;发送复位脉冲 
          MOV   R5,#60 
          MOV   R7,#105             ;延时500us 
          ACALL DEL5us              ;延时子程序,延时时长为(R7)*5us+5us 
          SETB  DQ                  ;释放总线,等到待大约70us 
          MOV   R7,#11              ;等待 
          ACALL DEL5us 
LOOPB:    JNB   DQ,NEXTB1 
          DJNZ  R5,LOOPB 
          SJMP  STOPB               ;复位不成功,C=0,返回 
NEXTB1:   MOV   R7,#73              ;复位成功后延时约1000us,C=1 
          ACALL DEL5us 
          SETB  C 
STOPB:    NOP 
          RET 

 ;---------读字子程序------------- 
 ;读出的字存在RD_WORD中,会对ACC及R6的值产生影向 
RD_Byte: CLR   A 
         MOV   R6,#08H 
LOOPD:   CLR   DQ                  ;读时序开始,至少保持1us 
     	 NOP 
         NOP 
         SETB  DQ                  ;释放数据线,此后的15us内的数据就是我们要的数据 
         MOV   R7,#1  
         ACALL DEL5us 
         MOV   C,DQ 
         RRC   A 
         MOV   R7,#6               ;延时 
         ACALL DEL5us 
         DJNZ  R6,LOOPD 
         RET 
 ;---------写字子程序-------------- 
 ;要写的字在WR_WORD,会对ACC及R6产生影向 
WR_Byte: CLR   C                   ;消除C的影响 
         MOV   R6,#08H 
LOOPW:     
         SETB  DQ 
         RRC   A                   ;无论读写,都是低位在先 
         CLR   DQ                  ;写时序开始 
         MOV   R7,#2 
         ACALL DEL5us              ; DS18B20在15us到60us间进行采样 
         SETB  DQ 
         MOV   DQ,C 
         MOV   R7,#6 
         ACALL DEL5us 
         DJNZ  R6,LOOPW 
         RET 
 ;============其他子函数=========== 
 ;---------读中间寄存器------------ 
 ;会对R6产生影向,同时也会对相关寄存器产生影向 
 ;只读前两个寄存器 
RD_REG:  ACALL BE_18B20           ;芯片复位        
         MOV   A,#0CCH            ;ROM配对  
         ACALL WR_Byte    
         MOV   A,#0BEH            ;读取寄存器值  
         ACALL WR_Byte  
         ACALL RD_Byte            ;读取低字节数据  
         MOV   DTL,A  
         ACALL RD_Byte            ;读取高字节数据  
         MOV   DTH,A  
         ACALL BE_18B20  
         RET 
 ;--------温度转换----------------- 
 ;会对R0及相关寄存器产生影响 
CONVERT: ACALL BE_18B20           ;芯片复位  
         JNC   CONVERT  
         MOV   A,#0CCH            ;跳过芯片ROM配对  
         ACALL WR_Byte  
         MOV   A,#44H             ;温度转换指令  
         ACALL WR_Byte 
LOOPC:   ACALL RD_Byte            ;读BUSY,等待转换结束  
         MOV   R0,A  
         ACALL DISP  
         CJNE  R0,#0FFH,LOOPC  
         RET 

 ;================================= 
COUNT:   MOV   A,DTL              ;小数位的计算  
         MOV   R0,#0FH            ;取出低四位  
         ANL   A,R0 
         MOV   B,#10  
         MUL   AB  
         MOV   B,#16              ;1表示0.1度  
         DIV   AB  
         MOV   NUM3,A  
         MOV   A,DTL              ;个位数与十位数的计算  
         MOV   R0,#0F0H  
         ANL   A,R0  
         SWAP  A  
         MOV   DTL,A  
         MOV   A,DTH  
         MOV   R0,#0FH  
         ANL   A,R0  
         SWAP  A  
         ORL   A,DTL              ;计算出来的温度值存在A中  
         MOV   TEMP,A  
         MOV   B,#10              ;将其转换成显示字  
         DIV   AB  
         MOV   NUM1,A  
         MOV   NUM2,B  
         RET 
 ;显示子程序 
DISP:    MOV  A,#40H
         MOV  DPTR,#7101H
         MOVX  @DPTR,A
	 MOV  DPTR,#7102H
	 MOV    A,num1           ;百位 
	 LCALL SQL
	 MOVX @DPTR,A
         LCALL DELAY
         MOV  A,#20H
         MOV  DPTR,#7101H
         MOVX  @DPTR,A
	 MOV  DPTR,#7102H
	 MOV    A,num2           ;十位 
	 LCALL SQL1
	 MOVX @DPTR,A
	 LCALL DELAY
	  MOV  A,#10H
         MOV  DPTR,#7101H
         MOVX  @DPTR,A
	 MOV  DPTR,#7102H
	 MOV    A,num3          ;个位 
	 LCALL SQL
	 MOVX @DPTR,A
         LCALL DELAY
 ;5us延时子程序 
DEL5us:  NOP  
         NOP  
         NOP  
         DJNZ   R7,DEL5us  
         RET 
 ;送数码管各位数之间的延时
DELAY:	 MOV  R5,#04H	  
LOOP6:	 MOV  R4,#0F9H
LOOP7:	 DJNZ  R4,LOOP7
	 NOP
	 NOP
	 DJNZ  R5,LOOP6
	 RET
 ;查表程序(不带小数点)
SQL:     INC  A
         MOVC  A,@A+PC
         RET
TAB:     DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
 ;查表程序(带小数点) 
SQL1:    INC  A
         MOVC  A,@A+PC
         RET
TAB1:    DB 0FDH,61H,0DBH,0F3H,67H,0B7H,0BFH,0E1H,0FFH,0F7H
         END 

⌨️ 快捷键说明

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