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

📄 18b20.lst

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

⌨️ 快捷键说明

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