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

📄 温湿度传感器.lis

📁 avr基础程序大全
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -