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

📄 ds18b20.lis

📁 基于AVR单片机的DS18B20测温程序.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01BC D8DF              rcall _delayms
 01BE                   .dbline 71
 01BE           ;  PORTC=0B00000101;
 01BE 85E0              ldi R24,5
 01C0 85BB              out 0x15,R24
 01C2                   .dbline 72
 01C2           ;  PORTC=0B00000100;
 01C2 84E0              ldi R24,4
 01C4 85BB              out 0x15,R24
 01C6                   .dbline -2
 01C6           L21:
 01C6 00D0              rcall pop_gset1
 01C8                   .dbline 0 ; func end
 01C8 0895              ret
 01CA                   .dbsym r WDLCM 20 c
 01CA                   .dbend
 01CA                   .dbfunc e WriteCommandLCM _WriteCommandLCM fV
 01CA           ;          BuysC -> R22
 01CA           ;          WCLCM -> R20
                        .even
 01CA           _WriteCommandLCM::
 01CA 00D0              rcall push_gset2
 01CC 622F              mov R22,R18
 01CE 402F              mov R20,R16
 01D0                   .dbline -1
 01D0                   .dbline 78
 01D0           ; }
 01D0           ; 
 01D0           ; //写指令
 01D0           ; void  WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC) //BuysC为0时忽略忙检测
 01D0           ; 
 01D0           ; {
 01D0                   .dbline 79
 01D0           ;  if (BuysC) 
 01D0 6623              tst R22
 01D2 01F0              breq L23
 01D4                   .dbline 80
 01D4           ;  ;//ReadStatusLCM(); //根据需要检测忙
 01D4           L23:
 01D4                   .dbline 81
 01D4           ;  LCM_Data = WCLCM;
 01D4 48BB              out 0x18,R20
 01D6                   .dbline 82
 01D6           ;  delayms(1);
 01D6 01E0              ldi R16,1
 01D8 10E0              ldi R17,0
 01DA C9DF              rcall _delayms
 01DC                   .dbline 83
 01DC           ;  PORTC=0B00000001;
 01DC 81E0              ldi R24,1
 01DE 85BB              out 0x15,R24
 01E0                   .dbline 84
 01E0           ;  delayms(1);
 01E0 01E0              ldi R16,1
 01E2 10E0              ldi R17,0
 01E4 C4DF              rcall _delayms
 01E6                   .dbline 85
 01E6           ;  PORTC=0B00000000;
 01E6 2224              clr R2
 01E8 25BA              out 0x15,R2
 01EA                   .dbline -2
 01EA           L22:
 01EA 00D0              rcall pop_gset2
 01EC                   .dbline 0 ; func end
 01EC 0895              ret
 01EE                   .dbsym r BuysC 22 c
 01EE                   .dbsym r WCLCM 20 c
 01EE                   .dbend
 01EE                   .dbfunc e ReadDataLCM _ReadDataLCM fc
                        .even
 01EE           _ReadDataLCM::
 01EE                   .dbline -1
 01EE                   .dbline 90
 01EE           ; }
 01EE           ; 
 01EE           ; //读数据
 01EE           ; unsigned char ReadDataLCM(void)
 01EE           ; {
 01EE                   .dbline 91
 01EE           ;  PORTC=0X00000111;
 01EE 81E1              ldi R24,273
 01F0 91E0              ldi R25,1
 01F2 85BB              out 0x15,R24
 01F4                   .dbline 92
 01F4           ;  return(LCM_Data);
 01F4 08B3              in R16,0x18
 01F6                   .dbline -2
 01F6           L25:
 01F6                   .dbline 0 ; func end
 01F6 0895              ret
 01F8                   .dbend
 01F8                   .dbfunc e LCMInit _LCMInit fV
                        .even
 01F8           _LCMInit::
 01F8                   .dbline -1
 01F8                   .dbline 99
 01F8           ; }
 01F8           ; 
 01F8           ; //读状态
 01F8           ; 
 01F8           ; 
 01F8           ; void LCMInit(void) //LCM初始化
 01F8           ; {
 01F8                   .dbline 108
 01F8           ; /* LCM_Data = 0;
 01F8           ;  WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
 01F8           ;  delayms(5);
 01F8           ;  WriteCommandLCM(0x38,0);
 01F8           ;  delayms(5);
 01F8           ;  WriteCommandLCM(0x38,0);
 01F8           ;  delayms(5);
 01F8           ; */
 01F8           ;  WriteCommandLCM(0x38,0); //显示模式设置,开始要求每次检测忙信号
 01F8 2227              clr R18
 01FA 08E3              ldi R16,56
 01FC E6DF              rcall _WriteCommandLCM
 01FE                   .dbline 110
 01FE           ;  //WriteCommandLCM(0x08,0); //关闭显示
 01FE           ;  WriteCommandLCM(0x01,0); //显示清屏
 01FE 2227              clr R18
 0200 01E0              ldi R16,1
 0202 E3DF              rcall _WriteCommandLCM
 0204                   .dbline 111
 0204           ;  WriteCommandLCM(0x06,0); // 显示光标移动设置
 0204 2227              clr R18
 0206 06E0              ldi R16,6
 0208 E0DF              rcall _WriteCommandLCM
 020A                   .dbline 112
 020A           ;  WriteCommandLCM(0x0c,0); // 显示开及光标设置
 020A 2227              clr R18
 020C 0CE0              ldi R16,12
 020E DDDF              rcall _WriteCommandLCM
 0210                   .dbline -2
 0210           L26:
 0210                   .dbline 0 ; func end
 0210 0895              ret
 0212                   .dbend
 0212                   .dbfunc e DisplayOneChar _DisplayOneChar fV
 0212           ;          DData -> y+4
 0212           ;              Y -> R22
 0212           ;              X -> R20
                        .even
 0212           _DisplayOneChar::
 0212 00D0              rcall push_gset2
 0214 622F              mov R22,R18
 0216 402F              mov R20,R16
 0218                   .dbline -1
 0218                   .dbline 120
 0218           ; }
 0218           ; 
 0218           ; /*****************************************************************************/
 0218           ; 
 0218           ; 
 0218           ; //按指定位置显示一个字符
 0218           ; void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 0218           ; {
 0218                   .dbline 121
 0218           ;  Y &= 0x1;
 0218 6170              andi R22,1
 021A                   .dbline 122
 021A           ;  X &= 0xF; //限制X不能大于15,Y不能大于1
 021A 4F70              andi R20,15
 021C                   .dbline 123
 021C           ;  if (Y) X += 0x40; //当要显示第二行时地址码+0x40;
 021C 6623              tst R22
 021E 09F0              breq L28
 0220                   .dbline 123
 0220 405C              subi R20,192    ; addi 64
 0222           L28:
 0222                   .dbline 124
 0222           ;  X += 0x80; // 算出指令码
 0222 4058              subi R20,128    ; addi 128
 0224                   .dbline 125
 0224           ;  WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
 0224 2227              clr R18
 0226 042F              mov R16,R20
 0228 D0DF              rcall _WriteCommandLCM
 022A                   .dbline 126
 022A           ;  WriteDataLCM(DData);
 022A 0C81              ldd R16,y+4
 022C C2DF              rcall _WriteDataLCM
 022E                   .dbline -2
 022E           L27:
 022E 00D0              rcall pop_gset2
 0230                   .dbline 0 ; func end
 0230 0895              ret
 0232                   .dbsym l DData 4 c
 0232                   .dbsym r Y 22 c
 0232                   .dbsym r X 20 c
 0232                   .dbend
 0232                   .dbfunc e DisplayListChar _DisplayListChar fV
 0232           ;     ListLength -> R20
 0232           ;          DData -> R22,R23
 0232           ;              Y -> R10
 0232           ;              X -> R12
                        .even
 0232           _DisplayListChar::
 0232 00D0              rcall push_gset4
 0234 A22E              mov R10,R18
 0236 C02E              mov R12,R16
 0238 2197              sbiw R28,1
 023A 6985              ldd R22,y+9
 023C 7A85              ldd R23,y+10
 023E                   .dbline -1
 023E                   .dbline 131
 023E           ; }
 023E           ; 
 023E           ; //按指定位置显示一串字符
 023E           ; void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
 023E           ; {
 023E                   .dbline 134
 023E           ;  unsigned char ListLength;
 023E           ; 
 023E           ;   ListLength = 0;
 023E 4427              clr R20
 0240                   .dbline 135
 0240           ;  Y &= 0x1;
 0240 8A2D              mov R24,R10
 0242 8170              andi R24,1
 0244 A82E              mov R10,R24
 0246                   .dbline 136
 0246           ;  X &= 0xF; //限制X不能大于15,Y不能大于1
 0246 8C2D              mov R24,R12
 0248 8F70              andi R24,15
 024A C82E              mov R12,R24
 024C 0EC0              rjmp L32
 024E           L31:
 024E                   .dbline 138
 024E           ;  while (DData[ListLength]!= '$') //若到达字串尾则退出
 024E           ;   {
 024E                   .dbline 139
 024E           ;    if (X <= 0xF) //X坐标应小于0xF
 024E 8FE0              ldi R24,15
 0250 8C15              cp R24,R12
 0252 58F0              brlo L34
 0254                   .dbline 140
 0254           ;     {
 0254                   .dbline 141
 0254           ;      DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
 0254 E42F              mov R30,R20
 0256 FF27              clr R31
 0258 E60F              add R30,R22
 025A F71F              adc R31,R23
 025C 2080              ldd R2,z+0
 025E 2882              std y+0,R2
 0260 2A2D              mov R18,R10
 0262 0C2D              mov R16,R12
 0264 D6DF              rcall _DisplayOneChar
 0266                   .dbline 142
 0266           ;      ListLength++;
 0266 4395              inc R20
 0268                   .dbline 143
 0268           ;      X++;
 0268 C394              inc R12
 026A                   .dbline 144
 026A           ;     }
 026A           L34:
 026A                   .dbline 145
 026A           L32:
 026A                   .dbline 137
 026A E42F              mov R30,R20
 026C FF27              clr R31
 026E E60F              add R30,R22
 0270 F71F              adc R31,R23
 0272 8081              ldd R24,z+0
 0274 8432              cpi R24,36
 0276 59F7              brne L31
 0278                   .dbline -2
 0278           L30:
 0278 2196              adiw R28,1
 027A 00D0              rcall pop_gset4
 027C                   .dbline 0 ; func end
 027C 0895              ret
 027E                   .dbsym r ListLength 20 c
 027E                   .dbsym r DData 22 pc
 027E                   .dbsym r Y 10 c
 027E                   .dbsym r X 12 c
 027E                   .dbend
 027E                   .dbfunc e Writr0 _Writr0 fV
                        .even
 027E           _Writr0::
 027E                   .dbline -1
 027E                   .dbline 155
 027E           ;   }
 027E           ; }
 027E           ; 
 027E           ; /**********************************************************/ 
 027E           ; 
 027E           ; 
 027E           ; /***************************************************************
 027E           ; *  功能:主机向总线写0                                         *
 027E           ; ***************************************************************/
 027E           ; void Writr0(void)
 027E           ; {
 027E                   .dbline 156
 027E           ;    Set_DQ1;
 027E A39A              sbi 0x14,3
 0280                   .dbline 156
 0280 AB9A              sbi 0x15,3
 0282                   .dbline 156
 0282                   .dbline 157
 0282           ;    Set_DQ0;
 0282 A39A              sbi 0x14,3
 0284                   .dbline 157
 0284 85B3              in R24,0x15
 0286 877F              andi R24,247
 0288 85BB              out 0x15,R24
 028A                   .dbline 157
 028A                   .dbline 158
 028A           ;    delayus(700);
 028A 0CEB              ldi R16,700
 028C 12E0              ldi R17,2
 028E 81DF              rcall _delayus
 0290                   .dbline 160
 0290           ;  
 0290           ;    Set_DQ1; 
 0290 A39A              sbi 0x14,3
 0292                   .dbline 160
 0292 AB9A              sbi 0x15,3
 0294                   .dbline 160
 0294                   .dbline 161
 0294           ;    asm("nop");
 0294 0000              nop
 0296                   .dbline 162
 0296           ;    delayus(15);
 0296 0FE0              ldi R16,15
 0298 10E0              ldi R17,0
 029A 7BDF              rcall _delayus
 029C                   .dbline -2
 029C           L36:
 029C                   .dbline 0 ; func end
 029C 0895              ret
 029E                   .dbend
 029E                   .dbfunc e Writr1 _Writr1 fV
                        .even
 029E           _Writr1::
 029E                   .dbline -1
 029E                   .dbline 169
 029E           ; }
 029E           ; 
 029E           ; /***************************************************************
 029E           ; *  功能:主机向总线写1                                         *
 029E           ; ***************************************************************/
 029E           ; void Writr1(void)
 029E           ; {
 029E                   .dbline 170
 029E           ;    Set_DQ1;
 029E A39A              sbi 0x14,3
 02A0                   .dbline 170
 02A0 AB9A              sbi 0x15,3
 02A2                   .dbline 170
 02A2                   .dbline 171
 02A2           ;    Set_DQ0;
 02A2 A39A              sbi 0x14,3
 02A4                   .dbline 171
 02A4 85B3              in R24,0x15
 02A6 877F              andi R24,247
 02A8 85BB              out 0x15,R24
 02AA                   .dbline 171
 02AA                   .dbline 172
 02AA           ;    asm("nop");
 02AA 0000              nop
 02AC                   .dbline 173
 02AC           ;    asm("nop");
 02AC 0000              nop
 02AE                   .dbline 174
 02AE           ;    asm("nop");
 02AE 0000              nop
 02B0                   .dbline 175
 02B0           ;    asm("nop");
 02B0 0000              nop
 02B2                   .dbline 176
 02B2           ;  asm("nop");
 02B2 0000              nop
 02B4                   .dbline 177
 02B4           ;  asm("nop");
 02B4 0000              nop
 02B6                   .dbline 178
 02B6           ;  asm("nop");
 02B6 0000              nop
 02B8                   .dbline 179
 02B8           ;     asm("nop");
 02B8 0000              nop
 02BA                   .dbline 180
 02BA           ;    asm("nop");
 02BA 0000              nop
 02BC                   .dbline 181
 02BC           ;    asm("nop");
 02BC 0000              nop
 02BE                   .dbline 182
 02BE           ;    asm("nop");
 02BE 0000              nop

⌨️ 快捷键说明

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