📄 综合.txt
字号:
;***********************************************************************
;工作内存及常数定义
;***********************************************************************
DATAL DATA 26H
DATAH DATA 27H
DATAA DATA 70H
DATAB DATA 71H
DATAC DATA 72H
DATAD DATA 73H
TEMPHC DATA 28H
TEMPLC DATA 29H
DATAHEAD EQU 36H
;***********************************************************************
;引脚定义
;***********************************************************************
TEMPDIN BIT P1.0
SDDIN BIT P1.1
SDCS BIT P1.2
SDCLOCK BIT P1.3
TSDISTING BIT P1.4
STDISTING BIT P1.5
;***********************************************************************
;中断向量区
;***********************************************************************
ORG 0000H
LJMP START
;***********************************************************************
;系统初始化
;***********************************************************************
ORG 100H
START: SETB TSDISTING
CLR STDISTING
MOV R0,#20H
MOV R1,#60H
CLSMEM: MOV @R0,#00H
INC R0
DJNZ R1,CLSMEM
;***********************************************************************
;主程序
;***********************************************************************
MAIN:
LCALL READTEMP
LCALL PROCESSTEMP
LCALL DISPBCD
LCALL DISPLAY
LCALL SEND
LCALL PROCESSD
LCALL DISPLAY
LCALL SEND
LJMP MAIN
NOP
NOP
NOP
LJMP START
;***********************************************************
;***********************************************************************
;子程序区
;***********************************************************************
;读温度子程序
;***********************************************************************
READTEMP: LCALL INITDS1820
MOV A,#0CCH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV A,#44H
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
DEL1000MS: MOV 50H,#08H
DEL100MS: MOV 51H,#0FAH
DEL10MS: MOV 52H,#0FH
DEL1MS: DJNZ 52H,DEL1MS
DJNZ 51H,DEL10MS
DJNZ 50H,DEL100MS
READTEMP1: LCALL INITDS1820
MOV A,#0CCH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV A,#0BEH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV R5,#09H
MOV R0,#DATAHEAD
MOV B,#00H
READTEMP2: LCALL READDS1820
MOV @R0,A
INC R0
READTEMP21: LCALL CRC8CAL
DJNZ R5,READTEMP2
MOV A,B
JNZ READTEMPOUT
MOV A,DATAHEAD+0
MOV DATAL,A
MOV A,DATAHEAD+1
MOV DATAH,A
READTEMPOUT: RET
;***********************************************************************
;复位DS18B20
;***********************************************************************
INITDS1820: SETB TEMPDIN
NOP
NOP
CLR TEMPDIN
MOV R6,#0A0H
DJNZ R6,$
MOV R6,#0A0H
DJNZ R6,$
SETB TEMPDIN
MOV R6,#32H
DJNZ R6,$
MOV R6,#3CH
LOOP1820: MOV C,TEMPDIN
JC INITDS1820OUT
DJNZ R6,LOOP1820
MOV R6,#064H
DJNZ R6,$
SJMP INITDS1820
RET
INITDS1820OUT: SETB TEMPDIN
RET
;***********************************************************************
;读ds18b20程序,读取一字节的数据
;***********************************************************************
READDS1820: MOV R7,#08H
SETB TEMPDIN
NOP
NOP
READDS1820LOOP: CLR TEMPDIN
NOP
NOP
NOP
SETB TEMPDIN
MOV R6,#07H
DJNZ R6,$
MOV C,TEMPDIN
MOV R6,#3CH
DJNZ R6,$
RRC A
SETB TEMPDIN
DJNZ R7,READDS1820LOOP
MOV R6,#3CH
DJNZ R6,$
RET
;***********************************************************************
;写DS18B20程序,一个字节
;***********************************************************************
WRITEDS1820: MOV R7,#08H
SETB TEMPDIN
NOP
NOP
WRITEDS1820LOP: CLR TEMPDIN
MOV R6,#07H
DJNZ R6,$
RRC A
MOV TEMPDIN,C
MOV R6,#34H
DJNZ R6,$
SETB TEMPDIN
DJNZ R7,WRITEDS1820LOP
RET
;***********************************************************************
;处理温度BCD码子程序
;***********************************************************************
PROCESSTEMP:
MOV A,DATAH
ANL A,#80H
JZ TEMPC11
CLR C
MOV A,DATAL
CPL A
ADD A,#01H
MOV DATAL,A
MOV A,DATAH
CPL A
ADDC A,#00H
MOV DATAH,A
MOV TEMPHC,#0b0H
SJMP TEMPC11
TEMPC11: MOV A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,DATAL
ANL A,#0FH
MOV DPTR,#TEMPDOTTAB
MOVC A,@A+DPTR
MOV TEMPLC,A
MOV A,DATAL
ANL A,#0F0H
SWAP A
MOV DATAL,A
MOV A,DATAH
ANL A,#07H
SWAP A
ORL A,DATAL
LCALL HEX2BCD1
MOV DATAL,A
ANL A,#0F0H
ORL A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,DATAL
ANL A,#0FH
SWAP A
ORL A,TEMPLC
MOV TEMPLC,A
MOV A,R7
JZ TEMPC12
ANL A,#0FH
SWAP A
MOV R7,A
MOV A,TEMPHC
ANL A,#0FH
ORL A,R7
MOV TEMPHC,A
TEMPC12: RET
;***********************************************************************
;小数部分码表
;***********************************************************************
TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB 06H,07H,08H,08H,09H,09H
;***********************************************************************
;显示区BCD码温度值刷新子程序
;***********************************************************************
DISPBCD: MOV A,TEMPLC
ANL A,#0FH
MOV 70H,A
MOV A,TEMPLC
SWAP A
ANL A,#0FH
MOV 71H,A
MOV A,TEMPHC
ANL A,#0FH
MOV 72H,A
MOV A,TEMPHC
SWAP A
ANL A,#0FH
MOV 73H,A
RET
;***********************************************************************
;***********************************************************************
;读湿度子程序
;***********************************************************************
READSD: SETB SDCS
CLR SDCLOCK
MOV R0,#00H
CLR SDCS
MOV R6,#08H
DJNZ R6,$
NXT:SETB SDCLOCK
MOV C,SDDIN
RLC A
CLR SDCLOCK
INC R0
CJNE R0,#8H,NXT
MOV R0,#00H
SETB SDCS
MOV DATAL,A
RET
NOP
;***********************************************************************
;***********************************************************************
;湿度处理子程序
;***********************************************************************
PROCESSD:
MOV DATAD,#00H
MOV DATAA,#00H
MOV A,DATAL
MOV B,#02H
DIV AB
MOV R4,B
MOV B,#0AH
DIV AB
MOV DATAC,A
MOV DATAB,B
MOV A,R4
JNZ CASE1
RET
CASE1: MOV DATAA,#05H
RET
;***********************************************************************
;显示子程序
;***********************************************************************
DISPLAY: CPL TSDISTING
CPL STDISTING
MOV R1,#70H
MOV R5,#0FEH
PLAY: MOV P0,#0FFH
MOV A,R5
MOV P2,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
JB ACC.1,LOOP5
CLR P0.7
LOOP5: LCALL DL1MS
INC R1
MOV A,R5
JNB ACC.3,ENDOUT
RL A
MOV R5,A
AJMP PLAY
ENDOUT: RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0C0H,0BFH
DL1MS: MOV R6,#14H
DL1: DJNZ R7,DL2
DL2: DJNZ R6,DL1
RET
;***********************************************************************
;8字节校验程序
;***********************************************************************
CRC8CAL: PUSH ACC
MOV R7,#08H
CRC8LOOP1: XRL A,B
RRC A
MOV A,B
JNC CRC8LOOP2
XRL A,#18H
CRC8LOOP2: RRC A
MOV B,A
POP ACC
RR A
PUSH ACC
DJNZ R7,CRC8LOOP1
POP ACC
RET
;***********************************************************************
;单字节十六进制转换为BCD
;***********************************************************************
HEX2BCD1: MOV B,#64H
DIV AB
MOV R7,A
MOV A,#0AH
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
;***********************************************************************
;与pc机或者PTR2030接口程序
;***********************************************************************
SEND:
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV PCON,#00H
SETB TR1
MOV SCON,#0D8H
MOV R0,#70H
JNB P3.6, SENDEND
SENDD: MOV SBUF,@R0
OK: JBC TI,LOOP
SJMP OK
LOOP: INC R0
CJNE R0,#74H,SENDD
SENDEND: RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -