找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4557|回复: 0
打印 上一主题 下一主题
收起左侧

DS18B20温度传感器多点测温Proteus仿真+单片机汇编语言程序

[复制链接]
跳转到指定楼层
楼主
温度传感器是ds1621的
多点测温是ds18B20的
希望对大家有所帮助
另外,求ds1621的多点测温
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机汇编语言源程序如下:
  1. DQ                  BIT        P1.0
  2. FLAG                 BIT        00H        
  3. FLAG_NEG        BIT        01H
  4. TEMP_L                EQU 30H
  5. TEMP_H                EQU        31H
  6. TEMP_INT        EQU 32H
  7. TEMP_DP                EQU 33H
  8. TEMP_100        EQU        34H
  9. TEMP_10                EQU        35H
  10. TEMP_1                EQU        36H

  11. WR_LCD                BIT P3.6
  12. RD_LCD                BIT        P3.7
  13.                 ORG 0000H
  14.                 LJMP START
  15.                 ORG 1000H
  16. START:        MOV SP,#60H
  17.                 LCALL INIT
  18. MAIN:        LCALL READ_TEMP
  19.                 LCALL PROC_TEMP
  20.                 LJMP MAIN
  21. ;*********************************
  22. READ_TEMP:
  23.                 SETB        DQ
  24.                 LCALL INI_DQ
  25.                 JB         FLAG,RE_0
  26.                   RET
  27. RE_0:        MOV A,#0CCH
  28.                 LCALL WRITE_DQ
  29.                 MOV A,#44H
  30.                 LCALL WRITE_DQ
  31.                 LCALL DISPLAY                        ;调用lcd显示程序,并起延时作用

  32.                 LCALL INI_DQ
  33.                 MOV A,#0CCH
  34.                 LCALL WRITE_DQ
  35.                 MOV A,#0BEH
  36.                 LCALL WRITE_DQ
  37.                 LCALL READ_DQ
  38.                 RET
  39.                
  40. ;************DS18B20初始化程序***************
  41. INI_DQ:        
  42.         SETB        DQ
  43.         NOP
  44.         NOP
  45.         CLR        DQ
  46.         MOV          R1,#3
  47. INI_0:          MOV          R0,#80
  48.           DJNZ          R0,$
  49.           DJNZ          R1,INI_0
  50.         SETB         DQ
  51.         NOP
  52.         NOP
  53.         NOP
  54.         MOV        R7,        #25
  55. INI_1:  JNB          DQ,INI_2
  56.                   DJNZ          R7,INI_1  ;延时
  57.                   LJMP         INI_3
  58. INI_2:                  SETB          FLAG   ;标志位
  59.                   LJMP          INI_4
  60. INI_3:                  CLR          FLAG   
  61.                   LJMP          INI_5

  62. INI_4:  MOV          R0,#80
  63.                  DJNZ          R0,[        DISCUZ_CODE_1        ]nbsp; ;时序要求延时一段时间
  64. INI_5:  SETB          DQ
  65.                   RET
  66. ;**************DS18B20写命令******************
  67. WRITE_DQ:
  68.         MOV        R6,        #8
  69.         CLR C
  70. Tloop:        CLR        DQ                        
  71.         MOV R2,#6
  72.         DJNZ R2,$
  73.         RRC        A                        ;最低位移到C中
  74.         MOV DQ,C
  75.         MOV R2,#23
  76.         DJNZ R2,$
  77.         SETB DQ
  78.         NOP
  79.         DJNZ R6,Tloop
  80.         SETB DQ
  81.         RET

  82. ;**************读DS18B20数据函数*************
  83. READ_DQ:        
  84.         MOV R5,        #2
  85.         MOV R0,        #30H
  86. READ_0:        MOV         R6,        #8
  87. READ_1:        CLR                C
  88.         SETB DQ
  89.         NOP
  90.         NOP
  91.         CLR        DQ
  92.         NOP
  93.         NOP
  94.         NOP
  95.         NOP
  96.         SETB        DQ
  97.         MOV         R2,#9
  98.         DJNZ         R2,$
  99.         MOV         C,DQ
  100.         MOV         R3,#23
  101.         DJNZ         R3,$
  102.         RRC                A
  103.         DJNZ        R6,        READ_1
  104.         MOV         @R0,A
  105.         INC         R0
  106.         DJNZ         R5,READ_0
  107.         SETB         DQ
  108.         RET
  109. ;***************温度数据处理程序*****************
  110. PROC_TEMP:
  111.         CLR FLAG_NEG
  112.         MOV A,TEMP_L
  113.         SWAP A
  114.         ORL A,#0F0H
  115.         MOV TEMP_INT,A
  116.         MOV A,TEMP_H
  117.         SWAP A
  118.         ORL A,#0FH
  119.         ANL TEMP_INT,A
  120.         MOV A,TEMP_H
  121.         JB        ACC.7,NEGTIVE
  122.         MOV A,TEMP_L
  123.         ANL A,#0FH
  124.         MOV DPTR,#TAB3
  125.         MOVC A,@A+DPTR
  126.         MOV TEMP_DP,A
  127.         LJMP PRO_0
  128. NEGTIVE:                                        ;温度值为负时处理程序,按实际情况,处理过程比较复杂
  129.         SETB FLAG_NEG
  130.         MOV A,TEMP_L
  131.         CPL A
  132.         ANL A,#0FH
  133.         MOV R1,A
  134.         CJNE R1,#0FH,PRO_1
  135.         PUSH ACC
  136.         MOV A,TEMP_INT
  137.         SUBB A,#1
  138.         MOV TEMP_INT,A
  139.         POP ACC
  140.         MOV TEMP_DP,#00H
  141.         LJMP PRO_2
  142. PRO_1:        ADD A,#1
  143.         MOV DPTR,#TAB3
  144.         MOVC A,@A+DPTR
  145.         MOV TEMP_DP,A
  146. PRO_2:        MOV A,TEMP_INT
  147.         CPL A
  148.         MOV TEMP_INT,A
  149. PRO_0:        MOV A,TEMP_INT
  150.         MOV B,#100
  151.         DIV AB
  152.         MOV TEMP_100,A
  153.         MOV A,B
  154.         MOV B,#10
  155.         DIV AB
  156.         MOV TEMP_10,A
  157.         MOV TEMP_1,B
  158.         RET

  159. ;**************LED显示***********************

  160. ;**************LCD初始化**********************
  161. INIT:        MOV DPTR,#8000H
  162.                 SETB        WR_LCD
  163.                 SETB        RD_LCD
  164.                
  165.                 MOV A,#01H
  166.                 ACALL F_BUSY
  167.                 MOVX @DPTR,A
  168.                 ACALL F_BUSY
  169.                 MOV A,#38H
  170.                 MOVX @DPTR,A
  171.                 ACALL F_BUSY
  172.                 MOV A,0EH
  173.                 MOVX @DPTR,A
  174.                 ACALL F_BUSY
  175.                 MOV A,#0CH
  176.                 MOVX @DPTR,A
  177.                 RET
  178. ;***********写LCD函数*************************
  179. DISPLAY:        MOV DPTR,#8000H                ;写第一行数据
  180.                 MOV A,#80H
  181.                 ACALL F_BUSY
  182.                 MOVX @DPTR,A
  183.                 MOV DPTR,#8100H
  184.                 MOV R1,#0
  185. D1:                LCALL TRANS1;
  186.                 ACALL F_BUSY
  187.                 MOVX @DPTR,A
  188.                 INC R1
  189.                 CJNE R1,#16,D1
  190.                
  191.                 MOV DPTR,#8000H                ;写第二行数据
  192.                 MOV A,#0C0H
  193.                 ACALL F_BUSY
  194.                 MOVX @DPTR,A
  195.                 MOV DPTR,#8100H
  196.                 LCALL WRITE_NEGTIVE
  197.                 ACALL F_BUSY
  198.                 MOVX @DPTR,A
  199.                
  200.                 MOV A,TEMP_100
  201.                 LCALL WRITE_INT
  202.                 ACALL F_BUSY
  203.                 MOVX @DPTR,A
  204.                
  205.                 MOV A,TEMP_10
  206.                 LCALL WRITE_INT
  207.                 ACALL F_BUSY
  208.                 MOVX @DPTR,A
  209.                
  210.                 MOV A,TEMP_1
  211.                 LCALL WRITE_INT
  212.                 ACALL F_BUSY
  213.                 MOVX @DPTR,A
  214.                
  215.                 MOV A,#2EH
  216.                 ACALL F_BUSY
  217.                 MOVX @DPTR,A
  218.                
  219.                 MOV A,TEMP_DP
  220.                 LCALL WRITE_INT
  221.                 ACALL F_BUSY
  222.                 MOVX @DPTR,A
  223.                
  224.                 MOV A,#20H
  225.                 ACALL F_BUSY
  226.                 MOVX @DPTR,A
  227.                
  228.                 MOV A,#0DFH
  229.                 ACALL F_BUSY
  230.                 MOVX @DPTR,A
  231.                
  232.                 MOV A,#43H
  233.                 ACALL F_BUSY
  234.                 MOVX @DPTR,A
  235.                
  236.                 RET
  237. ;**************显示第一行******************
  238. TRANS1:        PUSH DPH
  239.                 PUSH DPL
  240.                 MOV A,R1
  241.                 MOV DPTR,#TAB1;
  242.                 MOVC A,@A+DPTR
  243.                 POP DPL
  244.                 POP DPH
  245.                 RET
  246. ;**************显示第二行******************
  247. WRITE_NEGTIVE:
  248.                 JB FLAG_NEG,WN
  249.                 MOV A,#20H
  250.                 RET
  251. WN:                MOV A,#2DH
  252.                 RET
  253. WRITE_INT:
  254.                 PUSH DPH
  255.                 PUSH DPL
  256.                 MOV DPTR,#TAB2
  257.                 MOVC A,@A+DPTR
  258.                 POP DPL
  259.                 POP DPH
  260.                 RET
  261.                
  262. ;***********判断LCD是否忙******************
  263. F_BUSY:        PUSH DPH
  264.                 PUSH DPL
  265.                 PUSH PSW
  266.                 PUSH Acc
  267. LOOP:        MOV DPTR,#8200H
  268.                 MOVX A,@DPTR
  269.                 JB Acc.7,LOOP
  270.                 POP Acc
  271.                 POP PSW
  272.                 POP DPL
  273.                 POP DPH
  274.                 RET
  275.                
  276. DELAY_10MS:
  277.                 MOV R3,#20
  278. DEL_1:        MOV R4,#248
  279.                 DJNZ R4,$
  280.                 DJNZ R3,DEL_1
  281.                 RET
  282. TAB1:         DB  20H,20H,20H,'T','e','m','p','r','e','t','u','r','e',20H,20H,20H
  283. ;**************LCD数字字模
  284. TAB2:         DB  30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
  285. ;**********小数位转换********************
  286. TAB3:        DB        00H,01H,01H,02H
  287.                 DB        02H,03H,04H,04H
  288.                 DB        05H,06H,06H,07H
  289.                 DB        07H,08H,09H,09H
  290. ;************无小数点位的段码******************
  291. TAB4:        DB        0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
  292. ;*****************有小数点**********************
  293. TAB5:        DB        40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
  294. END
复制代码

所有资料51hei提供下载:
rogerjordan-5028051-多点测温.rar (50.47 KB, 下载次数: 41)
hs07zdhgj-3012459-24 DS1621温度传感器实验.rar (40.63 KB, 下载次数: 35)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表