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

📄 ds18b20.lis

📁 一个关于AVR单片机的例程
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 008C                   .dbline 81
 008C           ;               retVal|=0x80;
 008C 4068              ori R20,128
 008E           L17:
 008E                   .dbline 82
 008E 00E1              ldi R16,16
 0090 0E940000          xcall _delayUs
 0094                   .dbline 83
 0094 00E1              ldi R16,16
 0096 0E940000          xcall _delayUs
 009A                   .dbline 84
 009A 8B98              cbi 0x11,3
 009C                   .dbline 85
 009C 03E2              ldi R16,35
 009E 0E940000          xcall _delayUs
 00A2                   .dbline 86
 00A2           L14:
 00A2                   .dbline 63
 00A2 6A95              dec R22
 00A4           L16:
 00A4                   .dbline 63
 00A4 2224              clr R2
 00A6 2616              cp R2,R22
 00A8 00F3              brlo L13
 00AA                   .dbline 87
 00AA           ;               delayUs(16);            //14.92us
 00AA           ;               delayUs(16);            //14.92us
 00AA           ;               RLS_DS18B20;            //释放总线
 00AA           ;               delayUs(35);            //30.38us
 00AA           ;       }
 00AA           ;       delayUs(1);                     //2.71us(大于1us就行了)
 00AA 01E0              ldi R16,1
 00AC 0E940000          xcall _delayUs
 00B0                   .dbline 88
 00B0           ;       return(retVal);
 00B0 042F              mov R16,R20
 00B2                   .dbline -2
 00B2           L12:
 00B2 0E940000          xcall pop_gset2
 00B6                   .dbline 0 ; func end
 00B6 0895              ret
 00B8                   .dbsym r retVal 20 c
 00B8                   .dbsym r i 22 c
 00B8                   .dbend
 00B8                   .dbfunc e writeByteDS18B20 _writeByteDS18B20 fV
 00B8           ;           temp -> R20
 00B8           ;              i -> R22
 00B8           ;             wb -> R10
                        .even
 00B8           _writeByteDS18B20::
 00B8 0E940000          xcall push_gset3
 00BC A02E              mov R10,R16
 00BE                   .dbline -1
 00BE                   .dbline 97
 00BE           ; }
 00BE           ; 
 00BE           ; 
 00BE           ; /**********************************************************************
 00BE           ; functionName: BYTE readByteDS18B20(void)
 00BE           ; description :写DS18B20一个字节
 00BE           ; **********************************************************************/
 00BE           ; void writeByteDS18B20(BYTE wb)
 00BE           ; {
 00BE                   .dbline 100
 00BE           ;       BYTE i;
 00BE           ;       BYTE temp;
 00BE           ;       RLS_DS18B20;            //释放总线
 00BE 8B98              cbi 0x11,3
 00C0                   .dbline 101
 00C0           ;       for(i=0;i<8;i++)
 00C0 6627              clr R22
 00C2 1AC0              xjmp L23
 00C4           L20:
 00C4                   .dbline 102
 00C4           ;       {
 00C4                   .dbline 103
 00C4           ;               HLD_DS18B20;            //Maga16控制总线
 00C4 8B9A              sbi 0x11,3
 00C6                   .dbline 104
 00C6           ;               CLR_DS18B20;            //强制拉低
 00C6 9398              cbi 0x12,3
 00C8                   .dbline 105
 00C8           ;               delayUs(16);            //14.92us
 00C8 00E1              ldi R16,16
 00CA 0E940000          xcall _delayUs
 00CE                   .dbline 106
 00CE           ;               temp=wb>>i;
 00CE 0A2D              mov R16,R10
 00D0 162F              mov R17,R22
 00D2 0E940000          xcall lsr8
 00D6 402F              mov R20,R16
 00D8                   .dbline 107
 00D8           ;               temp&=0x01;
 00D8 4170              andi R20,1
 00DA                   .dbline 108
 00DA           ;               if(temp)
 00DA 11F0              breq L24
 00DC                   .dbline 109
 00DC           ;               RLS_DS18B20;            //释放总线
 00DC 8B98              cbi 0x11,3
 00DE 01C0              xjmp L25
 00E0           L24:
 00E0                   .dbline 111
 00E0           ;               else
 00E0           ;               CLR_DS18B20;            //强制拉低
 00E0 9398              cbi 0x12,3
 00E2           L25:
 00E2                   .dbline 112
 00E2 00E1              ldi R16,16
 00E4 0E940000          xcall _delayUs
 00E8                   .dbline 113
 00E8 03E2              ldi R16,35
 00EA 0E940000          xcall _delayUs
 00EE                   .dbline 114
 00EE 8B98              cbi 0x11,3
 00F0                   .dbline 115
 00F0 01E0              ldi R16,1
 00F2 0E940000          xcall _delayUs
 00F6                   .dbline 116
 00F6           L21:
 00F6                   .dbline 101
 00F6 6395              inc R22
 00F8           L23:
 00F8                   .dbline 101
 00F8 6830              cpi R22,8
 00FA 20F3              brlo L20
 00FC                   .dbline -2
 00FC           L19:
 00FC 0E940000          xcall pop_gset3
 0100                   .dbline 0 ; func end
 0100 0895              ret
 0102                   .dbsym r temp 20 c
 0102                   .dbsym r i 22 c
 0102                   .dbsym r wb 10 c
 0102                   .dbend
 0102                   .dbfunc e readTempDS18B20 _readTempDS18B20 fi
 0102           ;              x -> R20,R21
 0102           ;          tempH -> R20
 0102           ;          tempL -> R22
                        .even
 0102           _readTempDS18B20::
 0102 0E940000          xcall push_gset2
 0106                   .dbline -1
 0106                   .dbline 129
 0106           ;               delayUs(16);            //14.92us
 0106           ;               delayUs(35);            //30.38us
 0106           ;               RLS_DS18B20;            //释放总线
 0106           ;               delayUs(1);                     //2.71us(大于1us就行了)
 0106           ;       }
 0106           ; }
 0106           ; 
 0106           ; 
 0106           ; 
 0106           ; 
 0106           ; 
 0106           ; 
 0106           ; /**********************************************************************
 0106           ; functionName: unsigned int readTempDS18B20(void)
 0106           ; description :读DS18B20温度
 0106           ; **********************************************************************/
 0106           ; unsigned int readTempDS18B20(void)
 0106           ; {
 0106                   .dbline 132
 0106           ;       BYTE tempL,tempH;
 0106           ;       WORD x;
 0106           ;       resetDS18B20();
 0106 7CDF              xcall _resetDS18B20
 0108                   .dbline 133
 0108           ;       writeByteDS18B20(0xcc);         //跳过ROM
 0108 0CEC              ldi R16,204
 010A D6DF              xcall _writeByteDS18B20
 010C                   .dbline 134
 010C           ;       writeByteDS18B20(0x44);         //启动温度转换
 010C 04E4              ldi R16,68
 010E D4DF              xcall _writeByteDS18B20
 0110                   .dbline 135
 0110           ;       delayUs(1);
 0110 01E0              ldi R16,1
 0112 0E940000          xcall _delayUs
 0116                   .dbline 136
 0116           ;       resetDS18B20();
 0116 74DF              xcall _resetDS18B20
 0118                   .dbline 137
 0118           ;       writeByteDS18B20(0xcc);         //跳过ROM
 0118 0CEC              ldi R16,204
 011A CEDF              xcall _writeByteDS18B20
 011C                   .dbline 138
 011C           ;       writeByteDS18B20(0xbe);         //读数据
 011C 0EEB              ldi R16,190
 011E CCDF              xcall _writeByteDS18B20
 0120                   .dbline 139
 0120           ;       tempL=readByteDS18B20();
 0120 9EDF              xcall _readByteDS18B20
 0122 602F              mov R22,R16
 0124                   .dbline 140
 0124           ;       tempH=readByteDS18B20();
 0124 9CDF              xcall _readByteDS18B20
 0126 402F              mov R20,R16
 0128                   .dbline 141
 0128           ;       x=(tempH<<8)|tempL;
 0128 542F              mov R21,R20
 012A 462F              mov R20,R22
 012C                   .dbline 142
 012C           ;       return(x);
 012C 8A01              movw R16,R20
 012E                   .dbline -2
 012E           L26:
 012E 0E940000          xcall pop_gset2
 0132                   .dbline 0 ; func end
 0132 0895              ret
 0134                   .dbsym r x 20 i
 0134                   .dbsym r tempH 20 c
 0134                   .dbsym r tempL 22 c
 0134                   .dbend

⌨️ 快捷键说明

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