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

📄 main.lis

📁 ds18b20多个时候的分辨函数
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00B6           _read_a_bit::
 00B6 4A93              st -y,R20
 00B8                   .dbline -1
 00B8                   .dbline 144
 00B8           ;       //HLD_DS18B20;   //Maga16控制总线
 00B8           ; 
 00B8           ; 
 00B8           ; }
 00B8           ; 
 00B8           ; 
 00B8           ; 
 00B8           ; /*
 00B8           ; 
 00B8           ;  读一位
 00B8           ; 
 00B8           ; */
 00B8           ; 
 00B8           ; 
 00B8           ; 
 00B8           ; 
 00B8           ; 
 00B8           ; unsigned char  read_a_bit(void){
 00B8                   .dbline 145
 00B8           ;  unsigned char temp=0;
 00B8 4427              clr R20
 00BA                   .dbline 146
 00BA           ;     HLD_DS18B20;   //Maga16控制总线
 00BA D09A              sbi 0x1a,0
 00BC                   .dbline 147
 00BC           ;     CLR_DS18B20;   //强制拉低
 00BC D898              cbi 0x1b,0
 00BE                   .dbline 148
 00BE           ;     NOP();
 00BE 0000              nop
 00C0                   .dbline 149
 00C0           ;     NOP();
 00C0 0000              nop
 00C2                   .dbline 150
 00C2           ;     NOP();
 00C2 0000              nop
 00C4                   .dbline 151
 00C4           ;     NOP();
 00C4 0000              nop
 00C6                   .dbline 152
 00C6           ;     NOP();
 00C6 0000              nop
 00C8                   .dbline 153
 00C8           ;     NOP();
 00C8 0000              nop
 00CA                   .dbline 154
 00CA           ;     NOP();   
 00CA 0000              nop
 00CC                   .dbline 155
 00CC           ;     NOP();         //延时大于1us   
 00CC 0000              nop
 00CE                   .dbline 156
 00CE           ;     RLS_DS18B20;     //释放总线
 00CE D098              cbi 0x1a,0
 00D0                   .dbline 157
 00D0           ;     NOP();
 00D0 0000              nop
 00D2                   .dbline 158
 00D2           ;     NOP();
 00D2 0000              nop
 00D4                   .dbline 159
 00D4           ;     NOP();
 00D4 0000              nop
 00D6                   .dbline 160
 00D6           ;     if(STU_DS18B20)
 00D6 C89B              sbis 0x19,0
 00D8 02C0              rjmp L26
 00DA           X7:
 00DA                   .dbline 161
 00DA           ;     temp=1;
 00DA 41E0              ldi R20,1
 00DC 01C0              xjmp L27
 00DE           L26:
 00DE                   .dbline 163
 00DE           ;       else
 00DE           ;       temp=0;
 00DE 4427              clr R20
 00E0           L27:
 00E0                   .dbline 164
 00E0           ;     delayUs(16);       //14.92us
 00E0 00E1              ldi R16,16
 00E2 98DF              xcall _delayUs
 00E4                   .dbline 165
 00E4           ;     delayUs(16);       //14.92us
 00E4 00E1              ldi R16,16
 00E6 96DF              xcall _delayUs
 00E8                   .dbline 166
 00E8           ;     RLS_DS18B20;     //释放总线
 00E8 D098              cbi 0x1a,0
 00EA                   .dbline 167
 00EA           ;     delayUs(35);       //30.38us
 00EA 03E2              ldi R16,35
 00EC 93DF              xcall _delayUs
 00EE                   .dbline 169
 00EE           ;       //HLD_DS18B20;   //Maga16控制总线
 00EE           ;    return temp;
 00EE 042F              mov R16,R20
 00F0                   .dbline -2
 00F0           L25:
 00F0                   .dbline 0 ; func end
 00F0 4991              ld R20,y+
 00F2 0895              ret
 00F4                   .dbsym r temp 20 c
 00F4                   .dbend
 00F4                   .dbfunc e readuint8DS18B20 _readuint8DS18B20 fc
 00F4           ;         retVal -> R20
 00F4           ;           temp -> R10
 00F4           ;              i -> R22
                        .even
 00F4           _readuint8DS18B20::
 00F4 0E940000          xcall push_xgsetF00C
 00F8                   .dbline -1
 00F8                   .dbline 181
 00F8           ; }
 00F8           ; 
 00F8           ; 
 00F8           ; 
 00F8           ; 
 00F8           ; 
 00F8           ; /**********************************************************************
 00F8           ; functionName: uint8 readuint8DS18B20(void)
 00F8           ; description :读DS18B20一个字节
 00F8           ; **********************************************************************/
 00F8           ; uint8 readuint8DS18B20(void)
 00F8           ; {
 00F8                   .dbline 183
 00F8           ;   uint8 i;
 00F8           ;   uint8 retVal=0;
 00F8 4427              clr R20
 00FA                   .dbline 184
 00FA           ;   uint8 temp=0;
 00FA AA24              clr R10
 00FC                   .dbline 185
 00FC           ;   RLS_DS18B20;     //释放总线
 00FC D098              cbi 0x1a,0
 00FE                   .dbline 186
 00FE           ;   for(i=8;i>0;i--)
 00FE 68E0              ldi R22,8
 0100 07C0              xjmp L32
 0102           L29:
 0102                   .dbline 187
 0102           ;   {
 0102                   .dbline 188
 0102           ;       retVal>>=1;
 0102 4695              lsr R20
 0104                   .dbline 212
 0104           ;         /*
 0104           ;         HLD_DS18B20;   //Maga16控制总线
 0104           ;     CLR_DS18B20;   //强制拉低
 0104           ;     NOP();
 0104           ;       NOP();
 0104           ;       NOP();
 0104           ;       NOP();
 0104           ;       NOP();
 0104           ;     NOP();
 0104           ;     NOP();   
 0104           ;     NOP();         //延时大于1us   
 0104           ;     RLS_DS18B20;     //释放总线
 0104           ;     NOP();
 0104           ;     NOP();
 0104           ;     NOP();
 0104           ;     if(STU_DS18B20)
 0104           ;     retVal|=0x80;
 0104           ;     delayUs(16);       //14.92us
 0104           ;     delayUs(16);       //14.92us
 0104           ;     RLS_DS18B20;     //释放总线
 0104           ;     delayUs(35);       //30.38us
 0104           ;       */
 0104           ;       
 0104           ;       temp=read_a_bit();
 0104 D8DF              xcall _read_a_bit
 0106 A02E              mov R10,R16
 0108                   .dbline 213
 0108           ;       if(temp)
 0108 0023              tst R16
 010A 09F0              breq L33
 010C           X8:
 010C                   .dbline 214
 010C           ;       retVal|=0x80;
 010C 4068              ori R20,128
 010E           L33:
 010E                   .dbline 216
 010E           ;       
 010E           ;   }
 010E           L30:
 010E                   .dbline 186
 010E 6A95              dec R22
 0110           L32:
 0110                   .dbline 186
 0110 80E0              ldi R24,0
 0112 8617              cp R24,R22
 0114 B0F3              brlo L29
 0116           X9:
 0116                   .dbline 217
 0116           ;   delayUs(1);         //2.71us(大于1us就行了)
 0116 01E0              ldi R16,1
 0118 7DDF              xcall _delayUs
 011A                   .dbline 218
 011A           ;   return(retVal);
 011A 042F              mov R16,R20
 011C                   .dbline -2
 011C           L28:
 011C                   .dbline 0 ; func end
 011C 0C940000          xjmp pop_xgsetF00C
 0120                   .dbsym r retVal 20 c
 0120                   .dbsym r temp 10 c
 0120                   .dbsym r i 22 c
 0120                   .dbend
 0120                   .dbfunc e writeuint8DS18B20 _writeuint8DS18B20 fV
 0120           ;           temp -> R22
 0120           ;              i -> R20
 0120           ;             wb -> R10
                        .even
 0120           _writeuint8DS18B20::
 0120 0E940000          xcall push_xgsetF00C
 0124 A02E              mov R10,R16
 0126                   .dbline -1
 0126                   .dbline 227
 0126           ; }
 0126           ; 
 0126           ; 
 0126           ; /*******************************************************************************
 0126           ; functionName: uint8 readuint8DS18B20(void)
 0126           ; description :写DS18B20一个字节
 0126           ; ********************************************************************************/
 0126           ; void writeuint8DS18B20(uint8 wb)
 0126           ; {
 0126                   .dbline 230
 0126           ;   uint8 i;
 0126           ;   uint8 temp;
 0126           ;   RLS_DS18B20;     //释放总线
 0126 D098              cbi 0x1a,0
 0128                   .dbline 231
 0128           ;   for(i=0;i<8;i++)
 0128 4427              clr R20
 012A 09C0              xjmp L39
 012C           L36:
 012C                   .dbline 232
 012C           ;   {
 012C                   .dbline 233
 012C           ;     temp=wb>>i;
 012C 0A2D              mov R16,R10
 012E 142F              mov R17,R20
 0130 0E940000          xcall lsr8
 0134 602F              mov R22,R16
 0136                   .dbline 234
 0136           ;     temp&=0x01;
 0136 6170              andi R22,1
 0138                   .dbline 235
 0138           ;     write_a_bit(temp);
 0138 062F              mov R16,R22
 013A A9DF              xcall _write_a_bit
 013C                   .dbline 251
 013C           ;    /*
 013C           ;     HLD_DS18B20;     //Maga16控制总线
 013C           ;     CLR_DS18B20;     //强制拉低
 013C           ;     delayUs(16);       //14.92us
 013C           ;     temp=wb>>i;
 013C           ;     temp&=0x01;
 013C           ;     if(temp)
 013C           ;     RLS_DS18B20;     //释放总线
 013C           ;     else
 013C           ;     CLR_DS18B20;     //强制拉低
 013C           ;     delayUs(16);       //14.92us
 013C           ;     delayUs(35);       //30.38us
 013C           ;     RLS_DS18B20;     //释放总线
 013C           ;     delayUs(1);         //2.71us(大于1us就行了)
 013C           ;       */
 013C           ;   }
 013C           L37:
 013C                   .dbline 231
 013C 4395              inc R20
 013E           L39:
 013E                   .dbline 231
 013E 4830              cpi R20,8
 0140 A8F3              brlo L36
 0142           X10:
 0142                   .dbline -2
 0142           L35:
 0142                   .dbline 0 ; func end
 0142 0C940000          xjmp pop_xgsetF00C
 0146                   .dbsym r temp 22 c
 0146                   .dbsym r i 20 c
 0146                   .dbsym r wb 10 c
 0146                   .dbend
 0146                   .dbfunc e readTempDS18B20 _readTempDS18B20 fi
 0146           ;              x -> R10,R11
 0146           ;          tempH -> R12
 0146           ;          tempL -> R10
                        .even
 0146           _readTempDS18B20::
 0146 0E940000          xcall push_xgset003C
 014A                   .dbline -1
 014A                   .dbline 261
 014A           ; }
 014A           ; 
 014A           ; //////////////////////////////////////////////////////////
 014A           ; 
 014A           ; /*******************************************************************************
 014A           ; functionName: unsigned int readTempDS18B20(void)
 014A           ; description :读DS18B20温度
 014A           ; ********************************************************************************/
 014A           ; unsigned int readTempDS18B20(void)
 014A           ; {
 014A                   .dbline 264
 014A           ;   uint8 tempL,tempH;
 014A           ;   uint16 x;
 014A           ;   resetDS18B20();
 014A 79DF              xcall _resetDS18B20
 014C                   .dbline 265
 014C           ;   writeuint8DS18B20(0xcc);   //跳过ROM
 014C 0CEC              ldi R16,204
 014E E8DF              xcall _writeuint8DS18B20
 0150                   .dbline 266
 0150           ;   writeuint8DS18B20(0x44);     //启动温度转换
 0150 04E4              ldi R16,68
 0152 E6DF              xcall _writeuint8DS18B20
 0154                   .dbline 267
 0154           ;   delayUs(1);
 0154 01E0              ldi R16,1
 0156 5EDF              xcall _delayUs
 0158                   .dbline 268
 0158           ;   resetDS18B20();
 0158 72DF              xcall _resetDS18B20
 015A                   .dbline 269
 015A           ;   writeuint8DS18B20(0xcc);     //跳过ROM
 015A 0CEC              ldi R16,204
 015C E1DF              xcall _writeuint8DS18B20
 015E                   .dbline 270
 015E           ;   writeuint8DS18B20(0xbe);     //读数据
 015E 0EEB              ldi R16,190
 0160 DFDF              xcall _writeuint8DS18B20
 0162                   .dbline 271
 0162           ;   tempL=readuint8DS18B20();
 0162 C8DF              xcall _readuint8DS18B20
 0164 A02E              mov R10,R16
 0166                   .dbline 272
 0166           ;   tempH=readuint8DS18B20();
 0166 C6DF              xcall _readuint8DS18B20
 0168 C02E              mov R12,R16
 016A                   .dbline 273
 016A           ;   x=(tempH<<8)|tempL;

⌨️ 快捷键说明

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