📄 tempsend0531.asm
字号:
ORG 0000H
LJMP MAIN
ORG 0200H
MAIN: CLR P1.0
MOV TMOD,#20H
MOV SCON,#40H
MOV PCON,#00H
MOV TL1,#0FAH
MOV TH1,#0FAH
SETB TR1
CLR P1.1
CLR A
LCALL GET_TEMP
CPL P1.1
LCALL T11
LCALL START
LJMP MAIN
START: MOV R1,#LEN3; 发送10个55h,同步字
TX0: MOV A,#55H
MOV SBUF,A
JNB TI,$
CLR TI
DJNZ R1,TX0
TX1: MOV R5,#00H; 校验和
MOV A,#0FFH; 发送FFh后紧跟00h不易出错,作为起始标志
MOV SBUF,A
JNB TI,$
CLR TI
ADD A,R5; 累加发送数据
MOV R5,A; 存储校验和
MOV A,#0FFH
MOV SBUF,A
JNB TI,$
CLR TI
ADD A,R5; 累加发送数据
MOV R5,A; 存储校验和
MOV A,#00H
MOV SBUF,A
JNB TI,$
CLR TI
ADD A,R5; 累加发送数据
MOV R5,A; 存储校验和
TX3: CLR A; 发送温度数据
MOV A,R3; 发送温度低字节
MOV SBUF,A
JNB TI,$
CLR TI
ADD A,R5; 累加发送数据
MOV R5,A; 存储校验和
MOV A,R4; 发送温度低字节
MOV SBUF,A
JNB TI,$
CLR TI
ADD A,R5; 累加发送数据
MOV R5,A; 存储校验和
MOV A,R5; 发送校验和
MOV SBUF,A
JNB TI,$
CLR TI
CPL P1.1
TX4: MOV A,#7FH; 发送7Fh,结束标志
MOV SBUF,A
JNB TI,$
CLR TI
RET
t11: MOV R0,#0FFH
time3: MOV R1,#0FFH
TIME1: MOV R2,#0Fh
time2: DJNZ R2,time2
DJNZ R1,TIME1
DJNZ R0,TIME3
RET
GET_TEMP:
CLR EA ; 使用ds1820一定要禁止任何中断产生
LCALL INT ; 调用初使化子程序
MOV A,#0CCH
LCALL WRITE ; 送入跳过ROM命令
MOV A, #44H
LCALL WRITE ; 送入温度转换命令
LCALL INT ; 温度转换完全,再次初使化ds1820
MOV A,#0CCH
LCALL WRITE ; 送入跳过ROM命令
MOV A,#0BEH
LCALL WRITE ; 送入读温度暂存器命令
LCALL READ
MOV R3,A ; 读出温度值低字节存入R3
LCALL READ
MOV R4,A ;读出谩度值高字节存入R4
RET
INT: CLR EA ; 初始化ds1820子程序
L0: CLR P1.7 ; ds1820总线为低复位电平
MOV R2,#200
L1: CLR P1.7
DJNZ R2,L1 ;总线复位电平保持400us
SETB P1.7 ; 释放ds1820总线
MOV R2,#30
L4: DJNZ R2,L4 ; 释放ds1820总线保持60us
CLR C ;清存在信号
ORL C,P1.7
JC L0 ; 存在吗?不存在则重新来
MOV R6,#80
L5: ORL C,P1.7
JC L3
DJNZ R6,L5
SJMP L0
L3: MOV R2,#240
L2: DJNZ R2,L2
RET
WRITE: CLR EA;向ds1820写操作命令子程序
MOV R3,#8 ;写入ds1820的bit数,一个字节8个bit
WR1: SETB P1.7
MOV R4,#8
RRC A ; 把一个字节data(A)分成8个bit环移给C
CLR P1.7 ; 开始写入ds1820总线要处于复位(低)状态
WR2: DJNZ R4,WR2 ; ds1820总线复位保持16us
MOV P1.7,C ;写入一个bit
MOV R4,#20
WR3: DJNZ R4,WR3 ;等待40us
DJNZ R3,WR1 ;写入下一个bit
SETB P1.7 ;重新释放ds1820总线
RET
READ: CLR EA
MOV R6,#8 ;连续读8个bit
RE1: CLR P1.7 ;读前总线保持为低
MOV R4,#4
NOP
SETB P1.7 ;开始读总线释放
RE2: DJNZ R4,RE2 ;持续8us
MOV C,P1.7 ;从ds1820总线读得一个bit
RRC A ;把读得的位值环移给A
MOV R5,#30
RE3: DJNZ R5,RE3 ;持续60us
DJNZ R6,RE1 ;读下一个bit
SETB P1.7 ;重新释放ds1820总线
RET
ORG 0500H
DATA1: DB 'Hello! I am from SUDA.'
DATA2: DB 'This is a test program.'
LEN1 DATA 22
LEN2 DATA 23
LEN3 DATA 10
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -