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

📄 text1.sdi

📁 DS18B20温度采集芯片的简单应用
💻 SDI
字号:
000B,,,RX      EQU   P1.6    ;DS18B20接收数据.
000B,,,TX      EQU   P1.7    ;51发送数据.
,,,FLAG1   EQU   00H     ;DS18B20初始化标志位.
,,,FLAG2   EQU   01H     ;通知水循环维持时间寄存器(WATER2)开始计时,间隔(WATER1)无需被操作.
,,,FLAG3   EQU   02H     ;通知喂食维持时间寄存器(FEED2)开始计时,间隔(FEED1)无需被操作.
,,,FLAG4   EQU   03H     ;被置1则可以去启动温度转换.
,,,FLAG5   EQU   04H     ;被置1则可以去取转换好的温度.
,,,TEMPL   EQU   26H     ;16位温度量低8位.
,,,TEMPH   EQU   27H     ;16位温度量高8位.
,,,TH      EQU   28H     ;温度上限值.
,,,TL      EQU   29H     ;温度下限值.
,,,TEMP1   EQU   30H     ;采集温度符号位.
,,,TEMP2   EQU   31H     ;采集温度整数位.
,,,TEMP3   EQU   32H     ;采集温度小数位.
,,,ZC1     EQU   33H     ;数据暂存地址1.
,,,ZC2     EQU   34H     ;数据暂存地址2.
,,,ZC3     EQU   35H     ;数据暂存地址2.
,,,HOUR    EQU   36H     ;小时数据暂存.
,,,MINUTE  EQU   37H     ;分钟数据暂存.
,,,SECOND  EQU   38H     ;秒数据暂存.
,,,WATER1  EQU   39H     ;水循环开启间隔控制寄存器.  2h(max 12h)
,,,WATER2  EQU   40H     ;水循环维持时间控制寄存器.  10min(max 30min)
,,,HEAT1   EQU   41H     ;检测水温开启间隔控制寄存器. 5S
,,,FEED1   EQU   42H     ;喂食开启间隔控制寄存器.     8h
,,,FEED2   EQU   43H     ;喂食维持时间控制寄存器.     2S
,,,COUNT1  EQU   44H     ;每1秒引发一次中断.
,,,SETTEMP EQU   45H     ;采集温度低于此值加热棒开启.
,,,ZC4     EQU   46H     ;装需要送显的数值
,,,ZC5     EQU   47H     ;1秒显示ZC4中数值子程序.
,,,ZC6     EQU   48H     ;1秒显示子程序十位值暂存.
,,,
,,,ORG 0000H
0000,80 2E,,SJMP INITIAL
,,,ORG 0003H
0003,02 03 49,,LJMP INT0P
,,,ORG 001BH
001B,02 00 D6,,LJMP IT1P
,,,ORG 0030H
,,,;=====================================================
,,,;各参数,元器件初始化
,,,;=====================================================
0030,,INITIAL,INITIAL:
0030,75 81 50,,MOV   SP,#50H
0033,75 89 00,,MOV   TMOD,#00H
0036,D2 88,,SETB  IT0
0038,75 44 8C,,MOV   COUNT1,#140  ;140
003B,75 38 00,,MOV   SECOND,#00H
003E,75 37 00,,MOV   MINUTE,#00H
0041,75 36 00,,MOV   HOUR,#00H
0044,75 41 05,,MOV   HEAT1,#05H
0047,75 42 08,,MOV   FEED1,#8
004A,75 43 02,,MOV   FEED2,#2
004D,75 39 02,,MOV   WATER1,#2
0050,75 40 0A,,MOV   WATER2,#10
0053,75 45 17,,MOV   SETTEMP,#17H
0056,C2 02,,CLR   FLAG3
0058,C2 03,,CLR   FLAG4
005A,C2 04,,CLR   FLAG5
005C,D2 AB,,SETB  ET1
005E,D2 AF,,SETB  EA
0060,75 8D 63,,MOV   TH1,#63H
0063,75 8B 18,,MOV   TL1,#18H
0066,D2 96,,SETB  RX
0068,C2 97,,CLR   TX
006A,C2 90,,CLR   P1.0
006C,C2 91,,CLR   P1.1
006E,C2 92,,CLR   P1.2
0070,C2 A5,,CLR   P2.5
0072,C2 A6,,CLR   P2.6
0074,C2 A7,,CLR   P2.7
0076,D2 93,,SETB  P1.3
0078,D2 94,,SETB  P1.4
007A,D2 95,,SETB  P1.5
007C,D2 B3,,SETB  P3.3
007E,D2 8E,,SETB  TR1  ;启动定时器.
,,,;=====================================================
,,,;主程序
,,,;=====================================================
0080,,MAIN,MAIN:
0080,30 95 48,,JNB    P1.5,XSXS ;KEYLOCK
0083,D2 8E,,SETB   TR1
0085,C2 A8,,CLR   EX0
0087,20 03 05,,JB    FLAG4,ST1
008A,,ST2,ST2:
008A,20 04 07,,JB    FLAG5,ST3
008D,80 28,,SJMP  XS1
008F,,ST1,ST1:
008F,12 01 4F,,LCALL TRANSFORM
0092,80 F6,,SJMP  ST2
0094,,ST3,ST3:
0094,12 01 60,,LCALL GETTEMP
0097,12 01 DF,,LCALL CONVERT
,,,;================
009A,30 B3 18,,JNB   P3.3,XS3   ;是否仍需比较,默认为需要.
,,,;================
009D,E5 30,,MOV   A,TEMP1
009F,B4 00 0B,,CJNE  A,#00H,ST4
00A2,E5 31,,MOV   A,TEMP2
00A4,B5 45 00,,CJNE  A,SETTEMP,ST5
00A7,,ST5,ST5:
00A7,40 08,,JC    ST6
00A9,C2 A7,,CLR   P2.7
00AB,80 0A,,SJMP  XS1
00AD,,ST4,ST4:
00AD,D2 A7,,SETB  P2.7
00AF,80 06,,SJMP  XS1
00B1,,ST6,ST6:
00B1,D2 A7,,SETB  P2.7
00B3,80 02,,SJMP  XS1
,,,;=================
00B5,,XS3,XS3:
00B5,C2 A7,,CLR   P2.7        ;若不需系统维持恒温,则总是关闭加热棒.
,,,;=================
00B7,,XS1,XS1:
00B7,20 02 04,,JB    FLAG3,FOOD
00BA,C2 A6,,CLR   P2.6
00BC,80 02,,SJMP  XS2
00BE,,FOOD,FOOD:
00BE,D2 A6,,SETB  P2.6
,,,
00C0,,XS2,XS2:
00C0,20 01 04,,JB    FLAG2,WATER
00C3,C2 A5,,CLR   P2.5
00C5,80 0A,,SJMP  XS
00C7,,WATER,WATER:
00C7,D2 A5,,SETB  P2.5
00C9,80 06,,SJMP  XS
,,,;===========
00CB,,XSXS,XSXS:
00CB,C2 A7,,CLR   P2.7
00CD,C2 8E,,CLR   TR1   ;KEYLOCK
00CF,D2 A8,,SETB  EX0
,,,;===========
00D1,,XS,XS:
,,,
00D1,12 02 CE,,LCALL DISTIME
00D4,80 AA,,SJMP  MAIN
,,,;=====================================================
,,,;计时器T1中断服务程序
,,,;=====================================================
00D6,,IT1P,IT1P:
00D6,C0 D0,,PUSH PSW
00D8,C0 E0,,PUSH ACC
00DA,75 8D 63,,MOV  TH1,#63H
00DD,75 8B 18,,MOV  TL1,#18H
00E0,D5 44 67,,DJNZ COUNT1,COMEBACK
00E3,75 44 B4,,MOV  COUNT1,#180
,,,
00E6,,KAISHI,KAISHI:
00E6,D5 41 03,,DJNZ HEAT1,LOGIC1
00E9,75 41 05,,MOV  HEAT1,#05H     ;TIME:  00 01 02 03 04 05   06 07 08 09 10 11 12 13
00EC,,LOGIC1,LOGIC1:             ;HEAT1: 5   4  3  2  1  5   4  3  2  1  5  4  3  2
00EC,E5 41,,MOV  A,HEAT1        ;FLAG4: 0   1  0  0  0  0   1  0  0  0  0  1  0  0
00EE,B4 04 04,,CJNE A,#4,LOGIC2    ;FLAG5: 0   0  0  0  1  0   0  0  0  1  0  0  0  0
00F1,D2 03,,SETB FLAG4
00F3,80 0B,,SJMP LOGIC6
00F5,,LOGIC2,LOGIC2:
00F5,C2 03,,CLR  FLAG4
00F7,B4 01 04,,CJNE A,#1,LOGIC3
00FA,D2 04,,SETB FLAG5
00FC,80 02,,SJMP LOGIC6
00FE,,LOGIC3,LOGIC3:
00FE,C2 04,,CLR  FLAG5
0100,,LOGIC6,LOGIC6:
0100,30 02 0B,,JNB   FLAG3,LOGIC
0103,D5 43 08,,DJNZ  FEED2,LOGIC
0106,75 43 02,,MOV   FEED2,#2
0109,75 42 08,,MOV   FEED1,#8
010C,C2 02,,CLR   FLAG3
010E,,LOGIC,LOGIC:
010E,05 38,,INC   SECOND             ;秒.
0110,E5 38,,MOV   A,SECOND
,,,
0112,B4 3C 35,,CJNE  A,#60,COMEBACK
,,,
0115,30 01 0B,,JNB   FLAG2,LOGIC8
0118,D5 40 08,,DJNZ  WATER2,LOGIC8
011B,75 40 0A,,MOV   WATER2,#10
011E,75 39 08,,MOV   WATER1,#8
0121,C2 01,,CLR   FLAG2
0123,,LOGIC8,LOGIC8:
0123,75 38 00,,MOV   SECOND,#00H
0126,05 37,,INC   MINUTE             ;分.
0128,E5 37,,MOV   A,MINUTE
,,,
012A,B4 3C 1D,,CJNE  A,#60,COMEBACK
,,,
012D,20 02 05,,JB    FLAG3,LOGIC4
0130,D5 42 02,,DJNZ  FEED1,LOGIC4
0133,D2 02,,SETB  FLAG3
0135,,LOGIC4,LOGIC4:
0135,20 01 05,,JB    FLAG2,LOGIC7
0138,D5 39 02,,DJNZ  WATER1,LOGIC7
013B,D2 01,,SETB  FLAG2
013D,,LOGIC7,LOGIC7:
013D,75 37 00,,MOV   MINUTE,#00H
0140,05 36,,INC   HOUR               ;时
0142,E5 36,,MOV   A,HOUR
,,,
0144,B4 18 03,,CJNE  A,#24,COMEBACK
,,,
0147,75 36 00,,MOV   HOUR,#00H
014A,,COMEBACK,COMEBACK:
014A,D0 E0,,POP ACC
014C,D0 D0,,POP PSW
014E,32,,RETI
,,,;=====================================================
,,,;采集温度命令发出,及温度数据采回.
,,,;=====================================================
014F,,TRANSFORM,TRANSFORM:
014F,12 01 78,,          LCALL RESET0
0152,30 00 FA,,          JNB   FLAG1,TRANSFORM
0155,74 CC,,          MOV A,#0CCH         ; 跳过ROM匹配
0157,12 01 A2,,          LCALL WRITE
015A,74 44,,          MOV A,#044H         ; 发出温度转换命令
015C,12 01 A2,,          LCALL WRITE
015F,22,,          RET
,,,
0160,C2 8E,GETTEMP,GETTEMP:  CLR   TR1
0162,12 01 78,,          LCALL RESET0
0165,30 00 F8,,          JNB   FLAG1,GETTEMP
0168,74 CC,,          MOV A,#0CCH         ; 跳过ROM匹配
016A,12 01 A2,,          LCALL WRITE
016D,74 BE,,          MOV A,#0BEH         ; 发出读温度命令
016F,12 01 A2,,          LCALL WRITE
0172,12 01 BB,,          LCALL  READ         ;读温度数据
0175,D2 8E,,          SETB   TR1
0177,22,,          RET
,,,;=====================================================
,,,;DS18B20 复位与检测子程序
,,,;FLAG1=1 OK, FLAG1=0 ERROR
,,,;=====================================================
0178,,RESET0,RESET0:
0178,D2 97,,          SETB TX
017A,00,,          NOP
017B,C2 97,,          CLR TX
017D,7F 64,,          MOV R7,#64H            ;主机发出延时600微秒的复位低脉冲
017F,7E 03,,          MOV R6,#03H
0181,DF FE,RESET1,RESET1:   DJNZ R7,$              ;200v
0183,7F 64,,          MOV R7,#64H
0185,DE FA,,          DJNZ R6,RESET1
0187,D2 97,,          SETB TX        ;然后拉高数据线
0189,00,,          NOP
018A,7F 25,,          MOV R7,#25H
018C,30 96 04,RESET2,RESET2:   JNB RX,RESET3  ;等待DS18B20回应
018F,DF FB,,          DJNZ R7,RESET2
0191,80 04,,          SJMP RESET4            ; 延时
0193,D2 00,RESET3,RESET3:   SETB FLAG1            ; 置标志位,表示DS1820存在
0195,80 04,,          SJMP RESET5
0197,C2 00,RESET4,RESET4:   CLR FLAG1             ; 清标志位,表示DS1820不存在
0199,80 04,,          SJMP RESET6
019B,78 F0,RESET5,RESET5:   MOV R0,#0F0H
019D,D8 FE,,          DJNZ R0,$             ; 时序要求延时一段时间
019F,D2 97,RESET6,RESET6:   SETB TX
01A1,22,,          RET
,,,;======================================================
,,,;写1BYTE数据
,,,;======================================================
01A2,7F 08,WRITE,WRITE:  MOV R7,#8            ;一共8位数据
01A4,C2 D7,,        CLR CY
01A6,,WR1,WR1:
01A6,C2 97,,        CLR TX        ;开始写入DS18B20总线要处于复位(低)状态
01A8,7E 09,,        MOV R6,#09
01AA,DE FE,,        DJNZ R6,$            ;总线复位保持18微妙以上
01AC,13,,        RRC A                ;把一个字节DATA 分成8个BIT环移给C
01AD,92 97,,        MOV TX,C      ;写入一个BIT
01AF,7E 17,,        MOV R6,#23
01B1,DE FE,,        DJNZ R6,$            ;等待46微妙
01B3,D2 97,,        SETB TX      ;重新释放总线
01B5,00,,        NOP
01B6,DF EE,,        DJNZ R7,WR1          ;写入下一个BIT
01B8,D2 97,,        SETB TX
01BA,22,,        RET
,,,;======================================================
,,,;从DS18B20中读出温度低位、高位和报警值TH、TL
,,,;存入26H、27H、28H、29H
,,,;======================================================
01BB,7C 04,READ,READ:    MOV R4,#4            ; 将温度高位和低位从DS18B20中读出
01BD,79 26,,         MOV R1,#26H          ; 存入26H、27H、28H、29H
01BF,7A 08,RE00,RE00:    MOV R2,#8
01C1,C3,RE01,RE01:    CLR C
01C2,D2 97,,         SETB TX
01C4,00,,         NOP
01C5,00,,         NOP
01C6,C2 97,,         CLR TX        ;读前总线保持为低
01C8,00,,         NOP
01C9,00,,         NOP
01CA,00,,         NOP
01CB,D2 97,,         SETB TX       ;开始读总线释放
01CD,7B 09,,         MOV R3,#09           ;延时18微妙
01CF,DB FE,,         DJNZ R3,$
01D1,A2 96,,         MOV C,RX      ;从DS18B20总线读得一个BIT
01D3,7B 17,,         MOV R3,#23
01D5,DB FE,,         DJNZ R3,$            ;等待46微妙
01D7,13,,         RRC A                ;把读得的位值环移给A
01D8,DA E7,,         DJNZ R2,RE01         ;读下一个BIT
01DA,F7,,         MOV @R1,A
01DB,09,,         INC R1
01DC,DC E1,,         DJNZ R4,RE00
01DE,22,,         RET
,,,
,,,;=======================================================
,,,;采集温度转化:符号位存于TEMP1(30H),
,,,              ;整数位存于TEMP2(31H),
,,,              ;小数位存于TEMP3(32H).
,,,;=======================================================
01DF,,CONVERT,CONVERT:
01DF,12 01 ED,,            LCALL CONVERTZ
01E2,E5 30,,            MOV A,TEMP1
01E4,B4 00 02,,            CJNE A,#00H,LOOP
01E7,80 03,,            SJMP FANHUI
01E9,12 02 1B,LOOP,LOOP:       LCALL CONVERTF
01EC,22,FANHUI,FANHUI:     RET
,,,
01ED,,CONVERTZ,CONVERTZ:   ;采集温度为+。
01ED,7F 03,,            MOV R7,#3
01EF,E5 27,,            MOV A,27H
01F1,C3,CONVERT1,CONVERT1:   CLR C
01F2,13,,            RRC A
01F3,DF FC,,            DJNZ R7,CONVERT1
01F5,F5 30,,            MOV TEMP1,A
,,,
01F7,7F 04,,            MOV R7,#4
01F9,E5 27,,            MOV A,TEMPH
01FB,85 26 34,,            MOV ZC2,TEMPL
01FE,C3,CONVERT2,CONVERT2:   CLR C
01FF,13,,            RRC A
0200,F5 33,,            MOV ZC1,A
0202,E5 26,,            MOV A,TEMPL
0204,13,,            RRC A
0205,F5 26,,            MOV TEMPL,A
0207,E5 33,,            MOV A,ZC1
0209,DF F3,,            DJNZ R7,CONVERT2
020B,E5 26,,            MOV A,TEMPL
020D,C2 E7,,            CLR ACC.7
020F,F5 31,,            MOV TEMP2,A
0211,85 34 26,,            MOV TEMPL,ZC2
,,,
0214,E5 26,CONVERT3,CONVERT3:   MOV A,TEMPL
0216,54 0F,,            ANL A,#0FH
0218,F5 32,,            MOV TEMP3,A
021A,22,,            RET
,,,
021B,,CONVERTF,CONVERTF:   ;采集温度为-。
021B,E5 32,,           MOV A,TEMP3
021D,F4,,           CPL A
021E,54 0F,,           ANL A,#0FH
0220,F5 32,,           MOV TEMP3,A
,,,
0222,E5 31,,           MOV A,TEMP2
0224,F4,,           CPL A
0225,54 7F,,           ANL A,#7FH
0227,F5 31,,           MOV TEMP2,A
,,,
0229,E5 32,,           MOV A,TEMP3
022B,24 01,,           ADD A,#01H
022D,B4 10 0B,,           CJNE A,#10H,LOOP1
0230,75 32 00,,           MOV TEMP3,#0
0233,E5 31,,           MOV A,TEMP2
0235,24 01,,           ADD A,#01H
0237,F5 31,,           MOV TEMP2,A
0239,80 02,,           SJMP RETURN
023B,F5 32,LOOP1,LOOP1:     MOV TEMP3,A
023D,22,RETURN,RETURN:    RET
,,,;=======================================================
,,,;延时子程序
,,,;=======================================================
023E,,DELAY,DELAY:                        ;(1S)
023E,7F 0A,,         MOV R7,#10
0240,7E C8,D1,D1:      MOV R6,#200
0242,7D FA,D2,D2:      MOV R5,#250
0244,DD FE,,         DJNZ R5,$
0246,DE FA,,         DJNZ R6,D2
0248,DF F6,,         DJNZ R7,D1
024A,22,,         RET
,,,
024B,,DELAY1,DELAY1:                       ;(4MS)
024B,7E 0A,,         MOV R6,#10
024D,7D C8,D3,D3:      MOV R5,#200
024F,DD FE,,         DJNZ R5,$
0251,DE FA,,         DJNZ R6,D3
0253,22,,         RET
,,,;=======================================================
,,,;温度表
,,,;=======================================================
0254,00 01 01 02,TAB1,TAB1: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H,06H,07H,08H,08H,09H,09H     ;采集小数位(四舍五入).
,,,
0264,BF 86 DB CF,TAB2,TAB2: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH                     ;个位带小数点(共阴带小

⌨️ 快捷键说明

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