can18b20.lis

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

LIS
1,548
字号
 02BA                   .dbline 400
 02BA A898              cbi 0x15,0
 02BC                   .dbline 401
 02BC           ;      asm("nop");
 02BC 0000              nop
 02BE                   .dbline 402
 02BE           ;      if((dat&0x80)!=0)
 02BE 07FF              sbrs R16,7
 02C0 02C0              rjmp L104
 02C2                   .dbline 403
 02C2           ;      S_DATA;
 02C2 AA9A              sbi 0x15,2
 02C4 01C0              rjmp L105
 02C6           L104:
 02C6                   .dbline 405
 02C6           ;      else
 02C6           ;      C_DATA; 
 02C6 AA98              cbi 0x15,2
 02C8           L105:
 02C8                   .dbline 406
 02C8 000F              lsl R16
 02CA                   .dbline 407
 02CA 0000              nop
 02CC                   .dbline 408
 02CC A89A              sbi 0x15,0
 02CE                   .dbline 409
 02CE           L101:
 02CE                   .dbline 399
 02CE 4395              inc R20
 02D0           L103:
 02D0                   .dbline 399
 02D0 4830              cpi R20,8
 02D2 98F3              brlo L100
 02D4                   .dbline 410
 02D4           ;      dat<<=1;
 02D4           ;        asm("nop");
 02D4           ;   S_CLK;  // 时钟拉高
 02D4           ;  }
 02D4           ;  S_CS;  //cs 拉高
 02D4 A99A              sbi 0x15,1
 02D6                   .dbline -2
 02D6           L99:
 02D6 00D0              rcall pop_gset1
 02D8                   .dbline 0 ; func end
 02D8 0895              ret
 02DA                   .dbsym r i 20 c
 02DA                   .dbsym r dat 16 c
 02DA                   .dbend
                        .area vector(rom, abs)
                        .org 18
 0012 6DC1              rjmp _time0_ovf_isr
                        .area text(rom, con, rel)
 02DA                   .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
 02DA                   .dbfunc e time0_ovf_isr _time0_ovf_isr fV
                        .even
 02DA           _time0_ovf_isr::
 02DA 00D0              rcall push_lset
 02DC                   .dbline -1
 02DC                   .dbline 415
 02DC           ; }
 02DC           ; //定时器1中断,1ms中断一次
 02DC           ; #pragma interrupt_handler time0_ovf_isr:10
 02DC           ; void time0_ovf_isr(void)
 02DC           ; {
 02DC                   .dbline 416
 02DC           ;  TCNT0=0xF8; //重新装置
 02DC 88EF              ldi R24,248
 02DE 82BF              out 0x32,R24
 02E0                   .dbline 417
 02E0           ;  count++;
 02E0 80910500          lds R24,_count
 02E4 90910600          lds R25,_count+1
 02E8 0196              adiw R24,1
 02EA 90930600          sts _count+1,R25
 02EE 80930500          sts _count,R24
 02F2                   .dbline 418
 02F2           ;  if(count>=100)  //100ms
 02F2 8436              cpi R24,100
 02F4 E0E0              ldi R30,0
 02F6 9E07              cpc R25,R30
 02F8 30F0              brlo L107
 02FA                   .dbline 419
 02FA           ;     count=0;
 02FA 2224              clr R2
 02FC 3324              clr R3
 02FE 30920600          sts _count+1,R3
 0302 20920500          sts _count,R2
 0306           L107:
 0306                   .dbline 420
 0306           ;    if(flag==0)
 0306 20900000          lds R2,_flag
 030A 2220              tst R2
 030C 91F4              brne L109
 030E                   .dbline 421
 030E           ;      {     flag=1;
 030E                   .dbline 421
 030E 81E0              ldi R24,1
 0310 80930000          sts _flag,R24
 0314                   .dbline 423
 0314           ;               //个位显示
 0314           ;              PORTC&=(~0x18);
 0314 85B3              in R24,0x15
 0316 877E              andi R24,231
 0318 85BB              out 0x15,R24
 031A                   .dbline 424
 031A           ;                  HC595_SENDDAT(table[ge]|0x80); //加小数点
 031A 80E0              ldi R24,<_table
 031C 90E0              ldi R25,>_table
 031E E0910200          lds R30,_ge
 0322 FF27              clr R31
 0324 E80F              add R30,R24
 0326 F91F              adc R31,R25
 0328 0081              ldd R16,z+0
 032A 0068              ori R16,128
 032C C1DF              rcall _HC595_SENDDAT
 032E                   .dbline 425
 032E           ;                  PORTC|=0x10;
 032E AC9A              sbi 0x15,4
 0330                   .dbline 426
 0330           ;                  }
 0330 10C0              rjmp L110
 0332           L109:
 0332                   .dbline 428
 0332                   .dbline 428
 0332 2224              clr R2
 0334 20920000          sts _flag,R2
 0338                   .dbline 430
 0338 85B3              in R24,0x15
 033A 877E              andi R24,231
 033C 85BB              out 0x15,R24
 033E                   .dbline 431
 033E 80E0              ldi R24,<_table
 0340 90E0              ldi R25,>_table
 0342 E0910300          lds R30,_shi
 0346 FF27              clr R31
 0348 E80F              add R30,R24
 034A F91F              adc R31,R25
 034C 0081              ldd R16,z+0
 034E B0DF              rcall _HC595_SENDDAT
 0350                   .dbline 432
 0350 AB9A              sbi 0x15,3
 0352                   .dbline 433
 0352           L110:
 0352                   .dbline -2
 0352           L106:
 0352 00D0              rcall pop_lset
 0354                   .dbline 0 ; func end
 0354 1895              reti
 0356                   .dbend
 0356                   .dbfunc e main _main fV
                        .area func_lit(rom, con, rel)
 0000           L156:
 0000 8F02              .word `L145
 0002 8F02              .word `L145
 0004 9302              .word `L146
 0006 9302              .word `L146
 0008 9702              .word `L147
 000A 9B02              .word `L148
 000C 9B02              .word `L148
 000E 9F02              .word `L149
 0010 A302              .word `L150
 0012 A302              .word `L150
 0014 A702              .word `L151
 0016 A702              .word `L151
 0018 AB02              .word `L152
 001A AF02              .word `L153
 001C AF02              .word `L153
 001E B302              .word `L154
 0020 B702              .word `L155
                        .area text(rom, con, rel)
 0356                   .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
 0356           ;              m -> R12,R13
 0356           ;              a -> R10
 0356           ;           temh -> R20
 0356           ;           teml -> R22
 0356           ;              i -> R12
 0356           ;      temporary -> y+0
 0356           ;              j -> R14
                        .even
 0356           _main::
 0356 2997              sbiw R28,9
 0358                   .dbline -1
 0358                   .dbline 440
 0358           ;       else
 0358           ;       {     flag=0;                
 0358           ;                  //十位显示
 0358           ;                  PORTC&=(~0x18);
 0358           ;                  HC595_SENDDAT(table[shi]); 
 0358           ;                  PORTC|=0x08;
 0358           ;                  }
 0358           ;                  
 0358           ; }
 0358           ; 
 0358           ; /*************************** 主机先发送,等待接收***************************/
 0358           ; /* 说明:外部中断0不使能,如果允许,显示保持不住。*/
 0358           ; void main( void )
 0358           ; {     unsigned char   i,j;
 0358                   .dbline 442
 0358           ;       unsigned char teml,temh;
 0358           ;     unsigned char a=0; 
 0358 AA24              clr R10
 035A                   .dbline 446
 035A           ;     unsigned int m;
 035A           ;       unsigned char   temporary[9];
 035A           ;        //M8 端口初始化
 035A           ;        PORTB=0x07;  //MCP2515 disable(CS,PB2),PB1,PB0上、下行灯灭
 035A 87E0              ldi R24,7
 035C 88BB              out 0x18,R24
 035E                   .dbline 447
 035E           ;      DDRB|=0x07; 
 035E 87B3              in R24,0x17
 0360 8760              ori R24,7
 0362 87BB              out 0x17,R24
 0364                   .dbline 448
 0364           ;        DDRD=0xC0;  //1100 0000 PD7、PD6输出保持,PD5、PD4按键输入     
 0364 80EC              ldi R24,192
 0366 81BB              out 0x11,R24
 0368                   .dbline 449
 0368           ;        PORTC=0x02;  //CS disable
 0368 82E0              ldi R24,2
 036A 85BB              out 0x15,R24
 036C                   .dbline 450
 036C           ;        DDRC|=0x1F;    //PC3为595的位选COM2(十位),PC4为595的位选COM1(个位)+595(PC0、PC1、PC2)
 036C 84B3              in R24,0x14
 036E 8F61              ori R24,31
 0370 84BB              out 0x14,R24
 0372                   .dbline 456
 0372           ;        /*use int0*/
 0372           ;       // GICR|=0x40;   //int0 enable
 0372           ;       //MCUCR|=0x02;  //下降沿触发中断0
 0372           ;       //uart_init();  //串口初始化
 0372           ;       //初始化SPI
 0372           ;        init_SPI();
 0372 46DE              rcall _init_SPI
 0374                   .dbline 458
 0374           ;       //reset mcp2515
 0374           ;        reset_MCP();  
 0374 4BDE              rcall _reset_MCP
 0376                   .dbline 460
 0376           ;       //初始化 CAN
 0376           ;      init_can();
 0376 A2DE              rcall _init_can
 0378                   .dbline 461
 0378           ;        minus_flag=0; //初始化负温度标志
 0378 2224              clr R2
 037A 20920000          sts _minus_flag,R2
 037E                   .dbline 462
 037E           ;        CLI(); //关中断
 037E F894              cli
 0380           L112:
 0380                   .dbline 464
 0380           L113:
 0380                   .dbline 464
 0380           ;       //矫正第一次数据,不矫正第一次显示85
 0380           ;           while(!ds1820_ack());
 0380 1EDF              rcall _ds1820_ack
 0382 0023              tst R16
 0384 E9F3              breq L112
 0386                   .dbline 465
 0386           ;           write_byte(0xCC);                                           //      Skip ROM
 0386 0CEC              ldi R16,204
 0388 51DF              rcall _write_byte
 038A                   .dbline 466
 038A           ;           write_byte(0x44);                                           //      Start Conversion
 038A 04E4              ldi R16,68
 038C 4FDF              rcall _write_byte
 038E                   .dbline 467
 038E           ;           wait(750);
 038E 0EEE              ldi R16,750
 0390 12E0              ldi R17,2
 0392 6BDF              rcall _wait
 0394           L115:
 0394                   .dbline 468
 0394           L116:
 0394                   .dbline 468
 0394           ;           while(!ds1820_ack());
 0394 14DF              rcall _ds1820_ack
 0396 0023              tst R16
 0398 E9F3              breq L115
 039A                   .dbline 469
 039A           ;               write_byte(0xCC);                                               //      Skip ROM
 039A 0CEC              ldi R16,204
 039C 47DF              rcall _write_byte
 039E                   .dbline 470
 039E           ;           write_byte(0xBE);                                           //      Read Scratch Pad
 039E 0EEB              ldi R16,190
 03A0 45DF              rcall _write_byte
 03A2                   .dbline 471
 03A2           ;               teml = read_byte();     
 03A2 24DF              rcall _read_byte
 03A4 602F              mov R22,R16
 03A6                   .dbline 472
 03A6           ;               temh = read_byte();     
 03A6 22DF              rcall _read_byte
 03A8 402F              mov R20,R16
 03AA                   .dbline 473
 03AA           ;               m=temh*256+teml;
 03AA 242F              mov R18,R20
 03AC 3327              clr R19
 03AE 00E0              ldi R16,256
 03B0 11E0              ldi R17,1
 03B2 00D0              rcall empy16s
 03B4 6801              movw R12,R16
 03B6 262E              mov R2,R22
 03B8 3324              clr R3
 03BA C20C              add R12,R2
 03BC D31C              adc R13,R3
 03BE           

⌨️ 快捷键说明

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