📄 stest.src
字号:
; 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 + -