📄 jp.asm
字号:
FLAG1 EQU 20H
WENDUH DATA 35H
WENDUL DATA 36H
TDH DATA 37H
TDL DATA 38H
TDOH DATA 39H
TDOL DATA 3AH
JISZ DATA 3BH
org 0000h
ajmp start
org 0100h
start: mov scon,#00h
MOV R7,#06H
MOV R0,#00H
MOV DPTR,#TAB
DL0: MOV A,R0
MOVC A,@A+DPTR
ACALL AA
INC R0
DJNZ R7,DL0
clr p3.3
sjmp $
MOV R3,#06H
MOV R0,#50H
SJD: MOV @R0,#00H
INC R0
DJNZ R3,SJD
MAIN: acall key
MOV 55H,54H
MOV 54H,53H
MOV 53H,52H
MOV 52H,51H
MOV 51H,50H
mov dptr,#plo
MOV A,58H
MOV B,#03H
MUL AB
jmp @a+dptr
j11: mov 50h,#01h
ljmp dd1
j12: mov 50h,#02h
ljmp dd1
j13: mov 50h,#03h
ljmp dd1
j14: mov 50h,#04h
ljmp dd1
j15: mov 50h,#05h
ljmp dd1
j16: mov 50h,#06h
ljmp dd1
j17: mov 50h,#07h
ljmp dd1
j18: mov 50h,#08h
ljmp dd1
j21: mov 50h,#09h
ljmp dd1
j22: mov 50h,#00h
ljmp dd1
j23: jmp dd1
j24: mov 50h,#0bh
ljmp dd1
j25: mov 50h,#0ch
ljmp dd1
j26: mov 50h,#0dh
ljmp dd1
j27: mov 50h,#0eh
ljmp dd1
j28: mov 50h,#0fh
ljmp dd1
dd:
ACALL GET_T
ACALL WENDUCL
DJNZ JISZ,CZ
AJMP DD
CZ: INC JISZ
INC JISZ
MOV A,#100
CJNE A,JISZ, CX
MOV JISZ,#02H
CX: MOV 50H,TDL
MOV 51H,TDH
MOV 52H,#0fH
MOV 53H,#0fH
MOV 54H,#0fH
MOV 55H,#0fH
acall Disp
ACALL DELAY2S
ajmp DD
dd1: acall Disp
ajmp MAIN
key: clr p3.3
mov a,#00h
mov sbuf,a
kl0: jnb ti,kl0
clr ti
kl1: jnb p1.0,pk1
jb p1.1,kl1
pk1: acall d10ms
jnb p1.0,pk2
jb p1.1,kl1
pk2: mov r7,#08h
mov r6,#07fh
mov r3,#00h
mov a,r6
kl5: mov sbuf,a
kl2: jnb ti,kl2
clr ti
jnb p1.0,pk0
jb p1.1,net
mov r4,#08h
ajmp pk3
pk0: mov r4,#00h
pk3: mov a,#00h
mov sbuf,a
kl3: jnb ti,kl3
clr ti
kl4: jnb p1.0,kl4
jnb p1.1,kl4
mov a,r4
add a,r3
mov 58h,a
ret
net: mov a,r6
rr a
mov r6,a
inc r3
djnz r7,kl5
ret
disp: SETB p3.3
step1: mov scon,#00h
show: mov r7,#06h
mov r0,#50h
loop1:mov a,@r0
dir0: mov dptr,#desg
movc a,@a+dptr
mov 20h,a
dir1: mov sbuf,a
wait: jbc ti,loop2
sjmp wait
loop2:inc r0
clr ti
djnz r7,loop1
CLR p3.3
ret
;--------------ds1820 subgram------------------------------
init_1820:
SETB P2.0
NOP
CLR P2.0
;主机发出延时537微秒的复位低脉冲
MOV R1,#3
TSR1: MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB P2.0;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P2.0,TSR3;等待DS18B20回应
DJNZ R0,TSR2
AJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
;CLR P1.7;检查到DS18B20就点亮P1.7LED
AJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
;CLR P1.1
AJMP TSR7
TSR5:
MOV R0,#117
TSR6:
DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:
SETB P2.0
RET
;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOV R2,#8;一共8位数据
CLR C
WR1:
CLR P2.0
MOV R3,#6
DJNZ R3,$
RRC A
MOV P2.0,C
MOV R3,#23
DJNZ R3,$
SETB P2.0
NOP
DJNZ R2,WR1
SETB P2.0
RET
READ_1820:
MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#WENDUL ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
MOV R2,#8;数据一共有8位
RE01:
CLR C
SETB P2.0
NOP
NOP
CLR P2.0
NOP
NOP
NOP
SETB P2.0
MOV R3,#9
RE10:
DJNZ R3,RE10
MOV C,P2.0
MOV R3,#23
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
; 读出转换后的温度值
GET_T:
SETB P2.0
ACALL INIT_1820;先复位DS18B20
JB FLAG1,TSS2
NOP
;CLR P1.2
RET ; 判断DS1820是否存在?若DS18B20不存在则返回
TSS2:
;CLR P1.3;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!
MOV A,#0CCH ; 跳过ROM匹配
ACALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
ACALL WRITE_1820
;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
;LCALL DISPLAY
ACALL DELAY750
ACALL INIT_1820;准备读温度前先复位
MOV A,#0CCH ; 跳过ROM匹配
ACALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
ACALL WRITE_1820
ACALL READ_1820; 将读出的温度数据保存到35H/36H
;CLR P1.4
NOP
RET
WENDUCL:MOV A,#07H
ANL A,WENDUH
MOV WENDUH,A
MOV R1,#4
L4: CLR C
MOV A,WENDUH
RRC A
MOV WENDUH,A
MOV A,WENDUL
RRC A
MOV WENDUL,A
DJNZ R1,L4
MOV A,WENDUL
MOV B,#10
DIV AB
MOV TDH,A
MOV TDL,B
RET
;--------------------------------------------
DELAY750: mov r7,#0FFh
d75: mov r6,#0ffh
d751: djnz r6,d751
djnz r7,d75
ret
AA75: MOV SBUF,A
AA751: JNB TI,AA751
CLR TI
RET
d15us: mov r7,#07h
dl5: djnz r7,dl5
ret
DELAY2S: MOV R3,#40
D1S1: MOV R4,#90
D1S2: MOV R5,#95
D1S3: NOP
DJNZ R5,D1S3
DJNZ R4,D1S2
DJNZ R3,D1S1
RET
d10ms: mov r7,#0ah
dl: mov r6,#0ffh
dl6: djnz r6,dl6
djnz r7,dl
ret
AA: MOV SBUF,A
AA1: JNB TI,AA1
CLR TI
RET
;desg: db 0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h,0feh,0f6h,0eeh,0feh,9ch,0fch,9eh,8eh
desg: db 0fah,60h,0dch,0f4h,66h,0b6h,0beh,0e0h,0feh,0f6h,0eeh,0feh,9ah,0fah,9eh,00h
TAB: DB 0fah,0faH,1aH,1aH,9eH,6eH
;TAB: DB 0fcH,1cH,1cH,9eH,6eH
plo: ljmp j11
ljmp j12
ljmp j13
ljmp j14
ljmp j15
ljmp j16
LJMP J17
LJMP J18
ljmp j21
ljmp j22
ljmp j23
ljmp j24
ljmp j25
ljmp j26
LJMP J27
LJMP J28
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -