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

📄 stest.src

📁 我自己写的ds1820b温度测量程序
💻 SRC
📖 第 1 页 / 共 2 页
字号:
;   SETB TMPort
	  SETB P1_7
; #pragma endasm
; EA=1;}
			; SOURCE LINE # 105
	SETB 	EA
	RET  	
; END OF _ds1820command

; 
; void ds1820rd(unsigned char *pt)//读ds1820数据

	RSEG  ?PR?_ds1820rd?STEST
_ds1820rd:
			; SOURCE LINE # 107
	MOV  	pt?642,R3
	MOV  	pt?642+01H,R2
	MOV  	pt?642+02H,R1
; {
			; SOURCE LINE # 108
; EA=0;
			; SOURCE LINE # 109
	CLR  	EA
; #pragma asm
; MOV R4,#9
	  MOV R4,#9
; MOV A,R1
	  MOV A,R1
; MOV R0,A
	  MOV R0,A
; RD18201:
	  RD18201:
;   MOV R2,#8
	  MOV R2,#8
;      RD18202:
	  RD18202:
;        	SETB TMPort
	  SETB P1_7
; 	   	NOP//延时2us,24M时钟
	  NOP 
; 		NOP
	  NOP
; 		NOP
	  NOP
; 		NOP
	  NOP
; 		CLR TMPort//写时间片开始
	  CLR P1_7 
; 		NOP//延时2us,24M时钟
	  NOP 
; 		NOP
	  NOP
; 		NOP
	  NOP
; 		NOP
	  NOP
; 		SETB TMPort//置为高电平,准备输入数据
	  SETB P1_7 
; 		MOV R3,#10//延时11us,24M时钟
	  MOV R3,#10 
;   		DJNZ R3,$
	  DJNZ R3,$
; 		MOV C,TMPort
	  MOV C,P1_7
; 		RRC A
	  RRC A
; 		MOV R3,#48//延时50us,24M时钟
	  MOV R3,#48 
;   		DJNZ R3,$
	  DJNZ R3,$
; 		DJNZ R2,RD18202
	  DJNZ R2,RD18202
; 	MOV @R0,A
	  MOV @R0,A
; 	INC R0
	  INC R0
; 	DJNZ R4,RD18201
	  DJNZ R4,RD18201
; #pragma endasm
; EA=1;}
			; SOURCE LINE # 139
	SETB 	EA
	RET  	
; END OF _ds1820rd

; 
; void tmtoc (void)

	RSEG  ?PR?tmtoc?STEST
tmtoc:
	USING	0
			; SOURCE LINE # 141
; {
			; SOURCE LINE # 142
; unsigned char sign;//符号、实际温度的10倍整数
; int tm; //实际温度的10倍
; sign=disbuf[1]&0x20;
			; SOURCE LINE # 145
	MOV  	A,disbuf+01H
	ANL  	A,#020H
	MOV  	sign?743,A
; if (sign)//disbuf[1]高五位为符号位,判断符号根据补码存储方式,得出真实温度
			; SOURCE LINE # 146
	JZ   	?C0012
; 	{disbuf[0]=~disbuf[0];//精确到0.1度,四舍五入
			; SOURCE LINE # 147
	XRL  	disbuf,#0FFH
; 	 disbuf[1]=~disbuf[1];
			; SOURCE LINE # 148
	XRL  	disbuf+01H,#0FFH
; 	 tm=((int)disbuf[1]*256+(int)disbuf[0]+1)*0.625+0.5;}
			; SOURCE LINE # 149
	MOV  	A,disbuf+01H
	MOV  	R6,A
	MOV  	R4,#00H
	CLR  	A
	ADD  	A,disbuf
	MOV  	R7,A
	MOV  	A,R4
	ADDC 	A,R6
	XCH  	A,R7
	ADD  	A,#01H
	MOV  	R5,A
	CLR  	A
	ADDC 	A,R7
	SJMP 	?C0040
?C0012:
; else tm=((int)disbuf[1]*256+(int)disbuf[0])*0.625+0.5;
			; SOURCE LINE # 150
	MOV  	A,disbuf+01H
	MOV  	R6,A
	MOV  	R4,#00H
	CLR  	A
	ADD  	A,disbuf
	MOV  	R5,A
	MOV  	A,R4
	ADDC 	A,R6
?C0040:
	MOV  	R4,A
	LCALL	?C?FCASTI
	CLR  	A
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,#020H
	MOV  	R0,#03FH
	LCALL	?C?FPMUL
	CLR  	A
	MOV  	R3,A
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,#03FH
	LCALL	?C?FPADD
	LCALL	?C?CASTF
	MOV  	tm?744,R6
	MOV  	tm?744+01H,R7
?C0013:
; //tmof10=(int)tm;//输出温度各位的ASCii码
; 
; if (tm>=1000) MYWD[0]='1';	 
			; SOURCE LINE # 153
	CLR  	C
	MOV  	A,tm?744+01H
	SUBB 	A,#0E8H
	MOV  	A,tm?744
	XRL  	A,#080H
	SUBB 	A,#083H
	JC   	?C0014
	MOV  	MYWD,#031H
	SJMP 	?C0015
?C0014:
; 	 else if (sign) MYWD[0]='-';
			; SOURCE LINE # 154
	MOV  	A,sign?743
	JZ   	?C0016
	MOV  	MYWD,#02DH
	SJMP 	?C0015
?C0016:
; 	 	  else MYWD[0]='+';
			; SOURCE LINE # 155
	MOV  	MYWD,#02BH
?C0015:
; 
; MYWD[1]=tm/100%10+'0';
			; SOURCE LINE # 157
	MOV  	R6,tm?744
	MOV  	R7,tm?744+01H
	MOV  	R4,#00H
	MOV  	R5,#064H
	LCALL	?C?SIDIV
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?SIDIV
	MOV  	A,R5
	ADD  	A,#030H
	MOV  	MYWD+01H,A
; if (MYWD[0]=='0'&&MYWD[1]=='0')MYWD[1]='\0';
			; SOURCE LINE # 158
	MOV  	A,MYWD
	CJNE 	A,#030H,?C0018
	MOV  	A,MYWD+01H
	CJNE 	A,#030H,?C0018
	CLR  	A
	MOV  	MYWD+01H,A
?C0018:
; MYWD[2]=tm/10%10+'0';
			; SOURCE LINE # 159
	MOV  	R6,tm?744
	MOV  	R7,tm?744+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?SIDIV
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?SIDIV
	MOV  	A,R5
	ADD  	A,#030H
	MOV  	MYWD+02H,A
; MYWD[3]='.';
			; SOURCE LINE # 160
	MOV  	MYWD+03H,#02EH
; MYWD[4]=tm%10+'0';
			; SOURCE LINE # 161
	MOV  	R6,tm?744
	MOV  	R7,tm?744+01H
	MOV  	R4,#00H
	MOV  	R5,#0AH
	LCALL	?C?SIDIV
	MOV  	A,R5
	ADD  	A,#030H
	MOV  	MYWD+04H,A
; }
			; SOURCE LINE # 162
	RET  	
; END OF tmtoc

; 
; void disp(char *p,unsigned char m) //输出一个字符数组,p为数组名,m为字符个数

	RSEG  ?PR?_disp?STEST
L?0041:
	USING	0
	MOV  	R3,#00H
	MOV  	R2,#HIGH (DS1820ERR)
	MOV  	R1,#LOW (DS1820ERR)
	MOV  	R5,#0CH
_disp:
	USING	0
			; SOURCE LINE # 164
;---- Variable 'm?846' assigned to Register 'R5' ----
;---- Variable 'p?845' assigned to Register 'R1/R2/R3' ----
; {
			; SOURCE LINE # 165
; unsigned char i;
;     i=EA;
			; SOURCE LINE # 167
	MOV  	C,EA
	CLR  	A
	RLC  	A
	MOV  	R7,A
;---- Variable 'i?847' assigned to Register 'R7' ----
; 	EA=1;
			; SOURCE LINE # 168
	SETB 	EA
; 	for(;*p!=0&&m!=0;p++,m--)
			; SOURCE LINE # 169
?C0020:
	LCALL	?C?CLDPTR
	MOV  	R6,A
	JZ   	?C0021
	MOV  	A,R5
	JZ   	?C0021
; 	{
			; SOURCE LINE # 170
; 		SBUF=*p;
			; SOURCE LINE # 171
	MOV  	SBUF,R6
?C0023:
; 		while(trance==0);
			; SOURCE LINE # 172
	MOV  	A,trance
	JZ   	?C0023
?C0024:
; 		trance=0;
			; SOURCE LINE # 173
	CLR  	A
	MOV  	trance,A
; 	}
			; SOURCE LINE # 174
	INC  	A
	ADD  	A,R1
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	DEC  	R5
	SJMP 	?C0020
?C0021:
; 	EA=i;
			; SOURCE LINE # 175
	MOV  	A,R7
	ADD  	A,#0FFH
	MOV  	EA,C
; }
			; SOURCE LINE # 176
	RET  	
; END OF _disp

; 
; 
; void TMCLSHOW(void)

	RSEG  ?PR?TMCLSHOW?STEST
TMCLSHOW:
	USING	0
			; SOURCE LINE # 179
; {
			; SOURCE LINE # 180
; InitDS1820();//发出启动转化温度指令:初始化、skiprom、启动转化
			; SOURCE LINE # 181
	LCALL	InitDS1820
; if (!DS1820ON) {disp(DS1820ERR,12);}
			; SOURCE LINE # 182
	JB   	DS1820ON,?C0026
	LCALL	L?0041
?C0026:
; ds1820command(0xCC);
			; SOURCE LINE # 183
	MOV  	R7,#0CCH
	LCALL	_ds1820command
; ds1820command(0x44);
			; SOURCE LINE # 184
	MOV  	R7,#044H
	LCALL	_ds1820command
; TMPort=1; 
			; SOURCE LINE # 185
	SETB 	P1_7
; 
; for (t=0;t<1500;t++) Delay_510();//等待转化过程完成
			; SOURCE LINE # 187
	CLR  	A
	MOV  	t,A
	MOV  	t+01H,A
?C0027:
	LCALL	Delay_510
	INC  	t+01H
	MOV  	A,t+01H
	JNZ  	?C0039
	INC  	t
?C0039:
	CLR  	C
	SUBB 	A,#0DCH
	MOV  	A,t
	SUBB 	A,#05H
	JC   	?C0027
?C0028:
; InitDS1820();//读RAM中数据:初始化、skiprom、读命令、保存数据
			; SOURCE LINE # 188
	LCALL	InitDS1820
; ds1820command(0xcc);
			; SOURCE LINE # 189
	MOV  	R7,#0CCH
	LCALL	_ds1820command
; ds1820command(0xbe);
			; SOURCE LINE # 190
	MOV  	R7,#0BEH
	LCALL	_ds1820command
; ds1820rd(disbuf);
			; SOURCE LINE # 191
	MOV  	R3,#00H
	MOV  	R2,#HIGH (disbuf)
	MOV  	R1,#LOW (disbuf)
	LCALL	_ds1820rd
; //disp(disbuf,9);
; tmtoc();
			; SOURCE LINE # 193
	LCALL	tmtoc
; disp("NOW,temperature is:",20);
			; SOURCE LINE # 194
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
	MOV  	R5,#014H
	LCALL	_disp
; disp(MYWD,7);
			; SOURCE LINE # 195
	MOV  	R3,#00H
	MOV  	R2,#HIGH (MYWD)
	MOV  	R1,#LOW (MYWD)
	MOV  	R5,#07H
	LCALL	_disp
; disp("\n",1);
			; SOURCE LINE # 196
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_20)
	MOV  	R1,#LOW (?SC_20)
	MOV  	R5,#01H
	LJMP 	_disp
; END OF TMCLSHOW

; }
; 
; void main(void)

	RSEG  ?PR?main?STEST
main:
	USING	0
			; SOURCE LINE # 199
; {
			; SOURCE LINE # 200
; DS1820ON=0;          //DS1820是否存在             
			; SOURCE LINE # 201
	CLR  	DS1820ON
; initUart();
			; SOURCE LINE # 202
	LCALL	initUart
; InitDS1820();//发出启动转化温度指令:初始化、skiprom、启动转化
			; SOURCE LINE # 203
	LCALL	InitDS1820
; if (!DS1820ON) {disp(DS1820ERR,12);}
			; SOURCE LINE # 204
	JB   	DS1820ON,?C0031
	LCALL	L?0041
?C0031:
; P1=0x55;
			; SOURCE LINE # 205
	MOV  	P1,#055H
; TMCLSHOW();
			; SOURCE LINE # 206
	LCALL	TMCLSHOW
; P1=0x33;
			; SOURCE LINE # 207
	MOV  	P1,#033H
; EA=1;
			; SOURCE LINE # 208
	SETB 	EA
?C0032:
; while (1)
			; SOURCE LINE # 209
;  if (recived==1)//判断是否为温度测量命令
			; SOURCE LINE # 210
	MOV  	A,recived
	CJNE 	A,#01H,?C0032
;     {if(comzf==TMCL[comno])
			; SOURCE LINE # 211
	MOV  	A,#LOW (TMCL)
	ADD  	A,comno
	MOV  	R0,A
	MOV  	A,@R0
	CJNE 	A,comzf,?C0035
; 	  {comno++;
			; SOURCE LINE # 212
	INC  	comno
; 	  if (comno>3)
			; SOURCE LINE # 213
	MOV  	A,comno
	SETB 	C
	SUBB 	A,#03H
	JC   	?C0037
; 	    {comno=0;
			; SOURCE LINE # 214
	CLR  	A
	MOV  	comno,A
; 		TMCLSHOW();
			; SOURCE LINE # 215
	LCALL	TMCLSHOW
; 		}
			; SOURCE LINE # 216
; 	  }
			; SOURCE LINE # 217
	SJMP 	?C0037
?C0035:
; 	else comno=0; 
			; SOURCE LINE # 218
	CLR  	A
	MOV  	comno,A
?C0037:
; 	recived=0;
			; SOURCE LINE # 219
	CLR  	A
	MOV  	recived,A
; 	}
			; SOURCE LINE # 220
	SJMP 	?C0032
; END OF main

	END

⌨️ 快捷键说明

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