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

📄 1820.asm

📁 温度传感器ds1820的使用
💻 ASM
字号:
;|----------------------------------------------------------------------------------------------| 
;| 获取单个ds18b20转化的温度值的应用程式,P1.4接ds18b20 | 
;|----------------------------------------------------------------------------------------------| 

          LED1	 EQU	P1.3         ;
          LED2	 EQU	P1.2         ;
          LED3	 EQU	P1.1         ;显示控制
          LED4	 EQU	P1.0         ;
          DATA1  EQU  70H          ;
          DATA2  EQU  71H          ;显示数据缓存区
          DATA3  EQU  72H          ;
          DATA4  EQU  73H          ;
          
          ORG 0000H
          LJMP MAIN                  ;转入主程序
          ORG 0050H

 MAIN:
          SETB P3.7
          NOP
          MOV DATA1,#00H             ;显示区初始化
          MOV DATA2,#00H
          MOV DATA3,#10H
          MOV DATA4,#10H
          NOP
   LOOP:  ACALL GET_TEMP
          ACALL TRANS12
          ACALL DISPLAY
          JMP LOOP


GET_TEMP: 
          CLR EA            ;使用ds18b20一定要禁止任何中断产生 
          LCALL INITIAL     ;调用初使化副程式 
          MOV A,#0CCH 
          LCALL WRITE       ;送入跳过ROM命令 
          MOV A, #44H 
          LCALL WRITE       ;送入温度转换命令 
          LCALL INITIAL     ;温度转换完全,再次初使化ds18b20 
          MOV A,#0CCH 
          LCALL WRITE       ;送入跳过ROM命令 
          MOV A,#0BEH       
          LCALL WRITE       ;送入读温度暂存器命令 
          LCALL READ 
          MOV 30H,A          ;读出温度值低位元组存入30H 
          LCALL READ 
          MOV 31H,A          ;读出谩度值高位元组存入31H 
          SETB EA 
          RET 
 INITIAL:                   ;初始化ds18b20副程式 
      L0: CLR P1.4          ;ds18b20汇流排为低重定电平 
          MOV R2,#200 
      L1: CLR P1.4 
          DJNZ R2,L1        ;汇流排重定电平保持400us 
          SETB P1.4         ;释放ds18b20汇流排 
          MOV R2,#30 
      L4: DJNZ R2,L4        ;释放ds18b20汇流排保持60us 
          CLR C             ;清存在信号 
          ORL C,P1.4 
          JC L6             ;存在吗?不存在则退出 
          MOV R6,#80 
      L5: ORL C,P1.4 
          JC L3 
          DJNZ R6,L5 
          SJMP L0 
      L3: MOV R2,#240 
      L2: DJNZ R2,L2 
      L6: NOP
          RET 
   WRITE:                   ;向ds18b20写操作命令副程式 
          MOV R3,#8         ;写入ds18b20的bit数,一个位元组8个bit 
     WR1: SETB P1.4  
          MOV R4,#8 
          RRC A             ;把一个位元组data(A)分成8个bit环移给 C 
          CLR P1.4          ;开始写入ds18b20汇流排要处于重定(低)状态 
     WR2: DJNZ R4,WR2       ;ds18b20汇流排重定保持16us 
          MOV P1.4,C        ;写入一个bit 
          MOV R4,#20 
     WR3: DJNZ R4,WR3       ;等待40us 
          DJNZ R3,WR1       ;写入下一个bit 
          SETB P1.4         ;重新释放ds18b20汇流排 
          RET 
    READ: 
          MOV R6,#8         ;连续读8个bit 
     RE1: CLR P1.4          ;读前汇流排保持为低 
          MOV R4,#4 
          NOP 
          SETB P1.4         ;开始读汇流排释放 
     RE2: DJNZ R4,RE2       ;持续8us 
          MOV C,P1.4        ;从ds18b20汇流排读得一个bit 
          RRC A             ;把读得的位值环移给 A 
          MOV R5,#30 
     RE3: DJNZ R5,RE3       ;持续60us 
          DJNZ R6,RE1       ;读下一个bit 
          SETB P1.4         ;重新释放ds18b20汇流排 
          RET 
;*******************************************************
;温度转换程序--测试程序,只显示正值
;*******************************************************
TRANS12:MOV A,30H
        ANL A,#0F0H
        SWAP A                 
        MOV 32H,A                   ;低位
        MOV A,31H
        ANL A,#0FH
        SWAP A
        ORL A,32H
        MOV B,#10                   ;温度值分离
        DIV AB
        MOV DATA1,B                 ;个位
        MOV DATA2,A                 ;十位        
        RET

;********************显示*********************************

DISPLAY:                          ;显示子程序,可移植
  PUSH A
  NOP
  SETB LED2
  NOP
  SETB LED3
  NOP
  SETB LED4
  NOP
  CLR LED1
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA1
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  SETB LED1
  CLR LED2
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA2
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  SETB LED2
  CLR LED3
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA3
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  SETB LED3
  CLR LED4
  NOP
  MOV DPTR,#TABLE
  MOV	A,DATA4
	MOVC	A,@A+DPTR
	MOV	P0,A
  ACALL DISDELAY
  POP A
  RET

DISDELAY:
  MOV 74H,#10
DISD:
  MOV 75H,#250
  DJNZ 75H,$
  DJNZ 74H,DISD
  RET


TABLE:
	DB	11000000B	;0     
	DB	11111001B	;1      
	DB	10100100B	;2   
	DB	10110000B	;3   
	DB	10011001B	;4   
	DB	10010010B	;5   
	DB	10000010B	;6   
	DB	11111000B	;7   
	DB	10000000B	;8   
	DB	10010000B	;9   
	DB	10001000B	;A   
	DB	10000011B	;b   
	DB	11000110B	;C   
	DB	10100001B	;d   
	DB	10000110B	;E   
	DB	10001110B	;F   
	DB	10111111B	;-   
	DB	11111111B	;    
END

⌨️ 快捷键说明

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