?? main.sdi
字號:
000B,,,DAT BIT P3.7 ;數(shù)據(jù)通信口
,,,swpH equ 0d2H
,,,swpL equ 0ffH
,,,WDLSB DATA 30H ;讀出的溫度低字節(jié)
,,,WDMSB DATA 31H ;讀出的溫度高字節(jié)
,,,;***************************************************************
,,, ORG 0000H
0000,02 00 28,, LJMP MAIN
,,, ORG 000BH
000B,02 00 0E,, LJMP TMR0 ;定時顯示,用定時器0
,,,
,,,;********************************************************
,,,;定時顯示子程序
000E,,TMR0,TMR0:
000E,75 8C D2,, MOV TH0,#swpH ;定時器10MS中斷
0011,75 8A FF,,MOV TL0,#swpL
0014,20 21 08,, JB 21H,dsl;用于高低位輪流顯示
0017,85 42 80,,MOV P0,42H;高位
001A,43 80 20,,ORL P0,#00100000B
001D,80 06,, sjmp kkk
001F,,dsl,dsl:
001F,85 43 80,,MOV P0,43H;低位
0022,43 80 10,,ORL P0,#00010000B
0025,,kkk,kkk:
0025,B2 21,, cpl 21H
0027,32,,RETI
,,,
,,,;主程序:
0028,,MAIN,MAIN:
0028,,TOINIT,TOINIT:
,,,;定時器0的初始化
0028,C2 AF,, CLR EA
002A,75 89 01,, MOV TMOD,#01H
002D,75 8C D2,, MOV TH0,#swpH ;定時器10MS中斷
0030,75 8A FF,,MOV TL0,#swpL
0033,D2 AF,, SETB EA
0035,D2 A9,,SETB ET0
0037,D2 8C,, SETB TR0
,,,;***********************************************************
,,,;清顯示緩沖
0039,7A 02,, MOV R2,#2
003B,78 42,,MOV R0,#42H ;
003D,,OVER,OVER:
003D,76 00,, MOV @R0,#00H;
003F,08,,INC R0
0040,DA FB,,DJNZ R2,OVER
,,,
0042,,LOOP,LOOP:
0042,12 00 47,,LCALL DSWD ;調(diào)用讀出DS18B20溫度程序
0045,80 FB,,SJMP LOOP
,,,
,,,;**********************************************************
0047,,DSWD,DSWD:
0047,12 00 C7,, LCALL RSTSNR;調(diào)用復(fù)位程序
004A,30 D5 3D,, JNB F0,KEND ;如果沒有應(yīng)答,返回主程序
004D,78 CC,, MOV R0,#0CCH
004F,12 00 AB,, LCALL SEND_BYTE ;跳過ROM匹配
0052,78 44,, MOV R0,#44H ;發(fā)出溫度轉(zhuǎn)換命令
0054,12 00 AB,, LCALL SEND_BYTE
0057,D2 AF,, SETB EA
0059,75 48 01,, MOV 48H,#1 ;延時75ms以上準(zhǔn)備讀
005C,,SS2,SS2:
005C,75 49 FF,, MOV 49H,#255
005F,,SS1,SS1:
005F,75 4A FF,, MOV 4AH,#255
0062,,SS0,SS0:
0062,D5 4A FD,, DJNZ 4AH,SS0
0065,D5 49 F7,, DJNZ 49H,SS1
0068,D5 48 F1,, DJNZ 48H,SS2
006B,C2 AF,, CLR EA
006D,12 00 C7,, LCALL RSTSNR
0070,30 D5 17,, JNB F0,KEND
0073,78 CC,, MOV R0,#0CCH ;跳過ROM匹配
0075,12 00 AB,, LCALL SEND_BYTE
0078,78 BE,, MOV R0,#0BEH ;發(fā)出讀溫度命令
007A,12 00 AB,, LCALL SEND_BYTE
007D,12 00 BD,, LCALL READ_BYTE
0080,F5 30,, MOV WDLSB,A
0082,12 00 BD,, LCALL READ_BYTE
0085,F5 31,, MOV WDMSB,A
0087,12 00 8D,, LCALL TRANS12
008A,,KEND,KEND:
008A,D2 AF,, SETB EA
008C,22,, RET
,,,;**********************************************************
,,,;溫度轉(zhuǎn)換程序(只取整數(shù)) ,30H=LSB,31H=MSB;
008D,,TRANS12,TRANS12:
008D,E5 30,, MOV A,30H
008F,54 F0,, ANL A,#0F0H
0091,F5 3A,, MOV 3AH,A
0093,E5 31,, MOV A,31H
0095,54 0F,, ANL A,#0FH
0097,45 3A,, ORL A,3AH
0099,C4,, SWAP A
009A,75 F0 0A,, MOV B,#10
009D,84,, DIV AB
,,, ;MOV 42H,A
009E,85 F0 43,, MOV 43H,B ;
00A1,75 F0 0A,, mov b,#10
00A4,84,, div ab
00A5,85 F0 42,, mov 42H,B
00A8,F5 41,, mov 41H,A
00AA,22,, RET
,,,;*************************************************
00AB,,SEND_BYTE,SEND_BYTE: ;發(fā)送一個字節(jié)程序
00AB,E8,, MOV A,R0
00AC,7D 08,, MOV R5,#8
00AE,C3,SEN3,SEN3: CLR C
00AF,13,, RRC A
00B0,40 05,, JC SEN1
00B2,12 00 F0,, LCALL WRITE_0
00B5,80 03,, SJMP SEN2
00B7,12 00 F9,SEN1,SEN1: LCALL WRITE_1
00BA,DD F2,SEN2,SEN2: DJNZ R5,SEN3 ; 循環(huán)8次,寫一個字節(jié)
00BC,22,, RET
,,,;*************************************************
,,,;讀一個字節(jié)程序
00BD,,READ_BYTE,READ_BYTE:
00BD,7D 08,, MOV R5,#8
00BF,12 01 07,READ1,READ1: LCALL READ
00C2,13,, RRC A
00C3,DD FA,, DJNZ R5,READ1 ; 循環(huán)8次,讀一個字節(jié)
00C5,F8,, MOV R0,A
00C6,22,, RET
,,, ;*************************************************
,,,;復(fù)位程序,如果復(fù)位置位F0,沒有就復(fù)位F0
00C7,D2 B7,RSTSNR,RSTSNR: SETB DAT
00C9,00,, NOP
00CA,00,, NOP
00CB,C2 B7,, CLR DAT
00CD,7E FA,, MOV R6,#250 ;主機(jī)發(fā)復(fù)位脈沖持續(xù)3μs×200=600μs
00CF,DE FE,, DJNZ R6,$
00D1,7E 32,, MOV R6,#50
00D3,DE FE,, DJNZ R6,$
00D5,D2 B7,, SETB DAT ;主機(jī)釋放總線,口線改為輸入
00D7,7E 0F,, MOV R6,#15
00D9,DE FE,, DJNZ R6,$
00DB,12 00 E5,, CALL CHCK ;調(diào)用應(yīng)答檢查程序
00DE,7E 3C,, MOV R6,#60
00E0,DE FE,, DJNZ R6,$
00E2,D2 B7,, SETB DAT
00E4,22,, RET
,,, ;*************************************************
00E5,A2 B7,CHCK,CHCK: MOV C,DAT
00E7,40 04,, JC RST0
00E9,D2 D5,, SETB F0 ;檢測到信號,置位F0
00EB,80 02,, SJMP CHCK0
00ED,C2 D5,RST0,RST0: CLR F0 ;未準(zhǔn)備好F0復(fù)位
00EF,22,CHCK0,CHCK0: RET
,,,;*************************************************
,,,;寫0
00F0,,WRITE_0,WRITE_0:
00F0,C2 B7,, CLR DAT
00F2,7E 1E,, MOV R6,#30
00F4,DE FE,, DJNZ R6,$
00F6,D2 B7,, SETB DAT
00F8,22,, RET
,,,;*************************************************
,,,;寫1
00F9,,WRITE_1,WRITE_1:
00F9,C2 B7,, CLR DAT
00FB,00,, NOP
00FC,00,, NOP
00FD,00,, NOP
00FE,00,, NOP
00FF,00,, NOP
0100,D2 B7,, SETB DAT
0102,7E 1E,, MOV R6,#30
0104,DE FE,, DJNZ R6,$
0106,22,, RET
,,,;*************************************************
,,,;讀一位數(shù)據(jù)程序
0107,D2 B7,READ,READ: SETB DAT ;先復(fù)位至少1US產(chǎn)生讀起始信號
0109,00,, NOP
010A,00,, NOP
010B,C2 B7,, CLR DAT
010D,00,, NOP
010E,00,, NOP
010F,D2 B7,, SETB DAT ;置位DAT準(zhǔn)備接收數(shù)據(jù)
0111,00,, NOP
0112,00,, NOP
0113,00,, NOP
0114,00,, NOP
0115,00,, NOP
0116,00,, NOP
0117,00,, NOP
0118,A2 B7,, MOV C,DAT
011A,7E 17,, MOV R6,#23
011C,DE FE,, DJNZ R6,$
011E,22,, RET
,,,;**********************************************
,,,;13毫秒延時子程序
011F,7C 14,DELAY10,DELAY10:MOV R4,#20
0121,7D 1E,D2,D2: MOV R5,#30
0123,DD FE,, DJNZ R5,$
0125,DC FA,, DJNZ R4,D2
0127,22,, RET
,,,
000E,,, end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -