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

📄 ds18b20.lis

📁 DS18B20温度监控程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0238 84E0              ldi R24,4
 023A 80938100          sts 129,R24
 023E                   .dbline 153
 023E           ;  /*通信口初始化*/
 023E           ;  UartInit();
 023E                   .dbline -2
 023E           L29:
 023E                   .dbline 0 ; func end
 023E CFC0              rjmp _UartInit
 0240                   .dbend
 0240                   .dbfunc e convert _convert fV
                        .even
 0240           _convert::
 0240                   .dbline -1
 0240                   .dbline 157
 0240           ; }
 0240           ; /*数据转换函数*/
 0240           ; void convert(void)
 0240           ; {timeb1=time1/100;
 0240                   .dbline 157
 0240 14E6              ldi R17,100
 0242 00910C00          lds R16,_time1
 0246 00D0              rcall div8u
 0248 00930A00          sts _timeb1,R16
 024C                   .dbline 158
 024C           ;  timeb2=time1%100/10;
 024C 14E6              ldi R17,100
 024E 00910C00          lds R16,_time1
 0252 00D0              rcall mod8u
 0254 1AE0              ldi R17,10
 0256 00D0              rcall div8u
 0258 00930900          sts _timeb2,R16
 025C                   .dbline 159
 025C           ;  timeb3=time1%10;
 025C 1AE0              ldi R17,10
 025E 00910C00          lds R16,_time1
 0262 00D0              rcall mod8u
 0264 00930800          sts _timeb3,R16
 0268                   .dbline 160
 0268           ;  timeb4=time2/100;
 0268 14E6              ldi R17,100
 026A 00910B00          lds R16,_time2
 026E 00D0              rcall div8u
 0270 00930700          sts _timeb4,R16
 0274                   .dbline 161
 0274           ;  timeb5=time2%100/10;
 0274 14E6              ldi R17,100
 0276 00910B00          lds R16,_time2
 027A 00D0              rcall mod8u
 027C 1AE0              ldi R17,10
 027E 00D0              rcall div8u
 0280 00930600          sts _timeb5,R16
 0284                   .dbline 162
 0284           ;  timeb6=time2%10;
 0284 1AE0              ldi R17,10
 0286 00910B00          lds R16,_time2
 028A 00D0              rcall mod8u
 028C 00930500          sts _timeb6,R16
 0290                   .dbline -2
 0290           L30:
 0290                   .dbline 0 ; func end
 0290 0895              ret
 0292                   .dbend
 0292                   .dbfunc e Init_1wire _Init_1wire fV
                        .even
 0292           _Init_1wire::
 0292                   .dbline -1
 0292                   .dbline 167
 0292           ; }
 0292           ; /*****************单总线时序**************/
 0292           ; /*初始化*/
 0292           ; void Init_1wire(void)
 0292           ; {flag = SREG;                         /*中断保护*/
 0292                   .dbline 167
 0292 2FB6              in R2,0x3f
 0294 20920D00          sts _flag,R2
 0298                   .dbline 168
 0298           ;  CLI();       
 0298 F894              cli
 029A                   .dbline 170
 029A           ;                                       /*关中断*/
 029A           ;  DRC(1);              //Out
 029A 389A              sbi 0x7,0
 029C                   .dbline 171
 029C           ;  DQ(1);
 029C 409A              sbi 0x8,0
 029E                   .dbline 172
 029E           ;  NOP();    //DQ拉低480-960US,接着将数据线拉高15-60US
 029E 0000              nop
 02A0                   .dbline 173
 02A0           ;  DQ(0);
 02A0 88B1              in R24,0x8
 02A2 8E7F              andi R24,254
 02A4 88B9              out 0x8,R24
 02A6                   .dbline 174
 02A6           ;  delay_10us(56);   
 02A6 08E3              ldi R16,56
 02A8 5BD0              rcall _delay_10us
 02AA                   .dbline 175
 02AA           ;  DQ(1);
 02AA 409A              sbi 0x8,0
 02AC                   .dbline 176
 02AC           ;  DRC(0);        //In  释放总线  此时上拉电阻使能
 02AC 87B1              in R24,0x7
 02AE 8E7F              andi R24,254
 02B0 87B9              out 0x7,R24
 02B2                   .dbline 177
 02B2           ;  delay_10us(7);            
 02B2 07E0              ldi R16,7
 02B4 55D0              rcall _delay_10us
 02B6           L32:
 02B6                   .dbline 178
 02B6           ;  while(PINC & 0x01);
 02B6           L33:
 02B6                   .dbline 178
 02B6 3099              sbic 0x6,0
 02B8 FECF              rjmp L32
 02BA           X16:
 02BA                   .dbline 179
 02BA           ;  delay_10us(50);     //presence pulse 60-240us  480us min
 02BA 02E3              ldi R16,50
 02BC 51D0              rcall _delay_10us
 02BE                   .dbline 181
 02BE           ;  
 02BE           ;  if (flag & 0x80) 
 02BE 20900D00          lds R2,_flag
 02C2 27FE              sbrs R2,7
 02C4 01C0              rjmp L35
 02C6           X17:
 02C6                   .dbline 182
 02C6           ;    {SEI();  /*恢复中断状态*/
 02C6                   .dbline 182
 02C6 7894              sei
 02C8                   .dbline 183
 02C8           ;    }
 02C8           L35:
 02C8                   .dbline -2
 02C8           L31:
 02C8                   .dbline 0 ; func end
 02C8 0895              ret
 02CA                   .dbend
 02CA                   .dbfunc e WriteByte_1wire _WriteByte_1wire fV
 02CA           ;           temp -> R10
 02CA           ;              i -> R20
 02CA           ;           data -> R12
                        .even
 02CA           _WriteByte_1wire::
 02CA 00D0              rcall push_xgset303C
 02CC C02E              mov R12,R16
 02CE                   .dbline -1
 02CE                   .dbline 187
 02CE           ; }
 02CE           ; /*写字节*/                    
 02CE           ; void WriteByte_1wire(uchar data)
 02CE           ; {uchar i,temp;
 02CE                   .dbline 188
 02CE           ;  temp=data;
 02CE AC2C              mov R10,R12
 02D0                   .dbline 190
 02D0           ;  
 02D0           ;  flag = SREG;                         /*中断保护*/
 02D0 2FB6              in R2,0x3f
 02D2 20920D00          sts _flag,R2
 02D6                   .dbline 191
 02D6           ;  CLI();       
 02D6 F894              cli
 02D8                   .dbline 193
 02D8           ;  
 02D8           ;  DRC(1);
 02D8 389A              sbi 0x7,0
 02DA                   .dbline 194
 02DA           ;  for(i=0;i<8;i++)
 02DA 4427              clr R20
 02DC 0EC0              rjmp L41
 02DE           L38:
 02DE                   .dbline 195
 02DE           ;   {DQ(1);
 02DE                   .dbline 195
 02DE 409A              sbi 0x8,0
 02E0                   .dbline 196
 02E0           ;    NOP();
 02E0 0000              nop
 02E2                   .dbline 197
 02E2           ;    DQ(0);               //写时间隙开始
 02E2 88B1              in R24,0x8
 02E4 8E7F              andi R24,254
 02E6 88B9              out 0x8,R24
 02E8                   .dbline 198
 02E8           ;    delay_10us(1);
 02E8 01E0              ldi R16,1
 02EA 3AD0              rcall _delay_10us
 02EC                   .dbline 199
 02EC           ;    if(temp&0x01)DQ(1);
 02EC A0FE              sbrs R10,0
 02EE 01C0              rjmp L42
 02F0           X18:
 02F0                   .dbline 199
 02F0 409A              sbi 0x8,0
 02F2           L42:
 02F2                   .dbline 201
 02F2           ;    //else DQ(0);
 02F2           ;    temp>>=1;             //LSB First
 02F2 A694              lsr R10
 02F4                   .dbline 202
 02F4           ;    delay_10us(7);
 02F4 07E0              ldi R16,7
 02F6 34D0              rcall _delay_10us
 02F8                   .dbline 203
 02F8           ;   }
 02F8           L39:
 02F8                   .dbline 194
 02F8 4395              inc R20
 02FA           L41:
 02FA                   .dbline 194
 02FA 4830              cpi R20,8
 02FC 80F3              brlo L38
 02FE           X19:
 02FE                   .dbline 204
 02FE           ;  DQ(1);
 02FE 409A              sbi 0x8,0
 0300                   .dbline 206
 0300           ;  
 0300           ;  if (flag & 0x80) 
 0300 20900D00          lds R2,_flag
 0304 27FE              sbrs R2,7
 0306 01C0              rjmp L44
 0308           X20:
 0308                   .dbline 207
 0308           ;    {SEI();  /*恢复中断状态*/
 0308                   .dbline 207
 0308 7894              sei
 030A                   .dbline 208
 030A           ;    }  
 030A           L44:
 030A                   .dbline -2
 030A           L37:
 030A                   .dbline 0 ; func end
 030A 00C0              rjmp pop_xgset303C
 030C                   .dbsym r temp 10 c
 030C                   .dbsym r i 20 c
 030C                   .dbsym r data 12 c
 030C                   .dbend
 030C                   .dbfunc e ReadByte_1wire _ReadByte_1wire fc
 030C           ;           data -> R20
 030C           ;              i -> R22
                        .even
 030C           _ReadByte_1wire::
 030C 4A93              st -y,R20
 030E 6A93              st -y,R22
 0310                   .dbline -1
 0310                   .dbline 212
 0310           ; }
 0310           ; /*读字节*/                   
 0310           ; uchar ReadByte_1wire(void)
 0310           ; {uchar i,data=0;
 0310                   .dbline 212
 0310 4427              clr R20
 0312                   .dbline 214
 0312           ; 
 0312           ;  flag = SREG;                         /*中断保护*/
 0312 2FB6              in R2,0x3f
 0314 20920D00          sts _flag,R2
 0318                   .dbline 215
 0318           ;  CLI();
 0318 F894              cli
 031A                   .dbline 217
 031A           ;  
 031A           ;  for(i=0;i<8;i++)
 031A 6627              clr R22
 031C 14C0              rjmp L50
 031E           L47:
 031E                   .dbline 218
 031E           ;   {data>>=1;            //处理方法:先右移  后将最高位与 0x80相或 !!!
 031E                   .dbline 218
 031E 4695              lsr R20
 0320                   .dbline 219
 0320           ;    DRC(1);              
 0320 389A              sbi 0x7,0
 0322                   .dbline 220
 0322           ;    DQ(1);
 0322 409A              sbi 0x8,0
 0324                   .dbline 221
 0324           ;    NOP();
 0324 0000              nop
 0326                   .dbline 222
 0326           ;    DQ(0);
 0326 88B1              in R24,0x8
 0328 8E7F              andi R24,254
 032A 88B9              out 0x8,R24
 032C                   .dbline 223
 032C           ;    delay_1us();        //delay 3us
 032C 28D0              rcall _delay_1us
 032E                   .dbline 224
 032E           ;    delay_1us();
 032E 27D0              rcall _delay_1us
 0330                   .dbline 226
 0330           ;    //DQ(1);
 0330           ;    DRC(0);
 0330 87B1              in R24,0x7
 0332 8E7F              andi R24,254
 0334 87B9              out 0x7,R24
 0336                   .dbline 227
 0336           ;    delay_10us(1);
 0336 01E0              ldi R16,1
 0338 13D0              rcall _delay_10us
 033A                   .dbline 228
 033A           ;    if(PINC&0x01)data|=0x80;
 033A 309B              sbis 0x6,0
 033C 01C0              rjmp L51
 033E           X21:
 033E                   .dbline 228
 033E 4068              ori R20,128
 0340           L51:
 0340                   .dbline 229
 0340           ;    delay_10us(6);
 0340 06E0              ldi R16,6

⌨️ 快捷键说明

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