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

📄 18b20.lst

📁 18b20的器件使用
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0077)   }
     19A C001      RJMP	0x019C
(0078)   else
(0079)   {
(0080)    b20_port&=~(1<<b20_io);		//是低则将单总线拉低
     19B 98AF      CBI	0x15,7
(0081)   }
(0082)   Sensor_Delay(50);					//等待50微秒
     19C E302      LDI	R16,0x32
     19D E010      LDI	R17,0
     19E DFB1      RCALL	_Sensor_Delay
(0083)   b20_port|=(1<<b20_io);			//释放总线
     19F 9AAF      SBI	0x15,7
(0084)   wrd>>=1;						//右移,为写入新的数据位做准备
     1A0 94A6      LSR	R10
     1A1 9543      INC	R20
     1A2 3048      CPI	R20,0x8
     1A3 F370      BCS	0x0192
(0085)  }
(0086)  Sensor_Delay(50);					//等待50微秒
     1A4 E302      LDI	R16,0x32
     1A5 E010      LDI	R17,0
     1A6 DFA9      RCALL	_Sensor_Delay
     1A7 9149      LD	R20,Y+
     1A8 90A9      LD	R10,Y+
     1A9 9508      RET
_Read_temp:
  temph                --> R10
  templ                --> R12
     1AA D092      RCALL	push_xgset003C
     1AB 0159      MOVW	R10,R18
     1AC 0168      MOVW	R12,R16
(0087) }
(0088) 
(0089) /*******************************************
(0090) 函数名称: Read_temp
(0091) 功    能: 读取温度值
(0092) 参    数: templ温度值低位,temph温度值高位
(0093) 返回值  : 无
(0094) ********************************************/
(0095) void Read_temp(unsigned char *templ,unsigned char *temph)
(0096) {
(0097)  B20_init();	      //初始化,每次写命令都从初始化开始
     1AD DFB6      RCALL	_B20_init
(0098)  B20_writeB(0xcc); 	  //跳过ROM
     1AE EC0C      LDI	R16,0xCC
     1AF DFDD      RCALL	_B20_writeB
(0099)  B20_writeB(0x44); 	  //启动温度转换
     1B0 E404      LDI	R16,0x44
     1B1 DFDB      RCALL	_B20_writeB
(0100)  B20_init();	   	  //初始化,每次写命令都从初始化开始
     1B2 DFB1      RCALL	_B20_init
(0101)  B20_writeB(0xcc); 	  //跳过ROM
     1B3 EC0C      LDI	R16,0xCC
     1B4 DFD8      RCALL	_B20_writeB
(0102)  B20_writeB(0xbe); 	  //读寄存器
     1B5 EB0E      LDI	R16,0xBE
     1B6 DFD6      RCALL	_B20_writeB
(0103)  *templ=B20_readB();	  //读温度低字节
     1B7 DFBB      RCALL	_B20_readB
     1B8 01F6      MOVW	R30,R12
     1B9 8300      STD	Z+0,R16
(0104)  *temph=B20_readB();	  //读温度高字节
     1BA DFB8      RCALL	_B20_readB
     1BB 01F5      MOVW	R30,R10
     1BC 8300      STD	Z+0,R16
     1BD C074      RJMP	pop_xgset003C
_b20_display:
  fraction             --> R10
  inter                --> R12
  b20_l                --> Y,+1
  b20_h                --> Y,+0
  lz                   --> R20
     1BE D08D      RCALL	push_xgset303C
     1BF 2F40      MOV	R20,R16
     1C0 9722      SBIW	R28,2
(0105) }
(0106) /*******************************************
(0107) 函数名称: b20_display
(0108) 功    能: 温度值显示
(0109) 参    数: lz为液晶显示位置
(0110) 返回值  : 无
(0111) ********************************************/
(0112) void b20_display(unsigned char lz)
(0113) {
(0114)  unsigned char b20_h=0,b20_l=0;
     1C1 2422      CLR	R2
     1C2 8228      STD	Y+0,R2
     1C3 8229      STD	Y+1,R2
(0115)  unsigned char inter=0;
     1C4 24CC      CLR	R12
(0116)  unsigned int fraction=0;
     1C5 24AA      CLR	R10
     1C6 24BB      CLR	R11
(0117)  Read_temp(&b20_l,&b20_h);   //读取温度值
     1C7 019E      MOVW	R18,R28
     1C8 018E      MOVW	R16,R28
     1C9 5F0F      SUBI	R16,0xFF
     1CA 4F1F      SBCI	R17,0xFF
     1CB DFDE      RCALL	_Read_temp
(0118)  if(b20_h&0xf8)
     1CC 8188      LDD	R24,Y+0
     1CD 7F88      ANDI	R24,0xF8
     1CE F061      BEQ	0x01DB
(0119)  {
(0120)   lcd_write(command,lz);
     1CF 2F24      MOV	R18,R20
     1D0 2700      CLR	R16
     1D1 DEAC      RCALL	_lcd_write
(0121)   lcd_write(data,' -');
     1D2 E220      LDI	R18,0x20
     1D3 E001      LDI	R16,1
     1D4 DEA9      RCALL	_lcd_write
(0122)   b20_l=~b20_l;
     1D5 8029      LDD	R2,Y+1
     1D6 9420      COM	R2
     1D7 8229      STD	Y+1,R2
(0123)   b20_h=~b20_h;
     1D8 8028      LDD	R2,Y+0
     1D9 9420      COM	R2
     1DA 8228      STD	Y+0,R2
(0124)  }
(0125)  inter=b20_h*16+(b20_l>>4);//整数部分
     1DB 8028      LDD	R2,Y+0
     1DC E180      LDI	R24,0x10
     1DD 9D82      MUL	R24,R2
     1DE 0160      MOVW	R12,R0
     1DF 8189      LDD	R24,Y+1
     1E0 9582      SWAP	R24
     1E1 708F      ANDI	R24,0xF
     1E2 0EC8      ADD	R12,R24
(0126)  int_disp(lz+1,inter);
     1E3 2D2C      MOV	R18,R12
     1E4 2733      CLR	R19
     1E5 2F04      MOV	R16,R20
     1E6 5F0F      SUBI	R16,0xFF
     1E7 DF28      RCALL	_int_disp
(0127)  lcd_write(data,'.');
     1E8 E22E      LDI	R18,0x2E
     1E9 E001      LDI	R16,1
     1EA DE93      RCALL	_lcd_write
(0128)  fraction=(b20_l&0x0f)*625;//小数部分,只显示小数点后一位
     1EB 8129      LDD	R18,Y+1
     1EC 2733      CLR	R19
     1ED 702F      ANDI	R18,0xF
     1EE 7030      ANDI	R19,0
     1EF E701      LDI	R16,0x71
     1F0 E012      LDI	R17,2
     1F1 D030      RCALL	empy16s
     1F2 0158      MOVW	R10,R16
(0129)  lcd_write(data,fraction/1000+48);
     1F3 EE28      LDI	R18,0xE8
     1F4 E033      LDI	R19,3
     1F5 D012      RCALL	div16u
     1F6 0198      MOVW	R18,R16
     1F7 5D20      SUBI	R18,0xD0
     1F8 4F3F      SBCI	R19,0xFF
     1F9 E001      LDI	R16,1
     1FA DE83      RCALL	_lcd_write
     1FB 9622      ADIW	R28,2
     1FC C056      RJMP	pop_xgset303C
FILE: D:\mega16_32实验板资料\ICCAVR源程序\18b20\18b20_test.c
(0001) //ICC-AVR application builder : 2008-5-8 17:24:29
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) 
(0008) #include "delay.h"
(0009) #include "lcd12232.h"
(0010) #include "18b20.h"
(0011) 
(0012) void main(void)
(0013) {
(0014)  LCD_init();
_main:
     1FD DEBD      RCALL	_LCD_init
(0015)  line1_display("18B20 温度显示 ");
     1FE E600      LDI	R16,0x60
     1FF E010      LDI	R17,0
     200 DEED      RCALL	_line1_display
     201 C002      RJMP	0x0204
(0016)  while(1)
(0017)  {
(0018)    b20_display(0x93);
FILE: <library>
     202 E903      LDI	R16,0x93
     203 DFBA      RCALL	_b20_display
     204 CFFD      RJMP	0x0202
     205 9508      RET
mod16u:
     206 9468      BSET	6
     207 C001      RJMP	xdiv16u
div16u:
     208 94E8      BCLR	6
xdiv16u:
     209 92EA      ST	R14,-Y
     20A 92FA      ST	R15,-Y
     20B 938A      ST	R24,-Y
     20C 24EE      CLR	R14
     20D 24FF      CLR	R15
     20E E180      LDI	R24,0x10
     20F 0F00      LSL	R16
     210 1F11      ROL	R17
     211 1CEE      ROL	R14
     212 1CFF      ROL	R15
     213 16E2      CP	R14,R18
     214 06F3      CPC	R15,R19
     215 F018      BCS	0x0219
     216 1AE2      SUB	R14,R18
     217 0AF3      SBC	R15,R19
     218 9503      INC	R16
     219 958A      DEC	R24
     21A F7A1      BNE	0x020F
     21B F416      BRTC	0x021E
     21C 2D0E      MOV	R16,R14
     21D 2D1F      MOV	R17,R15
     21E 9189      LD	R24,Y+
     21F 90F9      LD	R15,Y+
     220 90E9      LD	R14,Y+
     221 9508      RET
empy16s:
     222 920A      ST	R0,-Y
     223 921A      ST	R1,-Y
     224 938A      ST	R24,-Y
     225 939A      ST	R25,-Y
     226 9F02      MUL	R16,R18
     227 01C0      MOVW	R24,R0
     228 9F12      MUL	R17,R18
     229 0D90      ADD	R25,R0
     22A 9F03      MUL	R16,R19
     22B 0D90      ADD	R25,R0
     22C 018C      MOVW	R16,R24
     22D 9199      LD	R25,Y+
     22E 9189      LD	R24,Y+
     22F 9019      LD	R1,Y+
     230 9009      LD	R0,Y+
     231 9508      RET
pop_xgset003C:
     232 90A9      LD	R10,Y+
     233 90B9      LD	R11,Y+
     234 90C9      LD	R12,Y+
     235 90D9      LD	R13,Y+
     236 9508      RET
push_xgsetF0FC:
     237 937A      ST	R23,-Y
     238 936A      ST	R22,-Y
push_xgset30FC:
     239 935A      ST	R21,-Y
     23A 934A      ST	R20,-Y
push_xgset00FC:
     23B 92FA      ST	R15,-Y
     23C 92EA      ST	R14,-Y
push_xgset003C:
     23D 92DA      ST	R13,-Y
     23E 92CA      ST	R12,-Y
     23F 92BA      ST	R11,-Y
     240 92AA      ST	R10,-Y
     241 9508      RET
push_xgset300C:
     242 935A      ST	R21,-Y
     243 934A      ST	R20,-Y
     244 92BA      ST	R11,-Y
     245 92AA      ST	R10,-Y
     246 9508      RET
pop_xgset300C:
     247 90A9      LD	R10,Y+
     248 90B9      LD	R11,Y+
     249 9149      LD	R20,Y+
     24A 9159      LD	R21,Y+
     24B 9508      RET
push_xgset303C:
     24C 935A      ST	R21,-Y
     24D 934A      ST	R20,-Y
     24E 92DA      ST	R13,-Y
     24F 92CA      ST	R12,-Y
     250 92BA      ST	R11,-Y
     251 92AA      ST	R10,-Y
     252 9508      RET
pop_xgset303C:
     253 940E 0271 CALL	0x0271
     255 9508      RET
push_xgsetF03C:
     256 937A      ST	R23,-Y
     257 936A      ST	R22,-Y
     258 935A      ST	R21,-Y
     259 934A      ST	R20,-Y
     25A 92DA      ST	R13,-Y
     25B 92CA      ST	R12,-Y
     25C 92BA      ST	R11,-Y
     25D 92AA      ST	R10,-Y
     25E 9508      RET
pop_xgsetF03C:
     25F 940E 0271 CALL	0x0271
     261 9169      LD	R22,Y+
     262 9179      LD	R23,Y+
     263 9508      RET
<created procedures>:
     264 2FE4      MOV	R30,R20
     265 27FF      CLR	R31
     266 0DEA      ADD	R30,R10
     267 1DFB      ADC	R31,R11
     268 8120      LDD	R18,Z+0
     269 E001      LDI	R16,1
     26A 9508      RET
     26B 01CE      MOVW	R24,R28
     26C 2FE4      MOV	R30,R20
     26D 27FF      CLR	R31
     26E 0FE8      ADD	R30,R24
     26F 1FF9      ADC	R31,R25
     270 9508      RET
     271 90A9      LD	R10,Y+
     272 90B9      LD	R11,Y+
     273 90C9      LD	R12,Y+
     274 90D9      LD	R13,Y+
     275 9149      LD	R20,Y+
     276 9159      LD	R21,Y+
     277 9508      RET

⌨️ 快捷键说明

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