📄 text1.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 + -