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

📄 ds1302_18b20_1602.lst

📁 这是一个用温度计和时钟程序,芯片是ATmega16,电路稳定,绝对好用而且易懂
💻 LST
📖 第 1 页 / 共 4 页
字号:
     38E 2FE4      MOV	R30,R20
     38F 27FF      CLR	R31
     390 0FE8      ADD	R30,R24
     391 1FF9      ADC	R31,R25
     392 9124      LPM	R18,0(Z)
     393 2700      CLR	R16
     394 DD2B      RCALL	_LCD_write_byte
     395 940C 0445 JMP	pop_xgsetF0FC
_Write:
  j                    --> R22
  i                    --> R10
  temp                 --> R20
  Dat                  --> Y,+6
  Address              --> R18
  RAM_CLOCK            --> R16
     397 940E 0465 CALL	push_xgsetF00C
(0153) }
(0154) /******************************************/
(0155) void Write(uint8_t RAM_CLOCK, uint8_t Address, uint8_t Dat)
(0156) {
(0157)  	uint8_t i,j,temp=0x80;
     399 E840      LDI	R20,0x80
(0158) 	temp &=~ 0x01;
     39A 7F4E      ANDI	R20,0xFE
(0159) 	if(RAM_CLOCK == 1)
     39B 3001      CPI	R16,1
     39C F411      BNE	0x039F
(0160) 	{
(0161) 	 	temp |= (1<<6);
     39D 6440      ORI	R20,0x40
(0162) 	}
     39E C001      RJMP	0x03A0
(0163) 	else
(0164) 	{
(0165) 	 	temp &=~(1<<6);
     39F 7B4F      ANDI	R20,0xBF
(0166) 	}
(0167) 	Address <<= 1;
     3A0 0F22      LSL	R18
(0168) 	temp |= Address;
     3A1 2B42      OR	R20,R18
(0169) 	SET_RST();
     3A2 9A95      SBI	0x12,5
(0170) 	NOP();
     3A3 0000      NOP
(0171) 	for(j=0; j<2; j++)
     3A4 2766      CLR	R22
     3A5 C015      RJMP	0x03BB
(0172) 	{
(0173) 	 	for(i=0; i<8; i++)
     3A6 24AA      CLR	R10
     3A7 C00E      RJMP	0x03B6
(0174) 		{
(0175) 	 	 	if((temp & 0x01) == 0)
     3A8 FD40      SBRC	R20,0
     3A9 C002      RJMP	0x03AC
(0176) 			{
(0177) 		 	 	CLR_IO();
     3AA 9894      CBI	0x12,4
(0178) 			}
     3AB C001      RJMP	0x03AD
(0179) 			else
(0180) 			{
(0181) 		 	 	SET_IO();
     3AC 9A94      SBI	0x12,4
(0182) 			}
(0183) 			NOP();
     3AD 0000      NOP
(0184) 			SET_SCLK();
     3AE 9A93      SBI	0x12,3
(0185) 			NOP();
     3AF 0000      NOP
(0186) 			NOP();
     3B0 0000      NOP
(0187) 			CLR_SCLK();
     3B1 9893      CBI	0x12,3
(0188) 			NOP();
     3B2 0000      NOP
(0189) 			CLR_IO();
     3B3 9894      CBI	0x12,4
(0190) 			temp >>= 1;
     3B4 9546      LSR	R20
     3B5 94A3      INC	R10
     3B6 2D8A      MOV	R24,R10
     3B7 3088      CPI	R24,0x8
     3B8 F378      BCS	0x03A8
(0191) 		}
(0192) 		temp = Dat;
     3B9 814E      LDD	R20,Y+6
     3BA 9563      INC	R22
     3BB 3062      CPI	R22,2
     3BC F348      BCS	0x03A6
(0193) 	}
(0194) 	CLR_IO();
     3BD 9894      CBI	0x12,4
(0195) 	NOP();
     3BE 0000      NOP
(0196) 	CLR_RST();
     3BF 9895      CBI	0x12,5
     3C0 940C 046C JMP	pop_xgsetF00C
_Read_DS1302:
  temp                 --> R20
  i                    --> R22
  Address              --> R18
  RAM_CLOCK            --> R16
     3C2 934A      ST	R20,-Y
     3C3 936A      ST	R22,-Y
(0197) }
(0198) /******************************************/
(0199) unsigned char Read_DS1302(uint8_t RAM_CLOCK, uint8_t Address)
(0200) {
(0201) 	uint8_t i,temp=0x80;
     3C4 E840      LDI	R20,0x80
(0202) 	temp |= 0x01;
     3C5 6041      ORI	R20,1
(0203) 	if(RAM_CLOCK == 1)
     3C6 3001      CPI	R16,1
     3C7 F411      BNE	0x03CA
(0204) 	{
(0205) 	 	temp |= (1<<6);
     3C8 6440      ORI	R20,0x40
(0206) 	}
     3C9 C001      RJMP	0x03CB
(0207) 	else
(0208) 	{
(0209) 	 	temp &=~(1<<6);
     3CA 7B4F      ANDI	R20,0xBF
(0210) 	}
(0211) 	Address <<= 1;
     3CB 0F22      LSL	R18
(0212) 	temp |= Address;
     3CC 2B42      OR	R20,R18
(0213) 	SET_RST();
     3CD 9A95      SBI	0x12,5
(0214) 	NOP();
     3CE 0000      NOP
(0215) 	 for(i=0; i<7; i++)
     3CF 2766      CLR	R22
     3D0 C00E      RJMP	0x03DF
(0216) 	{
(0217) 	 	 if((temp & 0x01) == 0)
     3D1 FD40      SBRC	R20,0
     3D2 C002      RJMP	0x03D5
(0218) 		{
(0219) 		 	CLR_IO();
     3D3 9894      CBI	0x12,4
(0220) 		}
     3D4 C001      RJMP	0x03D6
(0221) 		else
(0222) 		{
(0223) 	 	 	SET_IO();
     3D5 9A94      SBI	0x12,4
(0224) 		}
(0225) 		NOP();
     3D6 0000      NOP
(0226) 		SET_SCLK();
     3D7 9A93      SBI	0x12,3
(0227) 		NOP();
     3D8 0000      NOP
(0228) 		NOP();
     3D9 0000      NOP
(0229) 		CLR_SCLK();
     3DA 9893      CBI	0x12,3
(0230) 		NOP();
     3DB 0000      NOP
(0231) 		CLR_IO();
     3DC 9894      CBI	0x12,4
(0232) 		temp >>= 1;
     3DD 9546      LSR	R20
     3DE 9563      INC	R22
     3DF 3067      CPI	R22,7
     3E0 F380      BCS	0x03D1
(0233) 	}
(0234) 	SET_IO();
     3E1 9A94      SBI	0x12,4
(0235) 	NOP();
     3E2 0000      NOP
(0236) 	SET_SCLK();
     3E3 9A93      SBI	0x12,3
(0237) 	SET_IO_INPUT();
     3E4 988C      CBI	0x11,4
(0238) 	NOP();
     3E5 0000      NOP
(0239) 	for(i=0; i<8; i++)
     3E6 2766      CLR	R22
     3E7 C010      RJMP	0x03F8
(0240) 	{
(0241) 	 	CLR_SCLK();
     3E8 9893      CBI	0x12,3
(0242) 		NOP();
     3E9 0000      NOP
(0243) 		if((IO_PIN & IO) == 0)
     3EA 9984      SBIC	0x10,4
     3EB C002      RJMP	0x03EE
(0244) 		{
(0245) 		 	temp &= ~0x80;
     3EC 774F      ANDI	R20,0x7F
(0246) 		}
     3ED C001      RJMP	0x03EF
(0247) 		else
(0248) 		{
(0249) 		 	temp |= 0x80;
     3EE 6840      ORI	R20,0x80
(0250) 		}
(0251) 		//temp >>=1;
(0252) 		if(i<7)
     3EF 3067      CPI	R22,7
     3F0 F418      BCC	0x03F4
(0253) 		{
(0254) 		 	SET_SCLK();
     3F1 9A93      SBI	0x12,3
(0255) 			temp >>=1;
     3F2 9546      LSR	R20
(0256) 		}
     3F3 C001      RJMP	0x03F5
(0257) 		else
(0258) 		{
(0259) 		 	CLR_SCLK();
     3F4 9893      CBI	0x12,3
(0260) 		}
(0261) 		NOP();
     3F5 0000      NOP
(0262) 		NOP();
     3F6 0000      NOP
     3F7 9563      INC	R22
     3F8 3068      CPI	R22,0x8
     3F9 F370      BCS	0x03E8
(0263) 	}	
(0264) 	CLR_IO();
     3FA 9894      CBI	0x12,4
(0265) 	NOP();
     3FB 0000      NOP
(0266) 	CLR_RST();
     3FC 9895      CBI	0x12,5
(0267) 	return (temp);
     3FD 2F04      MOV	R16,R20
     3FE 9169      LD	R22,Y+
     3FF 9149      LD	R20,Y+
     400 9508      RET
_DS18B20:
  i                    --> R10
  Tl                   --> R12
  Th                   --> R10
     401 92AA      ST	R10,-Y
     402 92CA      ST	R12,-Y
(0268) }
(0269) /******************************************/
(0270) void DS18B20(void)
(0271) {
(0272)  	uint8_t Th, Tl, i;
(0273) 	i=Init_18b20();
     403 DE35      RCALL	_Init_18b20
(0274) 	Write_1_byte(0xcc);
     404 EC0C      LDI	R16,0xCC
     405 DE73      RCALL	_Write_1_byte
(0275) 	Write_1_byte(0x44);
     406 E404      LDI	R16,0x44
     407 DE71      RCALL	_Write_1_byte
(0276) 	Delay_nms(100);
     408 E604      LDI	R16,0x64
     409 E010      LDI	R17,0
     40A DD29      RCALL	_Delay_nms
(0277) 	i=Init_18b20();
     40B DE2D      RCALL	_Init_18b20
(0278) 	Write_1_byte(0xcc);
     40C EC0C      LDI	R16,0xCC
     40D DE6B      RCALL	_Write_1_byte
(0279) 	Write_1_byte(0xbe);
     40E EB0E      LDI	R16,0xBE
     40F DE69      RCALL	_Write_1_byte
(0280) 	Tl=Read_1_byte();
     410 DE3F      RCALL	_Read_1_byte
     411 2EA0      MOV	R10,R16
     412 2CCA      MOV	R12,R10
(0281) 	Th=Read_1_byte();
     413 DE3C      RCALL	_Read_1_byte
     414 2EA0      MOV	R10,R16
(0282) 	Temperature(Th,Tl);
     415 2D2C      MOV	R18,R12
     416 DDEE      RCALL	_Temperature
(0283) 	//Temperature(12,45);
(0284) 	Delay_nms(100);
FILE: <library>
     417 E604      LDI	R16,0x64
     418 E010      LDI	R17,0
     419 DD1A      RCALL	_Delay_nms
     41A 90C9      LD	R12,Y+
     41B 90A9      LD	R10,Y+
     41C 9508      RET
mod8u:
     41D 9468      BSET	6
     41E C001      RJMP	xdiv8u
div8u:
     41F 94E8      BCLR	6
xdiv8u:
     420 932A      ST	R18,-Y
     421 92FA      ST	R15,-Y
     422 92EA      ST	R14,-Y
     423 24FF      CLR	R15
     424 24EE      CLR	R14
     425 E120      LDI	R18,0x10
     426 0F00      LSL	R16
     427 1CFF      ROL	R15
     428 1CEE      ROL	R14
     429 16E1      CP	R14,R17
     42A F010      BCS	0x042D
     42B 1AE1      SUB	R14,R17
     42C 9503      INC	R16
     42D 952A      DEC	R18
     42E F7B9      BNE	0x0426
     42F F40E      BRTC	0x0431
     430 2D0E      MOV	R16,R14
     431 90E9      LD	R14,Y+
     432 90F9      LD	R15,Y+
     433 9129      LD	R18,Y+
     434 9508      RET
pop_xgset00FC:
     435 90A9      LD	R10,Y+
     436 90B9      LD	R11,Y+
     437 90C9      LD	R12,Y+
     438 90D9      LD	R13,Y+
     439 90E9      LD	R14,Y+
     43A 90F9      LD	R15,Y+
     43B 9508      RET
pop_xgset30FC:
     43C 90A9      LD	R10,Y+
     43D 90B9      LD	R11,Y+
     43E 90C9      LD	R12,Y+
     43F 90D9      LD	R13,Y+
     440 90E9      LD	R14,Y+
     441 90F9      LD	R15,Y+
     442 9149      LD	R20,Y+
     443 9159      LD	R21,Y+
     444 9508      RET
pop_xgsetF0FC:
     445 90A9      LD	R10,Y+
     446 90B9      LD	R11,Y+
     447 90C9      LD	R12,Y+
     448 90D9      LD	R13,Y+
     449 90E9      LD	R14,Y+
     44A 90F9      LD	R15,Y+
     44B 9149      LD	R20,Y+
     44C 9159      LD	R21,Y+
     44D 9169      LD	R22,Y+
     44E 9179      LD	R23,Y+
     44F 9508      RET
push_xgsetF0FC:
     450 937A      ST	R23,-Y
     451 936A      ST	R22,-Y
push_xgset30FC:
     452 935A      ST	R21,-Y
     453 934A      ST	R20,-Y
push_xgset00FC:
     454 92FA      ST	R15,-Y
     455 92EA      ST	R14,-Y
push_xgset003C:
     456 92DA      ST	R13,-Y
     457 92CA      ST	R12,-Y
     458 92BA      ST	R11,-Y
     459 92AA      ST	R10,-Y
     45A 9508      RET
push_xgsetF000:
     45B 937A      ST	R23,-Y
     45C 936A      ST	R22,-Y
     45D 935A      ST	R21,-Y
     45E 934A      ST	R20,-Y
     45F 9508      RET
pop_xgsetF000:
     460 9149      LD	R20,Y+
     461 9159      LD	R21,Y+
     462 9169      LD	R22,Y+
     463 9179      LD	R23,Y+
     464 9508      RET
push_xgsetF00C:
     465 937A      ST	R23,-Y
     466 936A      ST	R22,-Y
     467 935A      ST	R21,-Y
     468 934A      ST	R20,-Y
     469 92BA      ST	R11,-Y
     46A 92AA      ST	R10,-Y
     46B 9508      RET
pop_xgsetF00C:
     46C 90A9      LD	R10,Y+
     46D 90B9      LD	R11,Y+
     46E 9149      LD	R20,Y+
     46F 9159      LD	R21,Y+
     470 9169      LD	R22,Y+
     471 9179      LD	R23,Y+
     472 9508      RET
push_xgset303C:
     473 935A      ST	R21,-Y
     474 934A      ST	R20,-Y
     475 92DA      ST	R13,-Y
     476 92CA      ST	R12,-Y
     477 92BA      ST	R11,-Y
     478 92AA      ST	R10,-Y
     479 9508      RET
pop_xgset303C:
     47A 90A9      LD	R10,Y+
     47B 90B9      LD	R11,Y+
     47C 90C9      LD	R12,Y+
     47D 90D9      LD	R13,Y+
     47E 9149      LD	R20,Y+
     47F 9159      LD	R21,Y+
     480 9508      RET
push_xgsetF03C:
     481 937A      ST	R23,-Y
     482 936A      ST	R22,-Y
     483 935A      ST	R21,-Y
     484 934A      ST	R20,-Y
     485 92DA      ST	R13,-Y
     486 92CA      ST	R12,-Y
     487 92BA      ST	R11,-Y
     488 92AA      ST	R10,-Y
     489 9508      RET
pop_xgsetF03C:
     48A 90A9      LD	R10,Y+
     48B 90B9      LD	R11,Y+
     48C 90C9      LD	R12,Y+
     48D 90D9      LD	R13,Y+
     48E 9149      LD	R20,Y+
     48F 9159      LD	R21,Y+
     490 9169      LD	R22,Y+
     491 9179      LD	R23,Y+
     492 9508      RET
lsl8:
     493 2311      TST	R17
     494 F019      BEQ	0x0498
     495 0F00      LSL	R16
     496 951A      DEC	R17
     497 CFFB      RJMP	lsl8
     498 9508      RET
lsr8:
     499 2311      TST	R17
     49A F019      BEQ	0x049E
     49B 9506      LSR	R16
     49C 951A      DEC	R17
     49D CFFB      RJMP	lsr8
     49E 9508      RET

⌨️ 快捷键说明

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