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

📄 18b20_test.lis

📁 18b20的器件使用
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01D4 0E940000          xcall div16u
 01D8 0983              std y+1,R16
 01DA                   .dbline 120
 01DA 2AE0              ldi R18,10
 01DC 30E0              ldi R19,0
 01DE 8601              movw R16,R12
 01E0 0E940000          xcall mod16u
 01E4 6801              movw R12,R16
 01E6                   .dbline 121
 01E6           ;  dispi[0]=adc;
 01E6 C882              std y+0,R12
 01E8                   .dbline 122
 01E8           ;  lcd_write(command,wz);
 01E8 2A2D              mov R18,R10
 01EA 0027              clr R16
 01EC 33DF              xcall _lcd_write
 01EE 20C0              xjmp L60
 01F0           L59:
 01F0                   .dbline 124
 01F0           ;  while(j--)
 01F0           ;  {
 01F0                   .dbline 125
 01F0           ;   if((dispi[j]==0)&&(i==1)&&(j!=0))
 01F0 CE01              movw R24,R28
 01F2 E42F              mov R30,R20
 01F4 FF27              clr R31
 01F6 E80F              add R30,R24
 01F8 F91F              adc R31,R25
 01FA 2080              ldd R2,z+0
 01FC 2220              tst R2
 01FE 71F4              brne L62
 0200           X13:
 0200 6130              cpi R22,1
 0202 61F4              brne L62
 0204           X14:
 0204 4423              tst R20
 0206 51F0              breq L62
 0208           X15:
 0208                   .dbline 126
 0208           ;   {
 0208                   .dbline 127
 0208           ;    lcd_write(data,dispi[j]+0x20);       
 0208 CE01              movw R24,R28
 020A E42F              mov R30,R20
 020C FF27              clr R31
 020E E80F              add R30,R24
 0210 F91F              adc R31,R25
 0212 2081              ldd R18,z+0
 0214 205E              subi R18,224    ; addi 32
 0216 01E0              ldi R16,1
 0218 1DDF              xcall _lcd_write
 021A                   .dbline 128
 021A           ;   }
 021A 0AC0              xjmp L63
 021C           L62:
 021C                   .dbline 130
 021C           ;   else
 021C           ;   { 
 021C                   .dbline 131
 021C           ;    lcd_write(data,dispi[j]+0x30);
 021C CE01              movw R24,R28
 021E E42F              mov R30,R20
 0220 FF27              clr R31
 0222 E80F              add R30,R24
 0224 F91F              adc R31,R25
 0226 2081              ldd R18,z+0
 0228 205D              subi R18,208    ; addi 48
 022A 01E0              ldi R16,1
 022C 13DF              xcall _lcd_write
 022E                   .dbline 132
 022E           ;    i=0;
 022E 6627              clr R22
 0230                   .dbline 133
 0230           ;   }
 0230           L63:
 0230                   .dbline 134
 0230           ;  }
 0230           L60:
 0230                   .dbline 123
 0230 242E              mov R2,R20
 0232 3324              clr R3
 0234 4150              subi R20,1
 0236 2220              tst R2
 0238 D9F6              brne L59
 023A           X16:
 023A                   .dbline -2
 023A           L56:
 023A                   .dbline 0 ; func end
 023A 2396              adiw R28,3
 023C 0C940000          xjmp pop_xgsetF03C
 0240                   .dbsym r i 22 c
 0240                   .dbsym l dispi 0 A[3:3]c
 0240                   .dbsym r j 20 c
 0240                   .dbsym r adc 12 i
 0240                   .dbsym r wz 10 c
 0240                   .dbend
 0240                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\18b20\18b20.h
 0240                   .dbfunc e Sensor_Delay _Sensor_Delay fV
 0240           ;              i -> R20,R21
 0240           ;             US -> R10,R11
                        .even
 0240           _Sensor_Delay::
 0240 0E940000          xcall push_xgset300C
 0244 5801              movw R10,R16
 0246                   .dbline -1
 0246                   .dbline 12
 0246           ; #define b20_io   PC7
 0246           ; #define b20_port PORTC
 0246           ; #define b20_pin  PINC
 0246           ; #define b20_ddr  DDRC
 0246           ; /********************************************************************************************
 0246           ; * 函数名称:Sensor_Delay(uint16 US)//延时函数
 0246           ; * 功    能:DS18B20软件延时专用
 0246           ; * 入口参数:US    
 0246           ; * 出口参数:无
 0246           ; *********************************************************************************************/
 0246           ; void Sensor_Delay(unsigned int US)
 0246           ; {
 0246                   .dbline 14
 0246           ;  unsigned int i;
 0246           ;  US=US*5/4;                    //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
 0246 05E0              ldi R16,5
 0248 10E0              ldi R17,0
 024A 9501              movw R18,R10
 024C 0E940000          xcall empy16s
 0250 5801              movw R10,R16
 0252 B694              lsr R11
 0254 A794              ror R10
 0256 B694              lsr R11
 0258 A794              ror R10
 025A                   .dbline 15
 025A           ;  for(i=0;i<US;i++); 
 025A 4427              clr R20
 025C 5527              clr R21
 025E 02C0              xjmp L68
 0260           L65:
 0260                   .dbline 15
 0260           L66:
 0260                   .dbline 15
 0260 4F5F              subi R20,255  ; offset = 1
 0262 5F4F              sbci R21,255
 0264           L68:
 0264                   .dbline 15
 0264 4A15              cp R20,R10
 0266 5B05              cpc R21,R11
 0268 D8F3              brlo L65
 026A           X17:
 026A                   .dbline -2
 026A           L64:
 026A                   .dbline 0 ; func end
 026A 0C940000          xjmp pop_xgset300C
 026E                   .dbsym r i 20 i
 026E                   .dbsym r US 10 i
 026E                   .dbend
 026E                   .dbfunc e B20_init _B20_init fV
                        .even
 026E           _B20_init::
 026E                   .dbline -1
 026E                   .dbline 24
 026E           ; }
 026E           ; /*******************************************
 026E           ; 函数名称: B20_init
 026E           ; 功    能: 复位DS18B20
 026E           ; 参    数: 无
 026E           ; 返回值  : 无
 026E           ; ********************************************/
 026E           ; void B20_init(void)
 026E           ; {
 026E                   .dbline 25
 026E           ;  b20_ddr|=(1<<b20_io);                        //配置为输出                      
 026E A79A              sbi 0x14,7
 0270                   .dbline 26
 0270           ;  b20_port&=~(1<<b20_io);                      //拉低
 0270 AF98              cbi 0x15,7
 0272                   .dbline 27
 0272           ;  Sensor_Delay(600);                                   //等待600微秒
 0272 08E5              ldi R16,600
 0274 12E0              ldi R17,2
 0276 E4DF              xcall _Sensor_Delay
 0278                   .dbline 28
 0278           ;  b20_port|=(1<<b20_io);                       //释放总线
 0278 AF9A              sbi 0x15,7
 027A                   .dbline 29
 027A           ;  Sensor_Delay(60);                                    //等待60微秒
 027A 0CE3              ldi R16,60
 027C 10E0              ldi R17,0
 027E E0DF              xcall _Sensor_Delay
 0280                   .dbline 30
 0280           ;  b20_ddr&=~(1<<b20_io);                       //配置为输入 
 0280 A798              cbi 0x14,7
 0282           L70:
 0282                   .dbline 31
 0282           ;  while((b20_pin&(1<<b20_io)));        //等待DS18B20拉低
 0282           L71:
 0282                   .dbline 31
 0282 9F99              sbic 0x13,7
 0284 FECF              rjmp L70
 0286           X18:
 0286           L73:
 0286                   .dbline 32
 0286           ;  while(!(b20_pin&(1<<b20_io))); //等待DS18B20释放总线
 0286           L74:
 0286                   .dbline 32
 0286 9F9B              sbis 0x13,7
 0288 FECF              rjmp L73
 028A           X19:
 028A                   .dbline -2
 028A           L69:
 028A                   .dbline 0 ; func end
 028A 0895              ret
 028C                   .dbend
 028C                   .dbfunc e B20_readB _B20_readB fc
 028C           ;           retd -> R20
 028C           ;              i -> R22
                        .even
 028C           _B20_readB::
 028C 4A93              st -y,R20
 028E 6A93              st -y,R22
 0290                   .dbline -1
 0290                   .dbline 42
 0290           ; }
 0290           ; 
 0290           ; /*******************************************
 0290           ; 函数名称: B20_readB
 0290           ; 功    能: 读取一个字节的数据
 0290           ; 参    数: 无
 0290           ; 返回值  : retd--返回的一个字节数据
 0290           ; ********************************************/
 0290           ; unsigned char B20_readB(void)
 0290           ; {
 0290                   .dbline 43
 0290           ;  unsigned char i,retd=0;
 0290 4427              clr R20
 0292                   .dbline 44
 0292           ;  for(i=0;i<8;i++)                             //位计数值
 0292 6627              clr R22
 0294 0FC0              xjmp L80
 0296           L77:
 0296                   .dbline 45
 0296           ;  {
 0296                   .dbline 46
 0296           ;   retd>>=1;                                           //右移,准备接受新的数据位
 0296 4695              lsr R20
 0298                   .dbline 47
 0298           ;   b20_ddr|=(1<<b20_io);                       //配置为输出
 0298 A79A              sbi 0x14,7
 029A                   .dbline 48
 029A           ;   b20_port&=~(1<<b20_io);                     //拉低,启动读数据位
 029A AF98              cbi 0x15,7
 029C                   .dbline 49
 029C           ;   b20_port|=(1<<b20_io);                      //释放总线
 029C AF9A              sbi 0x15,7
 029E                   .dbline 50
 029E           ;   Sensor_Delay(5);                                    //等待5微秒
 029E 05E0              ldi R16,5
 02A0 10E0              ldi R17,0
 02A2 CEDF              xcall _Sensor_Delay
 02A4                   .dbline 51
 02A4           ;   b20_ddr&=~(1<<b20_io);                      //配置为输入,开始读取数据位
 02A4 A798              cbi 0x14,7
 02A6                   .dbline 52
 02A6           ;   if(b20_pin&(1<<b20_io))                     //该位是否为高
 02A6 9F9B              sbis 0x13,7
 02A8 01C0              rjmp L81
 02AA           X20:
 02AA                   .dbline 53
 02AA           ;   {
 02AA                   .dbline 54
 02AA           ;    retd|=0x80;                                        //是就将此位置高
 02AA 4068              ori R20,128
 02AC                   .dbline 55
 02AC           ;   }
 02AC           L81:
 02AC                   .dbline 56
 02AC           ;   Sensor_Delay(50);                                   //等待50微秒
 02AC 02E3              ldi R16,50
 02AE 10E0              ldi R17,0
 02B0 C7DF              xcall _Sensor_Delay
 02B2                   .dbline 57
 02B2           ;  }
 02B2           L78:
 02B2                   .dbline 44
 02B2 6395              inc R22
 02B4           L80:
 02B4                   .dbline 44
 02B4 6830              cpi R22,8
 02B6 78F3              brlo L77
 02B8           X21:
 02B8                   .dbline 58
 02B8           ;  return retd;                                 //将读到的一个字节返回
 02B8 042F              mov R16,R20
 02BA                   .dbline -2
 02BA           L76:
 02BA                   .dbline 0 ; func end
 02BA 6991              ld R22,y+
 02BC 4991              ld R20,y+
 02BE 0895              ret
 02C0                   .dbsym r retd 20 c
 02C0                   .dbsym r i 22 c
 02C0                   .dbend
 02C0                   .dbfunc e B20_writeB _B20_writeB fV
 02C0           ;              i -> R20
 02C0           ;            wrd -> R10
                        .even
 02C0           _B20_writeB::
 02C0 AA92              st -y,R10
 02C2 4A93              st -y,R20
 02C4 A02E              mov R10,R16
 02C6                   .dbline -1
 02C6                   .dbline 67
 02C6           ; }
 02C6           ; /*******************************************
 02C6           ; 函数名称: B20_writeB
 02C6           ; 功    能: 写入一个字节的数据
 02C6           ; 参    数: wrd--要写入的数据
 02C6           ; 返回值  : 无
 02C6           ; ********************************************/
 02C6           ; void B20_writeB(unsigned char wrd)
 02C6           ; {
 02C6                   .dbline 69

⌨️ 快捷键说明

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