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

📄 ds18b20_main.lis

📁 16个单片机c语言实验程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00E0           ;  if (init_f & 0x80)//恢复中断状态
 00E0 20900000          lds R2,_init_f
 00E4 27FE              sbrs R2,7
 00E6 01C0              rjmp L29
 00E8           X8:
 00E8                   .dbline 99
 00E8           ;   {   
 00E8                   .dbline 100
 00E8           ;   SEI();
 00E8 7894              sei
 00EA                   .dbline 101
 00EA           ;   }
 00EA           L29:
 00EA                   .dbline -2
 00EA           L22:
 00EA                   .dbline 0 ; func end
 00EA 4991              ld R20,y+
 00EC A990              ld R10,y+
 00EE 0895              ret
 00F0                   .dbsym r i 20 c
 00F0                   .dbsym r value 10 c
 00F0                   .dbend
 00F0                   .dbfunc e ds1820_start _ds1820_start fV
                        .even
 00F0           _ds1820_start::
 00F0                   .dbline -1
 00F0                   .dbline 106
 00F0           ; }
 00F0           ; 
 00F0           ; //启动ds1820转换
 00F0           ; void ds1820_start(void) 
 00F0           ; {
 00F0                   .dbline 107
 00F0           ;  ds1820_reset();
 00F0 9DDF              xcall _ds1820_reset
 00F2                   .dbline 108
 00F2           ;  ds1820_write_byte(0xCC); //勿略ROM
 00F2 0CEC              ldi R16,204
 00F4 DCDF              xcall _ds1820_write_byte
 00F6                   .dbline 109
 00F6           ;  ds1820_write_byte(0x44); //启动转换
 00F6 04E4              ldi R16,68
 00F8                   .dbline -2
 00F8           L31:
 00F8                   .dbline 0 ; func end
 00F8 DACF              xjmp _ds1820_write_byte
 00FA                   .dbend
 00FA                   .dbfunc e ds1820_read_temp _ds1820_read_temp fi
 00FA           ;            buf -> y+0
 00FA           ;              i -> R20,R21
                        .even
 00FA           _ds1820_read_temp::
 00FA 4A93              st -y,R20
 00FC 5A93              st -y,R21
 00FE 2997              sbiw R28,9
 0100                   .dbline -1
 0100                   .dbline 114
 0100           ; }
 0100           ; 
 0100           ; //读温度
 0100           ; unsigned int ds1820_read_temp(void)
 0100           ;  {
 0100                   .dbline 117
 0100           ;  unsigned int i;
 0100           ;  unsigned char buf[9];
 0100           ;  ds1820_reset();
 0100 95DF              xcall _ds1820_reset
 0102                   .dbline 118
 0102           ;  ds1820_write_byte(0xCC); //勿略ROM
 0102 0CEC              ldi R16,204
 0104 D4DF              xcall _ds1820_write_byte
 0106                   .dbline 119
 0106           ;  ds1820_write_byte(0xBE); //读温度
 0106 0EEB              ldi R16,190
 0108 D2DF              xcall _ds1820_write_byte
 010A                   .dbline 120
 010A           ;  for (i = 0; i < 9; i++) {
 010A 4427              clr R20
 010C 5527              clr R21
 010E 08C0              xjmp L36
 0110           L33:
 0110                   .dbline 120
 0110                   .dbline 121
 0110           ;   buf[i] = ds1820_read_byte();
 0110 A8DF              xcall _ds1820_read_byte
 0112 CE01              movw R24,R28
 0114 FA01              movw R30,R20
 0116 E80F              add R30,R24
 0118 F91F              adc R31,R25
 011A 0083              std z+0,R16
 011C                   .dbline 122
 011C           ;   }
 011C           L34:
 011C                   .dbline 120
 011C 4F5F              subi R20,255  ; offset = 1
 011E 5F4F              sbci R21,255
 0120           L36:
 0120                   .dbline 120
 0120 4930              cpi R20,9
 0122 E0E0              ldi R30,0
 0124 5E07              cpc R21,R30
 0126 A0F3              brlo L33
 0128           X9:
 0128                   .dbline 123
 0128           ;  i = buf[1];
 0128 4981              ldd R20,y+1
 012A 5527              clr R21
 012C                   .dbline 124
 012C           ;  i <<= 8;
 012C 542F              mov R21,R20
 012E 4427              clr R20
 0130                   .dbline 125
 0130           ;  i |= buf[0];
 0130 2880              ldd R2,y+0
 0132 3324              clr R3
 0134 4229              or R20,R2
 0136 5329              or R21,R3
 0138                   .dbline 126
 0138           ;  return i;
 0138 8A01              movw R16,R20
 013A                   .dbline -2
 013A           L32:
 013A                   .dbline 0 ; func end
 013A 2996              adiw R28,9
 013C 5991              ld R21,y+
 013E 4991              ld R20,y+
 0140 0895              ret
 0142                   .dbsym l buf 0 A[9:9]c
 0142                   .dbsym r i 20 i
 0142                   .dbend
 0142                   .dbfile E:\单片机\16实验程序\DS18B20\DS18B20\1602.h
 0142                   .dbfunc e s_ms _s_ms fV
 0142           ;             ms -> R16,R17
                        .even
 0142           _s_ms::
 0142                   .dbline -1
 0142                   .dbline 9
 0142           ; #define uchar unsigned char 
 0142           ; #define uint unsigned int 
 0142           ; 
 0142           ; #define RS 5
 0142           ; #define RW 6
 0142           ; #define EN 7
 0142           ; 
 0142           ; void s_ms(uint ms)
 0142           ; {
 0142                   .dbline 10
 0142           ;       for(;ms>1;ms--);
 0142 02C0              xjmp L42
 0144           L39:
 0144                   .dbline 10
 0144           L40:
 0144                   .dbline 10
 0144 0150              subi R16,1
 0146 1040              sbci R17,0
 0148           L42:
 0148                   .dbline 10
 0148 81E0              ldi R24,1
 014A 90E0              ldi R25,0
 014C 8017              cp R24,R16
 014E 9107              cpc R25,R17
 0150 C8F3              brlo L39
 0152           X10:
 0152                   .dbline -2
 0152           L38:
 0152                   .dbline 0 ; func end
 0152 0895              ret
 0154                   .dbsym r ms 16 i
 0154                   .dbend
 0154                   .dbfunc e busy _busy fV
 0154           ;           temp -> R20
                        .even
 0154           _busy::
 0154 4A93              st -y,R20
 0156                   .dbline -1
 0156                   .dbline 15
 0156           ; }     
 0156           ; 
 0156           ; //查忙
 0156           ; void busy(void)
 0156           ; {
 0156                   .dbline 17
 0156           ;     uchar temp;
 0156           ;       s_ms(500);
 0156 04EF              ldi R16,500
 0158 11E0              ldi R17,1
 015A F3DF              xcall _s_ms
 015C                   .dbline 18
 015C           ;       PORTA&=~(1<<RS);    //RS=0
 015C DD98              cbi 0x1b,5
 015E                   .dbline 19
 015E           ;       s_ms(500);
 015E 04EF              ldi R16,500
 0160 11E0              ldi R17,1
 0162 EFDF              xcall _s_ms
 0164                   .dbline 20
 0164           ;       PORTA|=(1<<RW);     //RW=1
 0164 DE9A              sbi 0x1b,6
 0166                   .dbline 21
 0166           ;       s_ms(500);
 0166 04EF              ldi R16,500
 0168 11E0              ldi R17,1
 016A EBDF              xcall _s_ms
 016C 1AC0              xjmp L45
 016E           L44:
 016E                   .dbline 23
 016E           ;       while(temp)
 016E           ;       {
 016E                   .dbline 24
 016E           ;               PORTA|=(1<<EN); //EN=1
 016E DF9A              sbi 0x1b,7
 0170                   .dbline 25
 0170           ;               s_ms(500);
 0170 04EF              ldi R16,500
 0172 11E0              ldi R17,1
 0174 E6DF              xcall _s_ms
 0176                   .dbline 26
 0176           ;               DDRD=0x00;      //A口变输入
 0176 2224              clr R2
 0178 21BA              out 0x11,R2
 017A                   .dbline 27
 017A           ;               PORTD=0xff;     //上拉使能
 017A 8FEF              ldi R24,255
 017C 82BB              out 0x12,R24
 017E                   .dbline 28
 017E           ;               s_ms(500);
 017E 04EF              ldi R16,500
 0180 11E0              ldi R17,1
 0182 DFDF              xcall _s_ms
 0184                   .dbline 29
 0184           ;               temp = PIND&0x80;    //读取A口
 0184 40B3              in R20,0x10
 0186 4078              andi R20,128
 0188                   .dbline 30
 0188           ;               s_ms(500);      
 0188 04EF              ldi R16,500
 018A 11E0              ldi R17,1
 018C DADF              xcall _s_ms
 018E                   .dbline 31
 018E           ;               DDRD=0xff;      
 018E 8FEF              ldi R24,255
 0190 81BB              out 0x11,R24
 0192                   .dbline 32
 0192           ;               PORTD=0xff;        //A口变输出
 0192 82BB              out 0x12,R24
 0194                   .dbline 33
 0194           ;               s_ms(500);
 0194 04EF              ldi R16,500
 0196 11E0              ldi R17,1
 0198 D4DF              xcall _s_ms
 019A                   .dbline 34
 019A           ;               PORTA&=~(1<<EN);   //EN=0
 019A DF98              cbi 0x1b,7
 019C                   .dbline 35
 019C           ;               s_ms(500);
 019C 04EF              ldi R16,500
 019E 11E0              ldi R17,1
 01A0 D0DF              xcall _s_ms
 01A2                   .dbline 36
 01A2           ;       }
 01A2           L45:
 01A2                   .dbline 22
 01A2 4423              tst R20
 01A4 21F7              brne L44
 01A6           X11:
 01A6                   .dbline -2
 01A6           L43:
 01A6                   .dbline 0 ; func end
 01A6 4991              ld R20,y+
 01A8 0895              ret
 01AA                   .dbsym r temp 20 c
 01AA                   .dbend
 01AA                   .dbfunc e writecom _writecom fV
 01AA           ;            com -> R10
                        .even
 01AA           _writecom::
 01AA AA92              st -y,R10
 01AC A02E              mov R10,R16
 01AE                   .dbline -1
 01AE                   .dbline 41
 01AE           ; }
 01AE           ; 
 01AE           ; //写指令
 01AE           ; void writecom(uchar   com)
 01AE           ; {
 01AE                   .dbline 42
 01AE           ;       busy();
 01AE D2DF              xcall _busy
 01B0                   .dbline 43
 01B0           ;       s_ms(500);
 01B0 04EF              ldi R16,500
 01B2 11E0              ldi R17,1
 01B4 C6DF              xcall _s_ms
 01B6                   .dbline 44
 01B6           ;       PORTA&=~(1<<RS);   //RS=0
 01B6 DD98              cbi 0x1b,5
 01B8                   .dbline 45
 01B8           ;       s_ms(500);
 01B8 04EF              ldi R16,500
 01BA 11E0              ldi R17,1
 01BC C2DF              xcall _s_ms
 01BE                   .dbline 46
 01BE           ;       PORTA&=~(1<<RW);   //RW=0
 01BE DE98              cbi 0x1b,6
 01C0                   .dbline 47
 01C0           ;       s_ms(500);
 01C0 04EF              ldi R16,500
 01C2 11E0              ldi R17,1
 01C4 BEDF              xcall _s_ms
 01C6                   .dbline 48
 01C6           ;       PORTA|=(1<<EN);    //EN=1
 01C6 DF9A              sbi 0x1b,7
 01C8                   .dbline 49
 01C8           ;       s_ms(500);
 01C8 04EF              ldi R16,500
 01CA 11E0              ldi R17,1
 01CC BADF              xcall _s_ms
 01CE                   .dbline 50
 01CE           ;       PORTD = com;       //输出指令
 01CE A2BA              out 0x12,R10
 01D0                   .dbline 51
 01D0           ;       s_ms(500);
 01D0 04EF              ldi R16,500
 01D2 11E0              ldi R17,1
 01D4 B6DF              xcall _s_ms
 01D6                   .dbline 52
 01D6           ;       PORTA&=~(1<<EN);   //EN=0
 01D6 DF98              cbi 0x1b,7
 01D8                   .dbline 53
 01D8           ;       s_ms(500);
 01D8 04EF              ldi R16,500
 01DA 11E0              ldi R17,1
 01DC B2DF              xcall _s_ms
 01DE                   .dbline -2
 01DE           L47:
 01DE                   .dbline 0 ; func end
 01DE A990              ld R10,y+
 01E0 0895              ret
 01E2                   .dbsym r com 10 c
 01E2                   .dbend
 01E2                   .dbfunc e LcdInit _LcdInit fV
                        .even
 01E2           _LcdInit::
 01E2                   .dbline -1

⌨️ 快捷键说明

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