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

📄 ds1302_mega16.lis

📁 这是一个用温度计和时钟程序,芯片是ATmega16,电路稳定,绝对好用而且易懂
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 031C 5527              clr R21
 031E                   .dbline 71
 031E           ;               Th=(uint8_t)temp_negative;      
 031E C42E              mov R12,R20
 0320                   .dbline 72
 0320           ;               Temp_display(Tl,Th);
 0320 2C2D              mov R18,R12
 0322 0A2D              mov R16,R10
 0324 1DDF              xcall _Temp_display
 0326                   .dbline 73
 0326           ;       }
 0326           L72:
 0326                   .dbline -2
 0326           L70:
 0326                   .dbline 0 ; func end
 0326 0C940000          xjmp pop_xgset30FC
 032A                   .dbsym r tl_l 14 i
 032A                   .dbsym r th_h 20 i
 032A                   .dbsym r temp_negative 20 i
 032A                   .dbsym r Tl 10 c
 032A                   .dbsym r Th 12 c
 032A                   .dbend
 032A                   .dbfunc e Delay_us _Delay_us fV
 032A           ;             us -> R16,R17
                        .even
 032A           _Delay_us::
 032A                   .dbline -1
 032A                   .dbline 83
 032A           ; }
 032A           ; /*************************************************
 032A           ; 函 数 名:Delay_us
 032A           ; 功    能:软件延时1.1us
 032A           ; 入口参数:us 延时时间
 032A           ; 出口参数:无
 032A           ; 修改时间:2007.02.16
 032A           ; *************************************************/
 032A           ; void Delay_us(uint16_t us) 
 032A           ; {    
 032A 02C0              xjmp L75
 032C           L74:
 032C                   .dbline 85
 032C           ;      while(us>1)
 032C           ;        { 
 032C                   .dbline 86
 032C           ;        us--;
 032C 0150              subi R16,1
 032E 1040              sbci R17,0
 0330                   .dbline 87
 0330           ;        }  
 0330           L75:
 0330                   .dbline 84
 0330 81E0              ldi R24,1
 0332 90E0              ldi R25,0
 0334 8017              cp R24,R16
 0336 9107              cpc R25,R17
 0338 C8F3              brlo L74
 033A           X14:
 033A                   .dbline -2
 033A           L73:
 033A                   .dbline 0 ; func end
 033A 0895              ret
 033C                   .dbsym r us 16 i
 033C                   .dbend
 033C                   .dbfunc e Init_18b20 _Init_18b20 fc
 033C           ;          exist -> R20
                        .even
 033C           _Init_18b20::
 033C 4A93              st -y,R20
 033E                   .dbline -1
 033E                   .dbline 97
 033E           ; } 
 033E           ; /*************************************************
 033E           ; 函 数 名:Reset_18b20
 033E           ; 功    能:复位DS18B20
 033E           ; 入口参数:无
 033E           ; 出口参数:exist : exist=1,存在;exist=0,不存在
 033E           ; 修改日期:2007.02.16
 033E           ; *************************************************/
 033E           ; uint8_t Init_18b20(void)
 033E           ; {
 033E                   .dbline 98
 033E           ;       uint8_t exist=1;          
 033E 41E0              ldi R20,1
 0340                   .dbline 99
 0340           ;       Set_low();                        //设置成输出模式
 0340                   .dbline 99
 0340 8F9A              sbi 0x11,7
 0342                   .dbline 99
 0342 9798              cbi 0x12,7
 0344                   .dbline 99
 0344                   .dbline 100
 0344           ;       Delay_us(600);            //复位低电平480us~960us
 0344 08E5              ldi R16,600
 0346 12E0              ldi R17,2
 0348 F0DF              xcall _Delay_us
 034A                   .dbline 101
 034A           ;       Set_high();                       //拉高电平
 034A                   .dbline 101
 034A 8F9A              sbi 0x11,7
 034C                   .dbline 101
 034C 979A              sbi 0x12,7
 034E                   .dbline 101
 034E                   .dbline 102
 034E           ;       Read();                           //设置成输入模式
 034E                   .dbline 102
 034E 8F98              cbi 0x11,7
 0350                   .dbline 102
 0350                   .dbline 103
 0350           ;       Delay_us(100);            //延时100us
 0350 04E6              ldi R16,100
 0352 10E0              ldi R17,0
 0354 EADF              xcall _Delay_us
 0356                   .dbline 104
 0356           ;       exist=~(DS18B20_PIN&DS18B20_IO);          //读端口电平
 0356 40B3              in R20,0x10
 0358 4078              andi R20,128
 035A 4095              com R20
 035C                   .dbline 105
 035C           ;       Delay_us(480);            //延时480us
 035C 00EE              ldi R16,480
 035E 11E0              ldi R17,1
 0360 E4DF              xcall _Delay_us
 0362                   .dbline 106
 0362           ;       DDRA|=0X10;                       //设置成输出模式
 0362 D49A              sbi 0x1a,4
 0364                   .dbline 107
 0364           ;       return (exist);           //返回exist的值       
 0364 042F              mov R16,R20
 0366                   .dbline -2
 0366           L77:
 0366                   .dbline 0 ; func end
 0366 4991              ld R20,y+
 0368 0895              ret
 036A                   .dbsym r exist 20 c
 036A                   .dbend
 036A                   .dbfunc e Read_1_byte _Read_1_byte fc
 036A           ;         r_data -> R10
 036A           ;           temp -> R22
 036A           ;              i -> R20
                        .even
 036A           _Read_1_byte::
 036A 0E940000          xcall push_xgsetF00C
 036E                   .dbline -1
 036E                   .dbline 117
 036E           ; }
 036E           ; /*************************************************
 036E           ; 函 数 名:Read_1_byte
 036E           ; 功    能:从DS18B20读取一个字节的数据
 036E           ; 入口参数:无
 036E           ; 出口参数:r_data
 036E           ; 修改日期:2007.02.16
 036E           ; *************************************************/
 036E           ; uint8_t Read_1_byte(void)
 036E           ; {
 036E                   .dbline 118
 036E           ;       uint8_t i,r_data=0x00,temp;
 036E AA24              clr R10
 0370                   .dbline 119
 0370           ;       for(i=0;i<8;i++)
 0370 4427              clr R20
 0372 1FC0              xjmp L82
 0374           L79:
 0374                   .dbline 120
 0374           ;       {
 0374                   .dbline 121
 0374           ;               Set_low();
 0374                   .dbline 121
 0374 8F9A              sbi 0x11,7
 0376                   .dbline 121
 0376 9798              cbi 0x12,7
 0378                   .dbline 121
 0378                   .dbline 122
 0378           ;               Delay_us(3);
 0378 03E0              ldi R16,3
 037A 10E0              ldi R17,0
 037C D6DF              xcall _Delay_us
 037E                   .dbline 123
 037E           ;               Read();
 037E                   .dbline 123
 037E 8F98              cbi 0x11,7
 0380                   .dbline 123
 0380                   .dbline 124
 0380           ;               Delay_us(8);
 0380 08E0              ldi R16,8
 0382 10E0              ldi R17,0
 0384 D2DF              xcall _Delay_us
 0386                   .dbline 125
 0386           ;               temp=(DS18B20_PIN&DS18B20_IO);
 0386 60B3              in R22,0x10
 0388 6078              andi R22,128
 038A                   .dbline 126
 038A           ;               if(temp)
 038A 31F0              breq L83
 038C           X15:
 038C                   .dbline 127
 038C           ;               {
 038C                   .dbline 128
 038C           ;                       r_data|=(1<<i);
 038C 01E0              ldi R16,1
 038E 142F              mov R17,R20
 0390 0E940000          xcall lsl8
 0394 A02A              or R10,R16
 0396                   .dbline 129
 0396           ;               }
 0396 07C0              xjmp L84
 0398           L83:
 0398                   .dbline 131
 0398           ;               else
 0398           ;               {
 0398                   .dbline 132
 0398           ;                       r_data&=~(1<<i);
 0398 01E0              ldi R16,1
 039A 142F              mov R17,R20
 039C 0E940000          xcall lsl8
 03A0 202E              mov R2,R16
 03A2 2094              com R2
 03A4 A220              and R10,R2
 03A6                   .dbline 133
 03A6           ;               }       
 03A6           L84:
 03A6                   .dbline 134
 03A6           ;               Delay_us(50);
 03A6 02E3              ldi R16,50
 03A8 10E0              ldi R17,0
 03AA BFDF              xcall _Delay_us
 03AC                   .dbline 135
 03AC           ;               Set_high();     
 03AC                   .dbline 135
 03AC 8F9A              sbi 0x11,7
 03AE                   .dbline 135
 03AE 979A              sbi 0x12,7
 03B0                   .dbline 135
 03B0                   .dbline 136
 03B0           ;       }
 03B0           L80:
 03B0                   .dbline 119
 03B0 4395              inc R20
 03B2           L82:
 03B2                   .dbline 119
 03B2 4830              cpi R20,8
 03B4 F8F2              brlo L79
 03B6           X16:
 03B6                   .dbline 137
 03B6           ;       return (r_data);
 03B6 0A2D              mov R16,R10
 03B8                   .dbline -2
 03B8           L78:
 03B8                   .dbline 0 ; func end
 03B8 0C940000          xjmp pop_xgsetF00C
 03BC                   .dbsym r r_data 10 c
 03BC                   .dbsym r temp 22 c
 03BC                   .dbsym r i 20 c
 03BC                   .dbend
 03BC                   .dbfunc e Write_1_byte _Write_1_byte fV
 03BC           ;           temp -> R22
 03BC           ;              i -> R20
 03BC           ;            cmd -> R10
                        .even
 03BC           _Write_1_byte::
 03BC 0E940000          xcall push_xgsetF00C
 03C0 A02E              mov R10,R16
 03C2                   .dbline -1
 03C2                   .dbline 147
 03C2           ; }
 03C2           ; /*************************************************
 03C2           ; 函 数 名:Write_1_byte
 03C2           ; 功    能:写一个字节到DS18B20
 03C2           ; 入口参数:cmd
 03C2           ; 出口参数:无
 03C2           ; 修改日期:2007.02.16
 03C2           ; *************************************************/
 03C2           ; void Write_1_byte(uint8_t cmd)
 03C2           ; {
 03C2                   .dbline 149
 03C2           ;        uint8_t i,temp;
 03C2           ;        for(i=0;i<8;i++)
 03C2 4427              clr R20
 03C4 0BC0              xjmp L89
 03C6           L86:
 03C6                   .dbline 150
 03C6           ;        {
 03C6                   .dbline 151
 03C6           ;               temp=(cmd>>i);
 03C6 0A2D              mov R16,R10
 03C8 142F              mov R17,R20
 03CA 0E940000          xcall lsr8
 03CE 602F              mov R22,R16
 03D0                   .dbline 152
 03D0           ;               temp&=0x01;
 03D0 6170              andi R22,1
 03D2                   .dbline 153
 03D2           ;               if(temp)
 03D2 11F0              breq L90
 03D4           X17:
 03D4                   .dbline 154
 03D4           ;               {
 03D4                   .dbline 155
 03D4           ;                       Write_1();
 03D4 07D0              xcall _Write_1
 03D6                   .dbline 156
 03D6           ;               }
 03D6 01C0              xjmp L91
 03D8           L90:
 03D8                   .dbline 158
 03D8           ;               else
 03D8           ;               {
 03D8                   .dbline 159
 03D8           ;                       Write_0();
 03D8 10D0              xcall _Write_0
 03DA                   .dbline 160
 03DA           ;               }
 03DA           L91:
 03DA                   .dbline 161
 03DA           ;        }        
 03DA           L87:
 03DA                   .dbline 149
 03DA 4395              inc R20
 03DC           L89:

⌨️ 快捷键说明

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