📄 温湿度传感器.lis
字号:
00E2 ; i -> R20
.even
00E2 _COM::
00E2 4A93 st -y,R20
00E4 .dbline -1
00E4 .dbline 117
00E4 ; }
00E4 ; void COM(void)
00E4 ; {
00E4 .dbline 120
00E4 ;
00E4 ; U8 i;
00E4 ; for(i=0;i<8;i++)
00E4 4427 clr R20
00E6 3FC0 xjmp L21
00E8 L18:
00E8 .dbline 121
00E8 ; {
00E8 .dbline 123
00E8 ;
00E8 ; U8FLAG=2;
00E8 82E0 ldi R24,2
00EA 80931200 sts _U8FLAG,R24
00EE L22:
00EE .dbline 124
00EE ; while((!(COM_R))&&U8FLAG++);
00EE L23:
00EE .dbline 124
00EE 9C99 sbic 0x13,4
00F0 09C0 rjmp L25
00F2 X3:
00F2 20901200 lds R2,_U8FLAG
00F6 3324 clr R3
00F8 822D mov R24,R2
00FA 8F5F subi R24,255 ; addi 1
00FC 80931200 sts _U8FLAG,R24
0100 2220 tst R2
0102 A9F7 brne L22
0104 X4:
0104 L25:
0104 .dbline 125
0104 ; if(U8FLAG==1)break;
0104 80911200 lds R24,_U8FLAG
0108 8130 cpi R24,1
010A 09F4 brne L26
010C X5:
010C .dbline 125
010C 2FC0 xjmp L20
010E L26:
010E .dbline 126
010E ; Delay_10us();
010E A2DF xcall _Delay_10us
0110 .dbline 127
0110 ; Delay_10us();
0110 A1DF xcall _Delay_10us
0112 .dbline 128
0112 ; Delay_10us();
0112 A0DF xcall _Delay_10us
0114 .dbline 129
0114 ; Delay_10us();
0114 9FDF xcall _Delay_10us
0116 .dbline 130
0116 ; U8temp=0;
0116 2224 clr R2
0118 20920F00 sts _U8temp,R2
011C .dbline 131
011C ; if(COM_R)U8temp=1;
011C 9C9B sbis 0x13,4
011E 03C0 rjmp L28
0120 X6:
0120 .dbline 131
0120 81E0 ldi R24,1
0122 80930F00 sts _U8temp,R24
0126 L28:
0126 .dbline 132
0126 ; U8FLAG=2;
0126 82E0 ldi R24,2
0128 80931200 sts _U8FLAG,R24
012C L30:
012C .dbline 133
012C ; while((COM_R)&&U8FLAG++);
012C L31:
012C .dbline 133
012C 9C9B sbis 0x13,4
012E 09C0 rjmp L33
0130 X7:
0130 20901200 lds R2,_U8FLAG
0134 3324 clr R3
0136 822D mov R24,R2
0138 8F5F subi R24,255 ; addi 1
013A 80931200 sts _U8FLAG,R24
013E 2220 tst R2
0140 A9F7 brne L30
0142 X8:
0142 L33:
0142 .dbline 135
0142 ; //超时则跳出for循环
0142 ; if(U8FLAG==1)break;
0142 80911200 lds R24,_U8FLAG
0146 8130 cpi R24,1
0148 09F4 brne L34
014A X9:
014A .dbline 135
014A 10C0 xjmp L20
014C L34:
014C .dbline 140
014C ; //判断数据位是0还是1
014C ;
014C ; // 如果高电平高过预定0高电平值则数据位为 1
014C ;
014C ; U8comdata<<=1;
014C 20900400 lds R2,_U8comdata
0150 220C lsl R2
0152 20920400 sts _U8comdata,R2
0156 .dbline 141
0156 ; U8comdata|=U8temp; //0
0156 20900F00 lds R2,_U8temp
015A 30900400 lds R3,_U8comdata
015E 3228 or R3,R2
0160 30920400 sts _U8comdata,R3
0164 .dbline 142
0164 ; }//rof
0164 L19:
0164 .dbline 120
0164 4395 inc R20
0166 L21:
0166 .dbline 120
0166 4830 cpi R20,8
0168 08F4 brsh X11
016A BECF xjmp L18
016C X11:
016C X10:
016C L20:
016C .dbline -2
016C L17:
016C .dbline 0 ; func end
016C 4991 ld R20,y+
016E 0895 ret
0170 .dbsym r i 20 c
0170 .dbend
0170 .dbfunc e RH _RH fV
.even
0170 _RH::
0170 .dbline -1
0170 .dbline 160
0170 ;
0170 ; }
0170 ;
0170 ; //--------------------------------
0170 ; //-----湿度读取子程序 ------------
0170 ; //--------------------------------
0170 ; //----以下变量均为全局变量--------
0170 ; //----温度高8位== U8T_data_H------
0170 ; //----温度低8位== U8T_data_L------
0170 ; //----湿度高8位== U8RH_data_H-----
0170 ; //----湿度低8位== U8RH_data_L-----
0170 ; //----校验 8位 == U8checkdata-----
0170 ; //----调用相关子程序如下----------
0170 ; //---- Delay();, Delay_10us();,COM();
0170 ; //--------------------------------
0170 ;
0170 ; void RH(void)
0170 ; {
0170 .dbline 163
0170 ;
0170 ; //主机拉低18ms
0170 ; COM_OUT;
0170 A49A sbi 0x14,4
0172 .dbline 164
0172 ; COM_CLR;
0172 AC98 cbi 0x15,4
0174 .dbline 165
0174 ; DelaymS(1);
0174 01E0 ldi R16,1
0176 10E0 ldi R17,0
0178 58DF xcall _DelaymS
017A .dbline 166
017A ; COM_IN;
017A A498 cbi 0x14,4
017C .dbline 167
017C ; COM_SET;
017C AC9A sbi 0x15,4
017E .dbline 170
017E ;
017E ; //总线由上拉电阻拉高 主机延时20us
017E ; Delay_10us();
017E 6ADF xcall _Delay_10us
0180 .dbline 171
0180 ; Delay_10us();
0180 69DF xcall _Delay_10us
0182 .dbline 172
0182 ; Delay_10us();
0182 68DF xcall _Delay_10us
0184 .dbline 173
0184 ; Delay_10us();
0184 67DF xcall _Delay_10us
0186 .dbline 179
0186 ; //主机设为输入 判断从机响应信号
0186 ; //P2_0=1;
0186 ;
0186 ; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
0186 ; // if(!P2_0) //T !
0186 ; if(COM_R)U8FLAG=1;
0186 9C9B sbis 0x13,4
0188 5DC0 rjmp L40
018A X12:
018A .dbline 179
018A 81E0 ldi R24,1
018C 80931200 sts _U8FLAG,R24
0190 59C0 xjmp L40
0192 L39:
0192 .dbline 181
0192 ; while(!(COM_R))
0192 ; {
0192 .dbline 182
0192 ; U8FLAG=2;
0192 82E0 ldi R24,2
0194 80931200 sts _U8FLAG,R24
0198 L42:
0198 .dbline 185
0198 ; //判断从机是否发出 80us 的低电平响应信号是否结束
0198 ; //while((!P2_0)&&U8FLAG++);
0198 ; while((!(COM_R))&&U8FLAG++);
0198 L43:
0198 .dbline 185
0198 9C99 sbic 0x13,4
019A 09C0 rjmp L45
019C X13:
019C 20901200 lds R2,_U8FLAG
01A0 3324 clr R3
01A2 822D mov R24,R2
01A4 8F5F subi R24,255 ; addi 1
01A6 80931200 sts _U8FLAG,R24
01AA 2220 tst R2
01AC A9F7 brne L42
01AE X14:
01AE L45:
01AE .dbline 186
01AE ; if(U8FLAG==1)break;
01AE 80911200 lds R24,_U8FLAG
01B2 8130 cpi R24,1
01B4 09F4 brne L46
01B6 X15:
01B6 .dbline 186
01B6 48C0 xjmp L41
01B8 L46:
01B8 .dbline 187
01B8 ; U8FLAG=2;
01B8 82E0 ldi R24,2
01BA 80931200 sts _U8FLAG,R24
01BE L48:
01BE .dbline 190
01BE ; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
01BE ; //while((P2_0)&&U8FLAG++);
01BE ; while((COM_R)&&U8FLAG++);
01BE L49:
01BE .dbline 190
01BE 9C9B sbis 0x13,4
01C0 09C0 rjmp L51
01C2 X16:
01C2 20901200 lds R2,_U8FLAG
01C6 3324 clr R3
01C8 822D mov R24,R2
01CA 8F5F subi R24,255 ; addi 1
01CC 80931200 sts _U8FLAG,R24
01D0 2220 tst R2
01D2 A9F7 brne L48
01D4 X17:
01D4 L51:
01D4 .dbline 191
01D4 ; if(U8FLAG==1)break;
01D4 80911200 lds R24,_U8FLAG
01D8 8130 cpi R24,1
01DA 09F4 brne L52
01DC X18:
01DC .dbline 191
01DC 35C0 xjmp L41
01DE L52:
01DE .dbline 193
01DE ; //数据接收状态
01DE ; COM();
01DE 81DF xcall _COM
01E0 .dbline 194
01E0 ; if(U8FLAG==1)break;
01E0 80911200 lds R24,_U8FLAG
01E4 8130 cpi R24,1
01E6 09F4 brne L54
01E8 X19:
01E8 .dbline 194
01E8 2FC0 xjmp L41
01EA L54:
01EA .dbline 195
01EA ; U8T_data_H_temp=U8comdata;
01EA 20900400 lds R2,_U8comdata
01EE 20920900 sts _U8T_data_H_temp,R2
01F2 .dbline 196
01F2 ; COM();
01F2 77DF xcall _COM
01F4 .dbline 197
01F4 ; if(U8FLAG==1)break;
01F4 80911200 lds R24,_U8FLAG
01F8 8130 cpi R24,1
01FA 09F4 brne L56
01FC X20:
01FC .dbline 197
01FC 25C0 xjmp L41
01FE L56:
01FE .dbline 198
01FE ; U8T_data_L_temp=U8comdata;
01FE 20900400 lds R2,_U8comdata
0202 20920800 sts _U8T_data_L_temp,R2
0206 .dbline 199
0206 ; COM();
0206 6DDF xcall _COM
0208 .dbline 200
0208 ; if(U8FLAG==1)break;
0208 80911200 lds R24,_U8FLAG
020C 8130 cpi R24,1
020E 09F4 brne L58
0210 X21:
0210 .dbline 200
0210 1BC0 xjmp L41
0212 L58:
0212 .dbline 201
0212 ; U8RH_data_H_temp=U8comdata;
0212 20900400 lds R2,_U8comdata
0216 20920700 sts _U8RH_data_H_temp,R2
021A .dbline 202
021A ; COM();
021A 63DF xcall _COM
021C .dbline 203
021C ; if(U8FLAG==1)break;
021C 80911200 lds R24,_U8FLAG
0220 8130 cpi R24,1
0222 09F4 brne L60
0224 X22:
0224 .dbline 203
0224 11C0 xjmp L41
0226 L60:
0226 .dbline 204
0226 ; U8RH_data_L_temp=U8comdata;
0226 20900400 lds R2,_U8comdata
022A 20920600 sts _U8RH_data_L_temp,R2
022E .dbline 205
022E ; COM();
022E 59DF xcall _COM
0230 .dbline 206
0230 ; if(U8FLAG==1)break;
0230 80911200 lds R24,_U8FLAG
0234 8130 cpi R24,1
0236 09F4 brne L62
0238 X23:
0238 .dbline 206
0238 07C0 xjmp L41
023A L62:
023A .dbline 207
023A ; U8checkdata_temp=U8comdata;
023A 20900400 lds R2,_U8comdata
023E 20920500 sts _U8checkdata_temp,R2
0242 .dbline 208
0242 ; break;
0242 02C0 xjmp L41
0244 L40:
0244 .dbline 180
0244 9C9B sbis 0x13,4
0246 A5CF rjmp L39
0248 X24:
0248 L41:
0248 .dbline 211
0248 ; }//while
0248 ; //P2_0=1;
0248 ; COM_IN;
0248 A498 cbi 0x14,4
024A .dbline 212
024A ; COM_SET;
024A AC9A sbi 0x15,4
024C .dbline 215
024C ; //数据校验
024C ;
024C ; U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
024C 20900800 lds R2,_U8T_data_L_temp
0250 30900900 lds R3,_U8T_data_H_temp
0254 320C add R3,R2
0256 20900700 lds R2,_U8RH_data_H_temp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -