📄 1820program.txt
字号:
;晶振 12MHz
TEMP_H EQU 20H
TEMP_L EQU 21H
FLAG BIT P2.1
DQ BIT P2.0
ORG 0000H
;MOV DPTR,#0000H
;MOV 8EH,#01H ;AUXR中EXTRAM位置0.
MOV 60H,#00H
MOV 61H,#00H
MOV R5,#127
MOV R7,#0 ;按键计数.
MAIN:
;SETB P1.3
JNB P1.3,COUNT
LJMP MAIN
COUNT:
INC R7
CHECK:MOV A,R7
MOV B,#2
DIV AB
MOV A,B
JNZ WORK ;按了奇数次,工作
LJMP UNWORK ;按了偶数次,不工作
UNWORK: ;系统不工作.
MOV P0,#00H
CLR P1.0
MOV R3,#2
DJNZ R3,$
SETB P1.0
CLR P1.1
MOV R3,#2
DJNZ R3,$
SETB P1.1
CLR P1.2
MOV R3,#2
DJNZ R3,$
SETB P1.2
LJMP MAIN
WORK: ;系统工作.
LCALL GET_TEMP
LCALL TEMP_COV
LCALL DATA_TRAN
JZ INIT
CONTU: JNB P1.3,COUNT
LJMP CHECK
GET_TEMP: ;读出转换后的温度数据
SETB DQ
M01:
LCALL INIT_1820
JB FLAG,S01
LJMP M01
S01:
LCALL DELAY0
MOV A,#0CCH ;跳过rom匹配
LCALL WRITE_1820
MOV A,#4EH ;发写暂存存储器命令
LCALL WRITE_1820
MOV A,#1FH ;选择9位温度分辨率
LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令
LCALL WRITE_1820
NOP
LCALL DELAY1 ;94毫秒延时
M02:
LCALL INIT_1820
JB FLAG,S02
LJMP M02
S02:
LCALL DELAY0
MOV A,#0CCH ;跳过rom匹配
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令
LCALL WRITE_1820
LCALL READ_1820
RET
INIT:
MOV R5,#127
MOV 60H,#00H
MOV 61H,#00H
LJMP SD_COM
SD_COM:
LJMP CONTU
INIT_1820: ;----------初始化1820.
SETB DQ
NOP
CLR DQ
MOV R0,#250
TSR1:
DJNZ R0,TSR1;延时500us
SETB DQ
NOP
NOP
NOP
MOV R0,#40
TSR2:
JNB DQ,TSR3
DJNZ R0,TSR2
;JNB DQ,TSR3
LJMP TSR4
TSR3:
SETB FLAG
LJMP TSR5
TSR4:
CLR FLAG
LJMP TSR7
TSR5:
MOV R0,#100
TSR6:
DJNZ R0,TSR6
TSR7:
SETB DQ
RET
WRITE_1820: ;----------写1820,往1820中写入一个字节的数据.
MOV R2,#8
CLR C
WR1:
CLR DQ
MOV R3,#3
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#25
DJNZ R3,$
SETB DQ
NOP
NOP
DJNZ R2,WR1
SETB DQ
RET
READ_1820: ;---------读1820,从1820中读出两个字节的温度数据.
MOV R4,#2 ;高位存入20h,低位存入21h
MOV R1,#21H
RE00:
MOV R2,#8
RE01:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
DELAY0: ;64us延时
MOV R2,#20H
DJNZ R2,$
RET
DELAY1: ;94ms延时
MOV R2,#250
DE01:
MOV R1,#250
DE02:
DJNZ R1,DE02
DJNZ R2,DE01
RET
DATA_TRAN:
MOV DPH,60H
MOV DPL,61H
MOV A,20H
MOVX @DPTR,A
INC DPTR
MOV A,21H
MOVX @R0,A
INC DPTR
MOV A,R5
DEC R5
MOV 60H,DPH
MOV 61H,DPL
RET
TEMP_COV: ;-------将接收自1820的数据转化为数码管显示
MOV A,20H ;的温度数据,并分别送给377.
JB ACC.0,SIGN
SJMP UNSIGN
SIGN: ;接收到的温度数据为负值.
MOV A,21H
CPL A
INC A
CLR C
RRC A
MOV B,#10
DIV AB
MOV 30H,#10
MOV 31H,A
MOV 32H,B
SJMP DISP
UNSIGN: ;接收到的温度数据为正值.
MOV A,21H
CLR C
RRC A
MOV B,#100
DIV AB
MOV 30H,A
MOV A,B
MOV B,#10
DIV AB
MOV 31H,A
MOV 32H,B
DISP: ;分别送桑数码管显示.
MOV DPTR,#TAB
MOV A,30H
MOVC A,@A+DPTR
MOV P0,A
CLR P1.0 ;选通第一个数码管
NOP
NOP
NOP
NOP
NOP
SETB P1.0
MOV A,31H
MOVC A,@A+DPTR
MOV P0,A
CLR P1.1 ;选通第二个数码管
NOP
NOP
NOP
NOP
NOP
SETB P1.1
MOV A,32H
MOVC A,@A+DPTR
MOV P0,A
CLR P1.2 ;选通第三个数码管
NOP
NOP
NOP
NOP
NOP
SETB P1.2
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,40H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -