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

📄 18b20_test.lis

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

⌨️ 快捷键说明

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