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

📄 数字温度计.asm

📁 汇编写的数字温度计 用一片18b20做温度传感器 51单片机 有详细注释
💻 ASM
字号:

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                                                ;;;;;;
;;;;                    数字温度计                  ;;;;;;
;;;;                                                ;;;;;;        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;            
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
;;;;;;;;;;;;;;;;定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

		b_bit  EQU  0AAH
		a_bit  EQU  0ABH


        TIMEL EQU 0E0H
        TIMEH EQU 0B1H
     TEMPHEAD EQU 36H 
        BITST DATA 20H
    
        TEMPL DATA 26H
        TEMPH DATA 27H
       TEMPHC DATA 28H
       TEMPLC DATA 29H
      I_O1820 BIT P2.2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
             ORG 0000H
             LJMP START
             ORG 100H
;;;;;;;;;;;;;初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       START:MOV SP,#60H
      CLSRAM:MOV R0,#20H
             MOV R1,#60H
     CLSRAM1:MOV @R0,#00H
             INC R0
             DJNZ R1,CLSRAM1
             MOV SCON,#00H
             SJMP INIT
             ERROR:NOP
             LJMP START
             NOP
        INIT:NOP
             MOV PSW,#00H
             SJMP MAIN
;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MAIN:NOP
	     LCALL DISP1
	     LCALL START_TEMP
	     LCALL read_temp
	     LCALL cont_temp
             LCALL DISPBCD
             LCALL DISP1
       MAIN2:
             LJMP MAIN
;;;;;;;;;;;;;;;18B20复位;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 reset:SETB I_O1820
             NOP
             NOP
             CLR I_O1820
             MOV R6,#0A0H
             DJNZ R6,$
             MOV R6,#0A0H
             DJNZ R6,$
             SETB I_O1820
             MOV R6,#32H
             DJNZ R6,$
             MOV R6,#3CH
    LOOP1820:MOV C,I_O1820
             JC resetOUT
	     DJNZ R6,LOOP1820
	     MOV R6,#64H
	     DJNZ R6,$
	     SJMP reset
	     RET
resetout:SETB I_O1820
	     RET
;;;;;;;;;;;;;;;;读ds1820一字节;;;;;;;;;;;;;;;;;;;;;         
  read:MOV R7,#08
             SETB I_O1820
             NOP
             NOP
readLOOP:CLR I_O1820
             NOP
             NOP
             NOP
             SETB I_O1820
             MOV R6,#07
             DJNZ R6,$
             MOV C,I_O1820
             MOV R6,#3CH
             DJNZ R6,$
             RRC A
             SETB I_O1820
             DJNZ R7,readLOOP
             MOV R6,#3CH
             DJNZ R6,$
RET
;;;;;;;;;;;;;;;;写DS18B20一字节;;;;;;;;;;;;;;;;;;;;;
 write:MOV R7,#08H
             SETB I_O1820
             NOP
             NOP
writeLOP:CLR I_O1820
             MOV R6,#07H
             DJNZ R6,$
             RRC A
             MOV I_O1820,C
             MOV R6,#34H
             DJNZ R6,$
             SETB I_O1820
             DJNZ R7,writeLOP
             RET
;;;;;;;;;;;;温度转换命令;;;;;;;;;;;;;;;;;;;;;;;;;
    START_TEMP:
             LCALL reset
	     MOV A,#0CCH
             LCALL write
             MOV R6,#34H
             DJNZ R6,$
             MOV A,#44H
             LCALL write
             MOV R6,#34H
             DJNZ R6,$
             RET
;;;;;;;;;;;;读取温度;;;;;;;;;;;;;;;;;;;;;;;;;
   read_temp:LCALL reset
             MOV A,#0CCH
             LCALL write
             MOV R6,#34H
             DJNZ R6,$
             MOV A,#0BEH
             LCALL write
             MOV R6,#34H
             DJNZ R6,$
             MOV R5,#02H
             MOV R0,#TEMPHEAD
             MOV B,#00H
   START_TEMP2:LCALL read
             MOV @R0,A
             INC R0
             DJNZ R5,START_TEMP2
	     MOV A,TEMPHEAD+0
	     MOV TEMPL,A
	     MOV A,TEMPHEAD+1
	     MOV TEMPH,A
START_TEMPOUT:RET
;;;;;;;;;;;;温度数据处理;;;;;;;;;;;;;;;;;;;;;;;;;
   cont_temp:MOV A,TEMPH
             ANL A,#80H
	     JZ TEMPC1
	     CLR C
	     MOV A,TEMPL
	     CPL A
	     ADD A,#01H
	     MOV  TEMPL,A
	     MOV A,TEMPH
	     CPL A
	     ADDC A,#00H
	     MOV TEMPH,A
	     MOV TEMPHC,#0BH
	     SJMP TEMPC11
      TEMPC1:MOV TEMPHC,#0AH
     TEMPC11:MOV A,TEMPHC
             SWAP A
             MOV TEMPHC,A
	     MOV A,TEMPL
	     ANL A,#0FH
	     MOV DPTR,#TEMPDOTTAB
	     MOVC A,@A+DPTR
	     MOV TEMPLC,A
	     MOV A,TEMPL
	     ANL A,#0F0H
	     SWAP A
	     MOV TEMPL,A
	     MOV A,TEMPH
	     ANL A,#0FH
	     SWAP A
	     ORL A,TEMPL
	     LCALL HEX2BCD1
	     MOV TEMPL,A
	     ANL A,#0F0H
	     SWAP A
	     ORL A,TEMPHC
	     MOV TEMPHC,A
	     MOV A,TEMPL
	     ANL A,#0FH
	     SWAP A
	     ORL A,TEMPLC
	     MOV TEMPLC ,A
	     MOV A,R7
	     JZ TEMPC12
	     ANL A,#0FH
	     SWAP A
	     MOV R7,A
	     MOV A,TEMPHC
             ANL A,#0FH
	     ORL A,R7
 	     MOV TEMPHC,A
     TEMPC12:RET
  TEMPDOTTAB:DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
             DB 06H,07H,08H,08H,09H,09H
     DISPBCD:MOV A,TEMPLC
             ANL A,#0FH
             MOV 70H,A
             MOV A,TEMPLC
             SWAP A
             ANL A,#0FH
             MOV 71H,A
             MOV A,TEMPHC
             ANL A,#0FH
             MOV 72H,A
             MOV A,TEMPHC
             SWAP  A
             ANL A,#0FH
             MOV 73H,A
             MOV A,TEMPHC
             ANL A,#0F0H
             CJNE A,#010H,DISPBCD0
             SJMP DISPBCD2
    DISPBCD0:MOV A,TEMPHC
             ANL A,#0FH
             JNZ DISPBCD2
             MOV A,TEMPHC
             SWAP A
             ANL A,#0FH
             MOV 73H,#0AH
             MOV 72H,A
    DISPBCD2:RET
;;;;;;;;;;;;;;;;;;;显示;;;;;;;;;;;;;;;;;;;;;;;;;;
       DISP1: MOV  P1,#00H
       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 p1,a ;送出个位的7段代码 
clr p3.7 ;开个位显示 
acall d1ms ;显示1ms 
setb p3.7 
mov a,b_bit ;取十位数 
MOVC A,@A+DPTR ;查十位数的7段代码 
mov p1,a ;送出十位的7段代码 
clr p3.6 ;开十位显示 
acall d1ms ;显示1ms 
setb p3.6 
djnz r1,dplop ;100次没完循环 
djnz r0,dpl1 ;4个100次没完循环 

;1MS延时 
D1MS: MOV R7,#80 
DJNZ R7,$ 
RET 
;实验板上的7段数码管0~9数字的共阴显示代码
	    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        TAB: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,27h,7fh,6fh,80h,0FFH,00H
          ;     "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮"-" ---共阴段码表 
        DL1MS:MOV R6,#14H
         DL1:MOV R7,#19H
         DL2:DJNZ  R7,DL2
             DJNZ R6,DL1
             RET
;;;;;;;;;;;;;;;;;;;;;BCD码调整;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    HEX2BCD1:MOV B,#064H
             DIV AB
             MOV R7,A
             MOV A,#0AH
             XCH A,B
             DIV AB
             SWAP   A
             ORL A,B
             RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



⌨️ 快捷键说明

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