📄 1820.asm
字号:
;|----------------------------------------------------------------------------------------------|
;| 获取单个ds18b20转化的温度值的应用程式,P1.4接ds18b20 |
;|----------------------------------------------------------------------------------------------|
LED1 EQU P1.3 ;
LED2 EQU P1.2 ;
LED3 EQU P1.1 ;显示控制
LED4 EQU P1.0 ;
DATA1 EQU 70H ;
DATA2 EQU 71H ;显示数据缓存区
DATA3 EQU 72H ;
DATA4 EQU 73H ;
ORG 0000H
LJMP MAIN ;转入主程序
ORG 0050H
MAIN:
SETB P3.7
NOP
MOV DATA1,#00H ;显示区初始化
MOV DATA2,#00H
MOV DATA3,#10H
MOV DATA4,#10H
NOP
LOOP: ACALL GET_TEMP
ACALL TRANS12
ACALL DISPLAY
JMP LOOP
GET_TEMP:
CLR EA ;使用ds18b20一定要禁止任何中断产生
LCALL INITIAL ;调用初使化副程式
MOV A,#0CCH
LCALL WRITE ;送入跳过ROM命令
MOV A, #44H
LCALL WRITE ;送入温度转换命令
LCALL INITIAL ;温度转换完全,再次初使化ds18b20
MOV A,#0CCH
LCALL WRITE ;送入跳过ROM命令
MOV A,#0BEH
LCALL WRITE ;送入读温度暂存器命令
LCALL READ
MOV 30H,A ;读出温度值低位元组存入30H
LCALL READ
MOV 31H,A ;读出谩度值高位元组存入31H
SETB EA
RET
INITIAL: ;初始化ds18b20副程式
L0: CLR P1.4 ;ds18b20汇流排为低重定电平
MOV R2,#200
L1: CLR P1.4
DJNZ R2,L1 ;汇流排重定电平保持400us
SETB P1.4 ;释放ds18b20汇流排
MOV R2,#30
L4: DJNZ R2,L4 ;释放ds18b20汇流排保持60us
CLR C ;清存在信号
ORL C,P1.4
JC L6 ;存在吗?不存在则退出
MOV R6,#80
L5: ORL C,P1.4
JC L3
DJNZ R6,L5
SJMP L0
L3: MOV R2,#240
L2: DJNZ R2,L2
L6: NOP
RET
WRITE: ;向ds18b20写操作命令副程式
MOV R3,#8 ;写入ds18b20的bit数,一个位元组8个bit
WR1: SETB P1.4
MOV R4,#8
RRC A ;把一个位元组data(A)分成8个bit环移给 C
CLR P1.4 ;开始写入ds18b20汇流排要处于重定(低)状态
WR2: DJNZ R4,WR2 ;ds18b20汇流排重定保持16us
MOV P1.4,C ;写入一个bit
MOV R4,#20
WR3: DJNZ R4,WR3 ;等待40us
DJNZ R3,WR1 ;写入下一个bit
SETB P1.4 ;重新释放ds18b20汇流排
RET
READ:
MOV R6,#8 ;连续读8个bit
RE1: CLR P1.4 ;读前汇流排保持为低
MOV R4,#4
NOP
SETB P1.4 ;开始读汇流排释放
RE2: DJNZ R4,RE2 ;持续8us
MOV C,P1.4 ;从ds18b20汇流排读得一个bit
RRC A ;把读得的位值环移给 A
MOV R5,#30
RE3: DJNZ R5,RE3 ;持续60us
DJNZ R6,RE1 ;读下一个bit
SETB P1.4 ;重新释放ds18b20汇流排
RET
;*******************************************************
;温度转换程序--测试程序,只显示正值
;*******************************************************
TRANS12:MOV A,30H
ANL A,#0F0H
SWAP A
MOV 32H,A ;低位
MOV A,31H
ANL A,#0FH
SWAP A
ORL A,32H
MOV B,#10 ;温度值分离
DIV AB
MOV DATA1,B ;个位
MOV DATA2,A ;十位
RET
;********************显示*********************************
DISPLAY: ;显示子程序,可移植
PUSH A
NOP
SETB LED2
NOP
SETB LED3
NOP
SETB LED4
NOP
CLR LED1
NOP
MOV DPTR,#TABLE
MOV A,DATA1
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
SETB LED1
CLR LED2
NOP
MOV DPTR,#TABLE
MOV A,DATA2
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
SETB LED2
CLR LED3
NOP
MOV DPTR,#TABLE
MOV A,DATA3
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
SETB LED3
CLR LED4
NOP
MOV DPTR,#TABLE
MOV A,DATA4
MOVC A,@A+DPTR
MOV P0,A
ACALL DISDELAY
POP A
RET
DISDELAY:
MOV 74H,#10
DISD:
MOV 75H,#250
DJNZ 75H,$
DJNZ 74H,DISD
RET
TABLE:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 10001000B ;A
DB 10000011B ;b
DB 11000110B ;C
DB 10100001B ;d
DB 10000110B ;E
DB 10001110B ;F
DB 10111111B ;-
DB 11111111B ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -