can18b20.lis

来自「基于CAN总线的 温度采集方法。选用DS18B20温度传感器。」· LIS 代码 · 共 1,548 行 · 第 1/5 页

LIS
1,548
字号
 022E 602F              mov R22,R16
 0230                   .dbline -1
 0230                   .dbline 273
 0230           ; }
 0230           ; 
 0230           ; /*===================================================================
 0230           ; //    函数功能:      向 1-WIRE 总线上写一个字节
 0230           ; //    形参:          value           写到总线上的值
 0230           ; //    返回:          void
 0230           ; //    编写:          2004/8/25
 0230           ; ===================================================================*/
 0230           ; void  write_byte(unsigned char value)
 0230           ; {
 0230                   .dbline 275
 0230           ;       unsigned char   i;
 0230           ;       DDRC |= DQ;
 0230 A59A              sbi 0x14,5
 0232                   .dbline 276
 0232           ;       for(i = 8; i > 0; i--)
 0232 48E0              ldi R20,8
 0234 15C0              rjmp L81
 0236           L78:
 0236                   .dbline 277
 0236           ;       {
 0236                   .dbline 278
 0236           ;               if(value & 0x01)
 0236 60FF              sbrs R22,0
 0238 09C0              rjmp L82
 023A                   .dbline 279
 023A           ;               {
 023A                   .dbline 280
 023A           ;                       PORTC &= ~DQ;                                   //      pull DQ low to start timeslot
 023A AD98              cbi 0x15,5
 023C                   .dbline 281
 023C           ;                       delay_us(10);
 023C 0AE0              ldi R16,10
 023E 10E0              ldi R17,0
 0240 B6DF              rcall _delay_us
 0242                   .dbline 282
 0242           ;                       PORTC |= DQ;
 0242 AD9A              sbi 0x15,5
 0244                   .dbline 283
 0244           ;                       delay_us(100);
 0244 04E6              ldi R16,100
 0246 10E0              ldi R17,0
 0248 B2DF              rcall _delay_us
 024A                   .dbline 284
 024A           ;               }
 024A 08C0              rjmp L83
 024C           L82:
 024C                   .dbline 286
 024C           ;               else
 024C           ;               {
 024C                   .dbline 287
 024C           ;                       PORTC &= ~DQ;                                   //      pull DQ low to start timeslot
 024C AD98              cbi 0x15,5
 024E                   .dbline 288
 024E           ;                       delay_us(100);
 024E 04E6              ldi R16,100
 0250 10E0              ldi R17,0
 0252 ADDF              rcall _delay_us
 0254                   .dbline 289
 0254           ;                       PORTC |= DQ;
 0254 AD9A              sbi 0x15,5
 0256                   .dbline 290
 0256           ;                       delay_us(10);
 0256 0AE0              ldi R16,10
 0258 10E0              ldi R17,0
 025A A9DF              rcall _delay_us
 025C                   .dbline 291
 025C           ;               }
 025C           L83:
 025C                   .dbline 292
 025C 6695              lsr R22
 025E                   .dbline 293
 025E           L79:
 025E                   .dbline 276
 025E 4A95              dec R20
 0260           L81:
 0260                   .dbline 276
 0260 2224              clr R2
 0262 2416              cp R2,R20
 0264 40F3              brlo L78
 0266                   .dbline -2
 0266           L77:
 0266 00D0              rcall pop_gset2
 0268                   .dbline 0 ; func end
 0268 0895              ret
 026A                   .dbsym r i 20 c
 026A                   .dbsym r value 22 c
 026A                   .dbend
 026A                   .dbfunc e wait _wait fV
 026A           ;              i -> R20,R21
 026A           ;              n -> R22,R23
                        .even
 026A           _wait::
 026A 00D0              rcall push_gset2
 026C B801              movw R22,R16
 026E                   .dbline -1
 026E                   .dbline 377
 026E           ;               value >>= 1;
 026E           ;       }
 026E           ; }
 026E           ; 
 026E           ; /*===================================================================
 026E           ; //    函数功能:      读取温度
 026E           ; //    形参:          *temperature    温度存储空间
 026E           ; //    返回:          unsigned char   true为有效
 026E           ; //    编写:          2004/8/25
 026E           ; ===================================================================*/
 026E           ; /*unsigned char       Read_Temperature(unsigned int *temperature)
 026E           ; {
 026E           ;       unsigned char   i;
 026E           ;       union{
 026E           ;               unsigned char c[2];
 026E           ;               unsigned int x;
 026E           ;       }temp;
 026E           ;       unsigned char   temporary[9];
 026E           ; 
 026E           ;       while(!ds1820_ack());
 026E           ;       write_byte(0xCC);                                               //      Skip ROM
 026E           ;       write_byte(0x44);                                               //      Start Conversion
 026E           ;       //for(i = 0; i < 16; i++)
 026E           ;               //delay_us(50000);
 026E           ;       delay(20);
 026E           ;       while(!ds1820_ack());
 026E           ;       write_byte(0xCC);                                               //      Skip ROM
 026E           ;       write_byte(0xBE);                                               //      Read Scratch Pad
 026E           ;       for(i = 0; i < 9; i++)
 026E           ;               temporary[i] = read_byte();
 026E           ;       temp.c[0] = temporary[0];
 026E           ;       temp.c[1] = temporary[1];
 026E           ;       
 026E           ;       if(crccheck(temporary,9))
 026E           ;               return  0;
 026E           ;       else
 026E           ;       {       
 026E           ;               *temperature = temp.x;
 026E           ;               return  1;
 026E           ;       }
 026E           ; }
 026E           ; */
 026E           ; /*===================================================================
 026E           ; //    函数功能:      读取Rom Code
 026E           ; //    形参:          *temp           DS18B20的Rom Code存储空间
 026E           ; //    返回:          unsigned char   true为有效
 026E           ; //    编写:          2004/8/25
 026E           ; ===================================================================*/
 026E           ; /*unsigned char       Read_RomCode(unsigned char *temp)
 026E           ; {
 026E           ;       ds1820_ack();
 026E           ;       write_byte(0x33);
 026E           ;       temp[0] = read_byte();
 026E           ;       temp[1] = read_byte();
 026E           ;       temp[2] = read_byte();
 026E           ;       temp[3] = read_byte();
 026E           ;       temp[4] = read_byte();
 026E           ;       temp[5] = read_byte();
 026E           ;       temp[6] = read_byte();
 026E           ;       temp[7] = read_byte();
 026E           ;       if(crccheck(temp,8))
 026E           ;               return  0;
 026E           ;       else
 026E           ;               return  1;
 026E           ; }
 026E           ; */
 026E           ; /*===================================================================
 026E           ; //    函数功能:      匹配DS18B20
 026E           ; //    形参:          *p      DS18B20的Rom Code
 026E           ; //    返回:          void
 026E           ; //    编写:          2004/8/25
 026E           ; ===================================================================*/
 026E           ; /*void ds1820_match(unsigned char *p)
 026E           ; {
 026E           ;       unsigned char i;
 026E           ;       ds1820_ack();
 026E           ;       write_byte(0x55);        
 026E           ;       for(i=0;i<8;i++)
 026E           ;               write_byte(p[i]);
 026E           ; }
 026E           ; */
 026E           ; 
 026E           ; 
 026E           ; /*nms delay*/
 026E           ; void wait(unsigned int n)
 026E           ; {unsigned int i;
 026E                   .dbline 378
 026E           ;  for(i=0;i<n;i++)
 026E 4427              clr R20
 0270 5527              clr R21
 0272 03C0              rjmp L88
 0274           L85:
 0274                   .dbline 379
 0274 07D0              rcall _delay_1ms
 0276           L86:
 0276                   .dbline 378
 0276 4F5F              subi R20,255  ; offset = 1
 0278 5F4F              sbci R21,255
 027A           L88:
 027A                   .dbline 378
 027A 4617              cp R20,R22
 027C 5707              cpc R21,R23
 027E D0F3              brlo L85
 0280                   .dbline -2
 0280           L84:
 0280 00D0              rcall pop_gset2
 0282                   .dbline 0 ; func end
 0282 0895              ret
 0284                   .dbsym r i 20 i
 0284                   .dbsym r n 22 i
 0284                   .dbend
 0284                   .dbfunc e delay_1ms _delay_1ms fV
 0284           ;              i -> R16,R17
                        .even
 0284           _delay_1ms::
 0284                   .dbline -1
 0284                   .dbline 384
 0284           ;  delay_1ms();
 0284           ; }
 0284           ; 
 0284           ; /*1ms delay*/
 0284           ; void delay_1ms(void)
 0284           ; {unsigned int i;
 0284                   .dbline 385
 0284 0027              clr R16
 0286 1127              clr R17
 0288 02C0              rjmp L93
 028A           L90:
 028A                   .dbline 385
 028A           L91:
 028A                   .dbline 385
 028A 0F5F              subi R16,255  ; offset = 1
 028C 1F4F              sbci R17,255
 028E           L93:
 028E                   .dbline 385
 028E           ;  for(i=0;i<1035;i++);
 028E 0B30              cpi R16,11
 0290 E4E0              ldi R30,4
 0292 1E07              cpc R17,R30
 0294 D0F3              brlo L90
 0296                   .dbline -2
 0296           L89:
 0296                   .dbline 0 ; func end
 0296 0895              ret
 0298                   .dbsym r i 16 i
 0298                   .dbend
 0298                   .dbfunc e delay _delay fV
 0298           ;              i -> R20,R21
 0298           ;              n -> R16,R17
                        .even
 0298           _delay::
 0298 00D0              rcall push_gset1
 029A                   .dbline -1
 029A                   .dbline 389
 029A           ; }
 029A           ; 
 029A           ; void delay(unsigned int n)
 029A           ; { unsigned int i;
 029A                   .dbline 390
 029A           ;   for(i=0;i<n;i++)
 029A 4427              clr R20
 029C 5527              clr R21
 029E 03C0              rjmp L98
 02A0           L95:
 02A0                   .dbline 391
 02A0 0000              nop
 02A2           L96:
 02A2                   .dbline 390
 02A2 4F5F              subi R20,255  ; offset = 1
 02A4 5F4F              sbci R21,255
 02A6           L98:
 02A6                   .dbline 390
 02A6 4017              cp R20,R16
 02A8 5107              cpc R21,R17
 02AA D0F3              brlo L95
 02AC                   .dbline -2
 02AC           L94:
 02AC 00D0              rcall pop_gset1
 02AE                   .dbline 0 ; func end
 02AE 0895              ret
 02B0                   .dbsym r i 20 i
 02B0                   .dbsym r n 16 i
 02B0                   .dbend
 02B0                   .dbfunc e HC595_SENDDAT _HC595_SENDDAT fV
 02B0           ;              i -> R20
 02B0           ;            dat -> R16
                        .even
 02B0           _HC595_SENDDAT::
 02B0 00D0              rcall push_gset1
 02B2                   .dbline -1
 02B2                   .dbline 396
 02B2           ;    asm("nop");
 02B2           ; }
 02B2           ; 
 02B2           ; /*595数据传输*/
 02B2           ; void HC595_SENDDAT(unsigned char dat)
 02B2           ; {unsigned char i;
 02B2                   .dbline 397
 02B2           ;   C_CS;  //cs 拉低
 02B2 A998              cbi 0x15,1
 02B4                   .dbline 398
 02B4           ;   asm("nop");
 02B4 0000              nop
 02B6                   .dbline 399
 02B6           ;   for(i=0;i<8;i++)
 02B6 4427              clr R20
 02B8 0BC0              rjmp L103
 02BA           L100:
 02BA                   .dbline 400
 02BA           ;   {C_CLK ;  //时钟拉低

⌨️ 快捷键说明

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