?? 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 + -