汇编DS18b20分辨率为0.0625

/*
*日期:2012.12.17
*/
ORG 00H
AJMP MAIN
ORG 000BH
AJMP T0ZD
ORG 50H
MAIN:
DQ BIT P1.0
XSG DATA 34H
XSS DATA 35H
XSB DATA 36H
XSQ DATA 37H
XSHC DATA 38H
MOV XSHC,#0
MOV XSQ,#0
MOV XSG,#0
MOV XSS,#0
MOV XSB,#0
XSQH DATA 33H
TEMPER_L DATA 30H
TEMPER_H DATA 31H
TEMPER_NUM DATA 32H
MOV TEMPER_NUM,#0
MOV XSQH,#0
MOV TMOD,#00000010B
MOV TH0,#55
MOV TL0,#55
SETB ET0
SETB EA
SETB TR0
MOV SP,#60H
MOV R0,#0;读写一个字节次数
MOV R3,#0;显示用
MOV R2,#0
CLR A
SCAN:
ACALL DS18B20_Reset
MOV R2,#0CCH
ACALL DS18B20_Write_Byte
MOV R2,#44H
ACALL DS18B20_Write_Byte
ACALL DELAY_875MS
JNB DQ,$
ACALL DS18B20_Reset
MOV R2,#0CCH
ACALL DS18B20_Write_Byte
MOV R2,#0BEH
ACALL DS18B20_Write_Byte
ACALL DS18B20_Read_Byte
MOV TEMPER_L,R2
ACALL DS18B20_Read_Byte
MOV TEMPER_H,R2
ACALL TEMPER_COV
AJMP SCAN
;*********************************
;DS18B20复位,检测设备是否存在
;*********************************
DS18B20_Reset:
CLR EA
CLR DQ
MOV R7,#250
ACALL DELAY_XUS;延时504us复位
SETB DQ
MOV R7,#25;延时54us
ACALL DELAY_XUS
MOV C,DQ
MOV R7,#120
ACALL DELAY_XUS;延时244us
JC DS18B20_Reset
SETB EA
RET
;*********************************
;从DS18B2读出一个字节
;入口参数
;出口参数 ACC
;*********************************
DS18B20_Read_Byte:
CLR EA
PUSH ACC
MOV A,#0
MOV R0,#8
Read_Next:
CLR DQ
NOP
SETB DQ
MOV C,DQ
RRC A
MOV R7,#20;44US
ACALL DELAY_XUS
DJNZ R0,Read_Next
MOV R2,A
POP ACC
SETB EA
RET
;*********************************
;从DS18B2写入一个字节
;入口参数 ACC
;出口参数
;*********************************
DS18B20_Write_Byte:
CLR EA
PUSH ACC
MOV A,R2
MOV R0,#8
Write_Next:
CLR DQ
MOV R7,#5
ACALL DELAY_XUS;14us
RRC A
MOV DQ,C
MOV R7,#15
ACALL DELAY_XUS;34US
SETB DQ
NOP
DJNZ R0,Write_Next
POP ACC
SETB EA
RET
;*********************************
;延时程序 2us*x
;*********************************
DELAY_XUS:
DJNZ R7,$;2us
RET ;2us
;//*****************************************//

;*********************************
;延时程序 875MS
;*********************************
DELAY_875MS:
MOV R6,#250
DE0:
MOV R5,#150
DE1:
MOV R4,#1
DJNZ R4,$
DJNZ R5,DE1
DJNZ R6,DE0
RET
;//*****************************************//

; 将从DS18B20中读出的温度数据进行转换
;//*****************************************//
TEMPER_COV:
MOV A,#0F0H
ANL A,TEMPER_L; 舍去温度低位中小数点后的四位温度数值
SWAP A
MOV TEMPER_NUM,A
MOV A,TEMPER_L
JNB ACC.3,TEMPER_COV1; 四舍五入去温度值
INC TEMPER_NUM
TEMPER_COV1:
CLR EA
MOV A,TEMPER_H
ANL A,#07H

SWAP A
ORL A,TEMPER_NUM;
MOV TEMPER_NUM,A; 保存变换后的温度数据
LCALL BIN_BCD;将2进制转换为10进制
MOV DPTR,#TEMP_TAB1
MOV A,TEMPER_L
ANL A,#0FH
MOV B,#4
MUL AB
MOV XSHC,A
MOVC A,@A+DPTR
MOV XSQ,A
MOV A,XSHC
INC A
MOVC A,@A+DPTR
MOV XSB,A
MOV A,XSHC
ADD A,#2
MOVC A,@A+DPTR
MOV XSS,A
MOV A,XSHC
ADD A,#3
MOVC A,@A+DPTR
MOV XSG,A
SETB EA
RET
;//*****************************************

; 将16进制的温度数据转换成压缩BCD码
;//*****************************************//
BIN_BCD:
MOV DPTR,#TEMP_TAB
MOV A,TEMPER_NUM
MOVC A,@A+DPTR
MOV TEMPER_NUM,A
RET
TEMP_TAB:
DB 00,01,02,03,04,05,06,07
DB 08,09,10,11,12,13,14,15
DB 16,17,18,19,20,21,22,23
DB 24,25,26,27,28,29,30,31
DB 32,33,34,35,36,37,38,39
DB 40,41,42,43,44,45,46,47
DB 48,49,50,51,52,53,54,55
DB 56,57,58,59,60,61,62,63
DB 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78
DB 79,80,81,82,83,84,85,86,87,88,89,90,91,92,93
DB 94,95,96,97,98,99
TEMP_TAB1:
DB 0,0,0,0
DB 0,6,2,5
DB 1,2,5,0
DB 1,8,7,5
DB 2,5,0,0
DB 3,1,2,5
DB 3,7,5,0
DB 4,3,7,5
DB 5,0,0,0
DB 5,6,2,5
DB 6,2,5,0
DB 6,8,7,5
DB 7,5,0,0
DB 8,1,2,5
DB 8,7,5,0
DB 9,3,7,5
DB 1,0,0,0
T0ZD:
PUSH ACC
PUSH PSW
MOV A,TEMPER_NUM
MOV B,#10
DIV AB
MOV R3,A
;******************************
INC XSQH
MOV A,XSQH
CJNE A,#1,TTT
MOV P0,#0FFH
MOV P2,#01111111B
MOV P0,#0A9H
AJMP T0HUI
TTT: CJNE A,#2,TTT0
MOV A,XSG
MOV P0,#0FFH
MOV P2,#10111111B
ACALL DIS
AJMP T0HUI
TTT0:
CJNE A,#3,TTT1
MOV A,XSS
MOV P0,#0FFH
MOV P2,#11011111B
ACALL DIS
AJMP T0HUI
TTT1:
CJNE A,#4,TTT2
MOV A,XSB
MOV P0,#0FFH
MOV P2,#11101111B
ACALL DIS
AJMP T0HUI
TTT2:
CJNE A,#5,TTT3
MOV A,XSQ
MOV P0,#0FFH
MOV P2,#11110111B
ACALL DIS
AJMP T0HUI
TTT3:
CJNE A,#6,TTT4
MOV A,B
MOV P0,#0FFH
MOV P2,#11111011B
ACALL DIS
ANL P0,#11011111B
AJMP T0HUI
TTT4:
CJNE A,#7,T0HUI
MOV XSQH,#0
MOV P0,#0FFH
MOV P2,#11111101B
MOV A,R3
ACALL DIS
;;;;;;;;;;;;;;;;;;;;;;

AJMP T0HUI
DIS:
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
RET
T0HUI:
POP PSW
POP ACC
RETI
TAB: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
END

相关文档
最新文档