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

📄 1820.asm

📁 温度传感器18B20的汇编程序
💻 ASM
字号:
		HH  EQU  50H	  /*18B20*/
		MM  EQU  51H
		LL  EQU  52H
        RS    EQU  P1.3	  /*LCD*/
        R_W   EQU  P1.4
	    E     EQU  P1.5

ORG   0000H
       MOV   SP,#59H
	   CLR  E			 /*LCD显示*/
       LCALL INI
MAIN:  MOV  R1,#80H
	   LCALL BF
	   LCALL  WI
	   MOV   R2,#54H	/*显示TEMPER:*/
	   LCALL BF
	   LCALL WD 
	   MOV   R2,#45H
	   LCALL BF
	   LCALL WD
	   MOV   R2,#4DH
	   LCALL BF
	   LCALL WD
	   MOV   R2,#50H
	   LCALL BF
	   LCALL WD
	   MOV   R2,#45H
	   LCALL BF
	   LCALL WD
	   MOV   R2,#52H
	   LCALL BF
	   LCALL WD
	   MOV   R2,#3AH
	   LCALL BF
	   LCALL WD

	   MOV   R1,#87H
	   LCALL BF
	   LCALL WI
	   LCALL GETTEMPER	 /*调用1820程序*/
	   
	   MOV   A,HH
	   ADD   A,#32 
	   MOV   R2,A		/*把温度显示出来*/
	   LCALL BF
	   LCALL WD
	   MOV   A,MM
	   ADD   A,#48
	   MOV   R2,A
	   LCALL BF
	   LCALL WD
	   MOV   A,LL
	   ADD   A,#48
	   MOV   R2,A
	   LCALL BF
	   LCALL WD

	   MOV   R2,#2EH
	   LCALL BF
	   LCALL WD
	   MOV   R2,26H
	   LCALL BF
	   LCALL WD
	   MOV   R2,25H 
	   LCALL BF
	   LCALL WD

       MOV   R2,#0DFH
	   LCALL BF
	   LCALL WD
	   MOV   R2,#43H
	   LCALL BF
	   LCALL WD
	   MOV  R5,#8FH		  /*延时0.1S后再用MAIN循环显示温度*/
	   MOV  R6,#0BFH
	   MOV  R7,#1H
 DELA: DJNZ R5,DELA
       DJNZ R6,DELA
	   DJNZ R7,DELA
       LJMP  MAIN

   BF: MOV  P3,#0FFH		/*忙查询LCD*/
       CLR  RS
       SETB R_W
	   SETB E
	   NOP
	   NOP
	   MOV  A,P3
	   CLR  E
	   JB ACC.7,BF	   
	   RET

   WI: 					   /*写到LCD寄存器里*/
       CLR   R_W 
       CLR   RS
	   SETB  E
	   NOP
	   NOP
	   MOV  A,R1
	   MOV  P3,A
	   CLR  E
	   RET

   WD:SETB  RS			  /*写到LCD数据寄存器*/
      CLR   R_W
	  SETB  E
	  NOP
	  NOP
	  MOV  A,R2
	  MOV  P3,A
	  CLR  E
	  RET
 
  INI: LCALL BF			  /*LCD初始化*/
	   MOV R1,#38H
	   LCALL  WI
	   LCALL BF
	   MOV R1,#01H
       LCALL WI
	   LCALL BF
	   MOV  R1,#06H
       LCALL WI
	   LCALL BF
	   MOV R1,#0CH
	   LCALL WI
       RET

GETTEMPER:	/*读出温度*/
      SETB   P2.2
	  LCALL  INIT1820	 /*复位*/
	  MOV    A,#0CCH	 /*跳过ROM匹配只是适用单片*/
	  LCALL  WRITE1820
	  MOV    A,#44H		 /*发出温度转换命令*/
	  LCALL  WRITE1820
                      
      MOV  R5,#0FFH	  /*等待AD转换结束,12位750*/
	  MOV  R6,#6FH
	  MOV  R7,#06H
AA:	  DJNZ R5,AA
      DJNZ R6,AA
	  DJNZ R7,AA				 
						 
	  LCALL  INIT1820	 /*复位*/
	  MOV    A,#0CCH	 /*跳过ROM匹配只是适用单片*/
	  LCALL  WRITE1820
	  MOV    A,#0BEH	 /*发出读温度命令*/
	  LCALL  WRITE1820
	  LCALL  READ1820	 /*读温度*/


		 MOV   C,4BH
		 MOV   A,#00H
		 RLC   A
		 MOV   C,4AH
		 RLC   A
		 MOV   C,49H
		 RLC   A
		 MOV   C,48H
		 RLC   A
		 MOV   27H,A

         MOV   A,29H	/*将两个字节的数据舍弃低4位后整合到29H*/
		 MOV   C,40H	/*28H的0位地址*/
		 RRC   A
		 MOV   C,41H	/*28H的1位地址*/
		 RRC   A
		 MOV   C,42H	/*28H的2位地址*/
		 RRC   A
		 MOV   C,43H	/*28H的3位地址*/
		 RRC   A
		 MOV   29H,A

		 MOV   A,29H	 /*将16进制转化为BCD码*/
		 JB    4FH,FUTEM
		 MOV   B,#100
		 DIV   AB
		 MOV   HH,A		 /*高位*/
		 MOV   A,B
		 MOV   B,#10
		 DIV   AB
		 MOV   MM,A		 /*中位*/
		 MOV   LL,B		 /*低位*/
		 SJMP  HUI
 FUTEM:  CPL   A
         MOV   HH,#13		 /*高位*/
		 MOV   A,B
		 MOV   B,#10
		 DIV   AB
		 MOV   MM,A		 /*中位*/
		 MOV   LL,B		 /*低位*/
   HUI:  NOP
         MOV   A,27H	 /*小数部分*/
		 MOV   B,#6
		 MUL   AB
		 MOV   B,#10
		 DIV   AB
		 ADD   A,#48
		 MOV   26H,A
		 MOV   A,B
		 ADD   A,#48
		 MOV   25H,A  
		 RET

INIT1820:  /*复位初始化*/
         SETB  P2.2			  
		 NOP
		 CLR   P2.2		  /*拉低*/
		 MOV   R1,#3
  TSR1:	 MOV   R0,#95	  /*延时580微秒12MHZ*/
         DJNZ  R0,$
		 DJNZ  R1,TSR1
		 SETB  P2.2		  /*释放*/
		 NOP
		 MOV   R0,#0fH
  TSR4:  DJNZ  R0,TSR4	 /*延时30us*/
  TSR2:	 JNB   P2.2,TSR3 /*等待1820回应0*/
         SJMP  TSR2
  TSR3:  MOV   R0,#110
  TSR6:  DJNZ  R0,TSR6   /*延时236us*/
         SETB  P2.2
		 MOV   R0,#130
  TSR7:  DJNZ  R0,TSR7   /*延时261us*/
		 NOP
		 RET


WRITE1820:	 /*写子程序*/
       MOV   R2,#8
	   CLR   C
  WR1: CLR    P2.2
       MOV    R3,#6	   /*延时13us*/
	   DJNZ   R3,$
	   RRC    A
	   MOV    P2.2,C
	   MOV    R3,#26   /*延时53us*/
	   DJNZ   R3,$
	   SETB   P2.2
	   NOP
	   DJNZ   R2,WR1
	   SETB   P2.2
	   RET


READ1820:
       MOV   R4,#2		 /*读两字节低位29H,高位28H*/
	   MOV   R1,#29H	 /*低位存入29H*/
 RE00: MOV   R2,#8		 /*数据共8位*/
 RE01: CLR   C
       SETB  P2.2
	   NOP
	   NOP
	   CLR   P2.2
	   NOP
	   NOP
	   SETB  P2.2
	   NOP
	   NOP
	   NOP
       MOV   C,P2.2
	   MOV   R3,#30		 /*延时61us*/
RE20:  DJNZ  R3,RE20
       RRC   A			/*先出来的是LSB*/
	   DJNZ  R2,RE01
	   MOV   @R1,A
	   DEC   R1
	   DJNZ  R4,RE00
	   RET


	  END

⌨️ 快捷键说明

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