ds18b20.asm

来自「高精度液晶显示温度计,C51,16*2LCD,DS18B20温度传感器」· 汇编 代码 · 共 100 行

ASM
100
字号
;用P2.3口,在C51里这样调用:char Te=(char)read_tem(1)/16;
void dis_temperature()
{
	Te=(float)read_tem(1)/16;
	sprintf(buffer,"%05.2f'C",Te);
	lcd_moveto(20);
	lcd_strall(buffer);
	lcd_moveto(36);
}
;请多指教!!
NAME	READ_EXP;程序名
;	int read_tem(char a)
?PR?_read_tem?READ_EXP	SEGMENT	CODE;代码段
?DT?_read_tem?READ_EXP	SEGMENT	DATA;数据段
PUBLIC	_read_tem;公共符号
RSEG	?DT?_read_tem?READ_EXP;★可覆盖数据段
;?_read_tem?	:			;起始地址
a?00:	DS	1	;传递参数字节
RSEG	?PR?_read_tem?READ_EXP
_read_tem:
		NOP
		MOV a?00,R7
		ACALL RESET_PULSE
		ACALL	PRESENCE
		MOV	A,#0CCH
		ACALL WRITE_BYTE
		MOV A,#44H
		ACALL WRITE_BYTE
		JNB	P2.3,$
		ACALL RESET_PULSE
		ACALL PRESENCE
		MOV A,#0CCH
		ACALL WRITE_BYTE
		MOV A,#0BEH
		ACALL WRITE_BYTE
		ACALL READ_BYTE
		MOV R7,A			;LSB STORED IN R7
		ACALL READ_BYTE
		MOV R6,A			;MSB STORED IN R6
		ACALL RESET_PULSE
		ACALL PRESENCE
		RET
READ_BYTE:
		MOV R3,#8
READ1:
		CLR P2.3
		NOP
		NOP
		SETB P2.3
		NOP
		NOP
		NOP
		MOV R5,A
		MOV C,P2.3
		MOV A,R5
		MOV R2,#30
		DJNZ R2,$
		RRC A
		DJNZ R3,READ1
		RET
PRESENCE:
		JB P2.3,$
		JNB P2.3,$
		RET
RESET_PULSE:
		CLR P2.3
		MOV R2,#250
		DJNZ R2,$
		SETB P2.3
		MOV R2,#10
		DJNZ R2,$
		RET
WRITE_BYTE:
		MOV R3,#8
WRITE:
		RRC A
		JC WRITE1
		CLR P2.3
		MOV R2,#30
		DJNZ R2,$
		SETB P2.3
		NOP
		NOP
		NOP
		NOP
		DJNZ R3,WRITE
		RET
WRITE1:
		CLR P2.3
		NOP
		NOP
		NOP
		NOP
		SETB P2.3
		MOV R2,#30
		DJNZ R2,$
		DJNZ R3,WRITE
		RET
		END
		

⌨️ 快捷键说明

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