⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18b20.asm

📁 18b20通过对外界温度的采集把收集的信号通过数据转换和处理后通过数码管进行显示。
💻 ASM
字号:
ORG 0000H
LJMP MAIN 
;高精度数字温度计(此汇编程序在AT2051通过运行)
ORG 0030H 
MAIN:MOV 29H, #00H
MOV 28H, #00H
LOOP0:LCALL RE000 ;复位 
MOV A, #0CCH ;跳过ROM操作
LCALL WRITE
MOV A, #44H ;发出温度转换命令
LCALL WRITE
LCALL DELAY1 ;延时750mS
LCALL DELAY1
LCALL DELAY1 
LCALL RE000 ;复位
MOV A, #0CCH ;跳过ROM操作
LCALL WRITE
MOV A, #0BEH ;发出读温度命令
LCALL WRITE
LCALL READ ;读DS18B20中的温度数据 
LCALL BTOD 
mov 30H, #13H
mov 35H, #11H 
LCALL DELAY2 
LJMP LOOP0
;复位DS18B20子程序
RE000:SETB P3.2
NOP
CLR P3.2
MOV R3, #96H
LOOP1:DJNZ R3, LOOP1 ;延时600uS
SETB P3.2
NOP
MOV R3, #0FH
LOOP2:DJNZ R3, LOOP2 ;延时60uS
MOV R3, #1EH
LOOP3:JNB P3.2, LOOP4 ;240uS内检查DS18B20的存在脉冲
DJNZ R3, LOOP3
clr p1.0 
LJMP LOOP5 
MOV R3, #3CH
LOOP4:DJNZ R3, LOOP4 ;延时240uS 
SETB P3.2
LOOP5:RET

;写DS18B20子程序
WRITE:MOV R2,#08H ;一共8位数据
CLR C
LOOP6:SETB p3.2
nop
CLR P3.2
MOV R3, #04H
LOOP7:DJNZ R3, LOOP7
RRC A
MOV P3.2, C
MOV R3,#0CH
LOOP8:DJNZ R3, LOOP8 ;延时48uS
SETB P3.2
NOP
DJNZ R2, LOOP6
SETB P3.2
RET
; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据 
READ:MOV R4,#2H ;将温度高位和低位从DS18B20中读出
MOV R1,#29H ;低位存入29H,高位存入28H
RE00:MOV R2,#8H
RE01:CLR C
SETB P3.2
NOP
CLR P3.2
NOP 
SETB P3.2
MOV R3, #04H ;延时16uS
RE10:DJNZ R3, RE10
MOV C,P3.2
MOV R3,#0CH ;延时48uS
RE20:DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET

;延时子程序1(0.25秒)
DELAY1:MOV R4, #0FDH
L3:MOV R5, #0FCH 
L5:DJNZ R5, L5
DJNZ R4, L3
RET 
;延时子程序2
DELAY2:MOV R4, #02H
L6:MOV R5, #0FFH
L7:LCALL DIRR
DJNZ R5, L7
DJNZ R4, L6
RET 
;延时子程序0
DELAY:MOV R2, #01H 
L1:MOV R3, #08H
L2:DJNZ R3, L2
DJNZ R2, L1
RET
;进制转换数据处理
BTOD:MOV R0, #34H
JNB 47H, BTOD0 ;28H中的最高位是否为1(温度<0)
QB00: MOV A, 29H ;负数取补
CPL A
ADD A, #01H
MOV 29H, A
MOV A, 28H
CPL A
ADDC A, #00H
MOV 28H, A
MOV @R0, #12H ;显示负号
LJMP BTOD1
BTOD0:MOV @R0, #11H 
BTOD1:MOV A,29H
MOV 27H, A
MOV C,40H ;将28H中的最低位移入C,40H41H42H43H为28H中的位地址
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A 
MOV A, 29H ;将29H中的十六进制数转换成10进制 
MOV B, #100 
DIV AB 
JZ BTOD2
MOV @R0, A ;百位存于33H
LJMP BTOD4
BTOD2:CJNE @R0, #12H, BTOD3 
LJMP BTOD4
BTOD3:MOV @R0, #11H ;百位为零暗
BTOD4:DEC R0
MOV A, #10
XCH A, B
DIV AB
MOV @R0, A ;十位存于32H 
DEC R0 
MOV @R0, B ;个位存于31H
DEC R0
ANL 27H, #0FH ;小数点后一位进制转换
MOV A, 27H
MOV B, #06H
MUL AB
MOV B, #10
DIV AB
MOV @R0, A ;小数点后一位存于30H
JB P3.7, BTOD5 ;小数点后一位是否显示判断
MOV @R0, #0FFH
BTOD5:RET 
;动态显示子程序
DIRR: MOV R0, #30H
MOV P1, #00H 
MOV A, @R0 ;显示C 
MOV DPTR, #SEGPT 
MOVC A, @A+DPTR
MOV p0, A
OUT1: JNB TI, OUT1
CLR TI
SETB P1.2 
LCALL DELAY 
CLR P1.2
INC R0
MOV A, @R0 ;显示小数点后一位 
MOV DPTR, #SEGPT 
MOVC A, @A+DPTR
MOV p0, A
OUT2: JNB TI, OUT2
CLR TI
SETB P1.3 
LCALL DELAY 
CLR P1.3
MOV A, #10H ;显示小数点
MOV DPTR, #SEGPT 
MOVC A, @A+DPTR
MOV p0, A
OUT0: JNB TI, OUT0
CLR TI
SETB P1.4 
LCALL DELAY 
CLR P1.4
INC R0
MOV A, @R0 ;显示个位数 
MOV DPTR, #SEGPT 
MOVC A, @A+DPTR
MOV p0, A
OUT3: JNB TI, OUT3
CLR TI
SETB P1.4 
LCALL DELAY 
CLR P1.4
INC R0
MOV A, @R0 ;显示高位数 
MOV DPTR, #SEGPT 
MOVC A, @A+DPTR
MOV p0, A
OUT4: JNB TI, OUT4
CLR TI
SETB P1.5 
LCALL DELAY 
CLR P1.5
INC R0
MOV A, @R0 ;显示高位数 
MOV DPTR, #SEGPT 
MOVC A, @A+DPTR
MOV p0, A
OUT5: JNB TI, OUT5
CLR TI
SETB P1.6 
LCALL DELAY 
CLR P1.6
INC R0
MOV A, @R0 ;显示高位数 
MOV DPTR, #SEGPT 
MOVC A, @A+DPTR
MOV p0, A
OUT6: JNB TI, OUT6
CLR TI
SETB P1.7 
LCALL DELAY 
CLR P1.7 
RET
SEGPT: DB 0C0H,0F9H,0A4H,0B0H,99H ;0,1,2,3,4
DB 92H,82H,0F8H,80H,90H ;5,6,7,8,9
DB 88H,83H,0C6H,0A1H,86H,8EH ;A,B,C,D,E,F
DB 07FH,0FFH,0BFH,70H ;点,暗,-,摄氏度
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -