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

📄 1.lis

📁 测试18b20的程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01D6           ;           temp -> R20
 01D6           ;              k -> R22
 01D6           ;              n -> R10
                        .even
 01D6           _read_1820::
 01D6 0E940000          xcall push_gset3
 01DA                   .dbline -1
 01DA                   .dbline 200
 01DA           ; } 
 01DA           ; 
 01DA           ; //////////////////////////////////////////////
 01DA           ; uchar read_1820() 
 01DA           ; {     
 01DA                   .dbline 202
 01DA           ;     uchar temp,k,n; 
 01DA           ;            temp=0; 
 01DA 4427              clr R20
 01DC                   .dbline 203
 01DC           ;     for(n=0;n<8;n++) 
 01DC AA24              clr R10
 01DE 18C0              xjmp L48
 01E0           L45:
 01E0                   .dbline 204
 01E0           ;        { 
 01E0                   .dbline 205
 01E0           ;       PORTD&=~(1<<6); 
 01E0 9698              cbi 0x12,6
 01E2                   .dbline 207
 01E2           ;       //delay(2);       
 01E2           ;       PORTD|=(1<<6); 
 01E2 969A              sbi 0x12,6
 01E4                   .dbline 209
 01E4           ;       //delay(3);     
 01E4           ;       DDRD&=~(1<<6); 
 01E4 8E98              cbi 0x11,6
 01E6                   .dbline 210
 01E6           ;       k=(PIND&(1<<6));    //读数据,从低位开始 
 01E6 60B3              in R22,0x10
 01E8 6074              andi R22,64
 01EA                   .dbline 211
 01EA           ;       if(k) 
 01EA 31F0              breq L49
 01EC                   .dbline 212
 01EC           ;       temp|=(1<<n); 
 01EC 01E0              ldi R16,1
 01EE 1A2D              mov R17,R10
 01F0 0E940000          xcall lsl8
 01F4 402B              or R20,R16
 01F6 07C0              xjmp L50
 01F8           L49:
 01F8                   .dbline 214
 01F8           ;       else 
 01F8           ;       temp&=~(1<<n); 
 01F8 01E0              ldi R16,1
 01FA 1A2D              mov R17,R10
 01FC 0E940000          xcall lsl8
 0200 202E              mov R2,R16
 0202 2094              com R2
 0204 4221              and R20,R2
 0206           L50:
 0206                   .dbline 215
 0206 02E3              ldi R16,50
 0208 10E0              ldi R17,0
 020A B1DF              xcall _delay
 020C                   .dbline 216
 020C 8E9A              sbi 0x11,6
 020E                   .dbline 217
 020E           L46:
 020E                   .dbline 203
 020E A394              inc R10
 0210           L48:
 0210                   .dbline 203
 0210 8A2D              mov R24,R10
 0212 8830              cpi R24,8
 0214 28F3              brlo L45
 0216                   .dbline 218
 0216           ;       delay(50); //60~120us     
 0216           ;       DDRD|=(1<<6); 
 0216           ;         } 
 0216           ;    return (temp); 
 0216 042F              mov R16,R20
 0218                   .dbline -2
 0218           L44:
 0218 0E940000          xcall pop_gset3
 021C                   .dbline 0 ; func end
 021C 0895              ret
 021E                   .dbsym r temp 20 c
 021E                   .dbsym r k 22 c
 021E                   .dbsym r n 10 c
 021E                   .dbend
 021E                   .dbfunc e send_byte _send_byte fV
 021E           ;              i -> R20
 021E           ;              x -> R22
                        .even
 021E           _send_byte::
 021E 0E940000          xcall push_gset2
 0222 602F              mov R22,R16
 0224                   .dbline -1
 0224                   .dbline 222
 0224           ; }  
 0224           ; ////////////////////////////////////////////////
 0224           ; void send_byte(uchar x)    //以下为显示程序 
 0224           ; { 
 0224                   .dbline 224
 0224           ;    uchar i; 
 0224           ;     for(i=0;i<8;i++) 
 0224 4427              clr R20
 0226 14C0              xjmp L55
 0228           L52:
 0228                   .dbline 225
 0228           ;     { 
 0228                   .dbline 226
 0228           ;        PORTC&=~(1<<5);   // PC5为底  为164提供时钟信号 
 0228 AD98              cbi 0x15,5
 022A                   .dbline 227
 022A           ;       if((x&(1<<(7-i)))||((dp==1)&&(i==0))) //判断每位数据的电平,及小数点判断 
 022A 17E0              ldi R17,7
 022C 141B              sub R17,R20
 022E 01E0              ldi R16,1
 0230 0E940000          xcall lsl8
 0234 262E              mov R2,R22
 0236 2022              and R2,R16
 0238 31F4              brne L58
 023A 80910400          lds R24,_dp
 023E 8130              cpi R24,1
 0240 21F4              brne L56
 0242 4423              tst R20
 0244 11F4              brne L56
 0246           L58:
 0246                   .dbline 228
 0246           ;       PORTC|=(1<<4);                           //若为高着PC4输出高电平    
 0246 AC9A              sbi 0x15,4
 0248 01C0              xjmp L57
 024A           L56:
 024A                   .dbline 230
 024A           ;       else 
 024A           ;       PORTC&=~(1<<4);                           //若为低着输出低电平 
 024A AC98              cbi 0x15,4
 024C           L57:
 024C                   .dbline 231
 024C AD9A              sbi 0x15,5
 024E                   .dbline 232
 024E           L53:
 024E                   .dbline 224
 024E 4395              inc R20
 0250           L55:
 0250                   .dbline 224
 0250 4830              cpi R20,8
 0252 50F3              brlo L52
 0254                   .dbline -2
 0254           L51:
 0254 0E940000          xcall pop_gset2
 0258                   .dbline 0 ; func end
 0258 0895              ret
 025A                   .dbsym r i 20 c
 025A                   .dbsym r x 22 c
 025A                   .dbend
 025A                   .dbfunc e main _main fV
 025A           ;           teml -> R20
 025A           ;           temh -> R22
 025A           ;              i -> R10
                        .even
 025A           _main::
 025A 2297              sbiw R28,2
 025C                   .dbline -1
 025C                   .dbline 237
 025C           ;       PORTC|=(1<<5);   //PC5 提供始终信号 
 025C           ;    } 
 025C           ;    //PORTC|=((1<<0)|(1<<1)|(1<<2)); 
 025C           ; } 
 025C           ; ////////////////////////////////////////////////
 025C           ; void main(void) //主函数 
 025C           ; { 
 025C                   .dbline 239
 025C           ;  // disp_led(0,0); 
 025C           ;   delay(2000); 
 025C 00ED              ldi R16,2000
 025E 17E0              ldi R17,7
 0260 86DF              xcall _delay
 0262                   .dbline 240
 0262           ;   OSCCAL=0X9d;//系统时钟校准,不同的芯片和不同的频率, 
 0262 8DE9              ldi R24,157
 0264 81BF              out 0x31,R24
 0266                   .dbline 241
 0266           ;   DDRC=0xff; 
 0266 8FEF              ldi R24,255
 0268 84BB              out 0x14,R24
 026A                   .dbline 242
 026A           ;   DDRD=0XFF;
 026A 81BB              out 0x11,R24
 026C                   .dbline 243
 026C           ;   DDRA=0XFF;
 026C 8ABB              out 0x1a,R24
 026E                   .dbline 244
 026E           ;  PORTA=0XF3; 
 026E 83EF              ldi R24,243
 0270 8BBB              out 0x1b,R24
 0272                   .dbline 245
 0272           ;   PORTD=0XFF; 
 0272 8FEF              ldi R24,255
 0274 82BB              out 0x12,R24
 0276                   .dbline 246
 0276           ;   WDR();       //看门狗计数清零 
 0276 A895              wdr
 0278                   .dbline 247
 0278           ;   LCD_init();
 0278 EDDE              xcall _LCD_init
 027A                   .dbline 248
 027A           ;   WDTCR=0x0F; 
 027A 8FE0              ldi R24,15
 027C 81BD              out 0x21,R24
 027E                   .dbline 249
 027E           ;   PORTC=0xff; 
 027E 8FEF              ldi R24,255
 0280 85BB              out 0x15,R24
 0282 49C0              xjmp L61
 0284           L60:
 0284                   .dbline 251
 0284           ;   while(1) 
 0284           ;    { 
 0284                   .dbline 253
 0284           ;       uchar i,temh,teml; 
 0284           ;       init_1820();        //复位18b20 
 0284 7BDF              xcall _init_1820
 0286                   .dbline 254
 0286           ;       write_1820(0xcc);   //skip rom 
 0286 0CEC              ldi R16,204
 0288 8BDF              xcall _write_1820
 028A                   .dbline 255
 028A           ;       write_1820(0x44); // 发出转换命令 convert T
 028A 04E4              ldi R16,68
 028C 89DF              xcall _write_1820
 028E                   .dbline 256
 028E           ;       delay(400); 
 028E 00E9              ldi R16,400
 0290 11E0              ldi R17,1
 0292 6DDF              xcall _delay
 0294                   .dbline 257
 0294           ;       init_1820(); 
 0294 73DF              xcall _init_1820
 0296                   .dbline 258
 0296           ;       WDR(); 
 0296 A895              wdr
 0298                   .dbline 259
 0298           ;       write_1820(0xcc);  //发出读命令 
 0298 0CEC              ldi R16,204
 029A 82DF              xcall _write_1820
 029C                   .dbline 260
 029C           ;       write_1820(0xbe); 
 029C 0EEB              ldi R16,190
 029E 80DF              xcall _write_1820
 02A0                   .dbline 261
 02A0           ;       teml=read_1820();  //读数据 
 02A0 9ADF              xcall _read_1820
 02A2 402F              mov R20,R16
 02A4                   .dbline 262
 02A4           ;       temh=read_1820(); 
 02A4 98DF              xcall _read_1820
 02A6 602F              mov R22,R16
 02A8                   .dbline 273
 02A8           ;        
 02A8           ;       //for(i=0;i<7;i++)    //测试用 
 02A8           ;       //{ 
 02A8           ;       //send_byte(0x40); 
 02A8           ;       //send_byte(disp_table[0&0x0f]); 
 02A8           ;                   //} 
 02A8           ;       //send_byte(disp_table[temh>>4]); 
 02A8           ;       //send_byte(disp_table[temh&0x0f]); 
 02A8           ;                   //send_byte(disp_table[teml>>4]); 
 02A8           ;       //send_byte(disp_table[teml&0x0f]); 
 02A8           ;       count=(temh*256+teml)*6.25;  //计算具体温度 
 02A8 00E0              ldi R16,<L63
 02AA 10E0              ldi R17,>L63
 02AC 0E940000          xcall lpm32
 02B0 3A93              st -y,R19
 02B2 2A93              st -y,R18
 02B4 1A93              st -y,R17
 02B6 0A93              st -y,R16
 02B8 262F              mov R18,R22
 02BA 3327              clr R19
 02BC 00E0              ldi R16,256
 02BE 11E0              ldi R17,1
 02C0 0E940000          xcall empy16s
 02C4 1801              movw R2,R16
 02C6 442E              mov R4,R20
 02C8 5524              clr R5
 02CA 240C              add R2,R4
 02CC 351C              adc R3,R5
 02CE 8101              movw R16,R2
 02D0 0E940000          xcall int2fp
 02D4 3A93              st -y,R19
 02D6 2A93              st -y,R18
 02D8 1A93              st -y,R17
 02DA 0A93              st -y,R16
 02DC 0E940000          xcall empy32f
 02E0 0E940000          xcall fp2long
 02E4 10930100          sts _count+1,R17
 02E8 00930000          sts _count,R16
 02EC 30930300          sts _count+2+1,R19
 02F0 20930200          sts _count+2,R18
 02F4                   .dbline 274
 02F4           ;       WDR(); 
 02F4 A895              wdr
 02F6                   .dbline 276
 02F6           ;                   //disp_led(0,1);     //显示温度 
 02F6           ;       for(i=0;i<100;i++)   //每次转换需要延时200ms以上 
 02F6 AA24              clr R10
 02F8 04C0              xjmp L67
 02FA           L64:
 02FA                   .dbline 277
 02FA 08EE              ldi R16,1000
 02FC 13E0              ldi R17,3
 02FE 37DF              xcall _delay
 0300           L65:
 0300                   .dbline 276
 0300 A394              inc R10
 0302           L67:
 0302                   .dbline 276
 0302 8A2D              mov R24,R10
 0304 8436              cpi R24,100
 0306 C8F3              brlo L64
 0308                   .dbline 278
 0308 80E0              ldi R24,<L68
 030A 90E0              ldi R25,>L68
 030C 9983              std y+1,R25
 030E 8883              std y+0,R24
 0310 2227              clr R18
 0312 0027              clr R16
 0314 0ADF              xcall _LCD_write_string
 0316                   .dbline 279
 0316           L61:
 0316                   .dbline 250
 0316 B6CF              xjmp L60
 0318           X1:
 0318                   .dbline -2
 0318           L59:
 0318 2296              adiw R28,2
 031A                   .dbline 0 ; func end
 031A 0895              ret
 031C                   .dbsym r teml 20 c
 031C                   .dbsym r temh 22 c
 031C                   .dbsym r i 10 c
 031C                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\18b20\1.c
 0000           _count::
 0000                   .blkb 4
 0004                   .dbsym e count _count L
 0004           _dp::
 0004                   .blkb 1
 0005                   .dbsym e dp _dp c
                        .area data(ram, con, rel)
 0010                   .dbfile C:\DOCUME~1\Administrator\桌面\18b20\1.c
 0010           L68:
 0010                   .blkb 6
                        .area idata
 0010 636F756E7400      .byte 'c,'o,'u,'n,'t,0
                        .area data(ram, con, rel)
 0016                   .dbfile C:\DOCUME~1\Administrator\桌面\18b20\1.c
                        .area lit(rom, con, rel)
 0000           L63:
 0000 0000C840          .word 0x0,0x40c8

⌨️ 快捷键说明

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