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

📄 boot128.lst

📁 AVR16源代码 ICC编译器
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0014) unsigned char eeprom_read_byte(unsigned int *addr)
(0015) {
(0016) 	/* Wait for completion of previous write */
(0017) 	while(EECR & (1<<EEWE));
_eeprom_read_byte:
  addr                 --> R16
    F41C 99E1      SBIC	0x1C,1
    F41D CFFE      RJMP	_eeprom_read_byte
(0018) 	/* Set up address register */
(0019) 	EEAR = *addr;
    F41E 01F8      MOVW	R30,R16
    F41F 8020      LDD	R2,Z+0
    F420 8031      LDD	R3,Z+1
    F421 BA3F      OUT	0x1F,R3
    F422 BA2E      OUT	0x1E,R2
(0020) 	/* Start eeprom read by writing EERE */
(0021) 	EECR |= (1<<EERE);
    F423 9AE0      SBI	0x1C,0
(0022) 	/* Return data from Data Register */
(0023) 	return EEDR;
    F424 B30D      IN	R16,0x1D
    F425 9508      RET
(0024) }
(0025) //============================================================
(0026) //函	数:void eeprom_write_byte(unsigned long *addr, unsigned char val)
(0027) //功	能:写入EE一个字节
(0028) //入口参数:写入地址,写入数据  
(0029) //返 回 值:无  
(0030) //设 计 者:覃道堂 
(0031) //创作时间:2006-03-28
(0032) //修改时间:
(0033) //修改目的:
(0034) //============================================================
(0035) void eeprom_write_byte(unsigned int *addr, unsigned char val) 
(0036) {
(0037) 	/* Wait for completion of previous write */
(0038) 	while(EECR & (1<<EEWE));
_eeprom_write_byte:
  val                  --> R18
  addr                 --> R16
    F426 99E1      SBIC	0x1C,1
    F427 CFFE      RJMP	_eeprom_write_byte
(0039) 	/* Set up address and Data Registers */
(0040) 	EEAR = *addr;
    F428 01F8      MOVW	R30,R16
    F429 8020      LDD	R2,Z+0
    F42A 8031      LDD	R3,Z+1
    F42B BA3F      OUT	0x1F,R3
    F42C BA2E      OUT	0x1E,R2
(0041) 	EEDR = val;
    F42D BB2D      OUT	0x1D,R18
(0042) 	/* Write logical one to EEMWE */
(0043) 	EECR |= (1<<EEMWE);
    F42E 9AE2      SBI	0x1C,2
(0044) 	/* Start eeprom write by setting EEWE */
(0045) 	EECR |= (1<<EEWE);
    F42F 9AE1      SBI	0x1C,1
(0046) 	while(EECR & (1<<EEWE));
    F430 99E1      SBIC	0x1C,1
    F431 CFFE      RJMP	0xF430
    F432 9508      RET
_Write_EEPROM:
  i                    --> R20
  EE_START_ADR         --> Y+6
  num_bytes            --> R22
  pBuffer              --> R10
    F433 940EF5FB  CALL	push_gset3
    F435 2F62      MOV	R22,R18
    F436 0158      MOVW	R10,R16
(0047) }
(0048) /*****************************************************************************
(0049) *
(0050) *   Function name : StoreEEPROM
(0051) *
(0052) *   Returns :       None
(0053) *
(0054) *   Parameters :    Pointer to string, number of bytes to write, adress in EEPROM
(0055) *
(0056) *   Purpose :       Write byte(s) to the EEPROM
(0057) *
(0058) *****************************************************************************/
(0059) void Write_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
(0060) {
(0061)     	unsigned char 	i;
(0062)     	for (i=0;i<num_bytes;i++) 
    F437 2744      CLR	R20
    F438 C00F      RJMP	0xF448
(0063)     	{
(0064) 		eeprom_write_byte(&EE_START_ADR, pBuffer[i]);
    F439 2FE4      MOV	R30,R20
    F43A 27FF      CLR	R31
    F43B 0DEA      ADD	R30,R10
    F43C 1DFB      ADC	R31,R11
    F43D 8120      LDD	R18,Z+0
    F43E 018E      MOVW	R16,R28
    F43F 5F0A      SUBI	R16,0xFA
    F440 4F1F      SBCI	R17,0xFF
    F441 DFE4      RCALL	_eeprom_write_byte
(0065) 		EE_START_ADR++;
    F442 818E      LDD	R24,Y+6
    F443 819F      LDD	R25,Y+7
    F444 9601      ADIW	R24,1
    F445 839F      STD	Y+7,R25
    F446 838E      STD	Y+6,R24
    F447 9543      INC	R20
    F448 1746      CP	R20,R22
    F449 F378      BCS	0xF439
    F44A 940EF5F1  CALL	pop_gset3
    F44C 9508      RET
_Read_EEPROM:
  i                    --> R20
  EE_START_ADR         --> Y+6
  num_bytes            --> R22
  pBuffer              --> R10
    F44D 940EF5FB  CALL	push_gset3
    F44F 2F62      MOV	R22,R18
    F450 0158      MOVW	R10,R16
(0066) 	}
(0067) }
(0068) 
(0069) 
(0070) /*****************************************************************************
(0071) *
(0072) *   Function name : ReadEEPROM
(0073) *
(0074) *   Returns :       None
(0075) *
(0076) *   Parameters :    Pointer to string, number of bytes to read, adress in EEPROM
(0077) *
(0078) *   Purpose :       Write byte(s) to the EEPROM
(0079) *
(0080) *****************************************************************************/
(0081) 
(0082) void Read_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
(0083) {
(0084)     	unsigned char 	i;
(0085)     	
(0086)     	for (i=0;i<num_bytes;i++) 
    F451 2744      CLR	R20
    F452 C00F      RJMP	0xF462
(0087)     	{
(0088) 		pBuffer[i]=eeprom_read_byte(&EE_START_ADR);
    F453 018E      MOVW	R16,R28
    F454 5F0A      SUBI	R16,0xFA
    F455 4F1F      SBCI	R17,0xFF
    F456 DFC5      RCALL	_eeprom_read_byte
    F457 2FE4      MOV	R30,R20
    F458 27FF      CLR	R31
    F459 0DEA      ADD	R30,R10
    F45A 1DFB      ADC	R31,R11
    F45B 8300      STD	Z+0,R16
(0089) 		EE_START_ADR++;
    F45C 818E      LDD	R24,Y+6
    F45D 819F      LDD	R25,Y+7
    F45E 9601      ADIW	R24,1
    F45F 839F      STD	Y+7,R25
    F460 838E      STD	Y+6,R24
    F461 9543      INC	R20
    F462 1746      CP	R20,R22
    F463 F378      BCS	0xF453
    F464 940EF5F1  CALL	pop_gset3
    F466 9508      RET
FILE: E:\程序\AVR程序\BOOTLoadICC\Rtc8025.c
(0001) #include	<iom128v.h>
(0002) #include	"Rtc8025.h"
(0003) 
(0004) //==========================================================
(0005) //函	数:void RTC_Delay(unsigned int MD)
(0006) //功	能:延时
(0007) //入口参数:延时的参数
(0008) //出口参数:无
(0009) //日	期:2005-07-21	覃道堂	
(0010) //==========================================================
(0011) void RTC_Delay(unsigned int MD)
(0012) {
(0013) 	while(MD --);
_RTC_Delay:
  MD                   --> R16
    F467 0118      MOVW	R2,R16
    F468 5001      SUBI	R16,1
    F469 4010      SBCI	R17,0
    F46A 2022      TST	R2
    F46B F7D9      BNE	0xF467
    F46C 2033      TST	R3
    F46D F7C9      BNE	0xF467
    F46E 9508      RET
(0014) }
(0015) //==========================================================
(0016) //函	数:	void Send_Start(void)
(0017) //功	能:	发送起始位
(0018) //入口参数:	无
(0019) //出口参数:	1错误,0正确
(0020) //日	期:	2005-07-20	覃道堂
(0021) //==========================================================
(0022) unsigned char Send_Start(void)
(0023) {
(0024) 	RTCSDA_INPUT;
_Send_Start:
    F46F B381      IN	R24,0x11
    F470 7F8D      ANDI	R24,0xFD
    F471 BB81      OUT	0x11,R24
(0025) 	RTC_Delay(1);
    F472 E001      LDI	R16,1
    F473 E010      LDI	R17,0
    F474 DFF2      RCALL	_RTC_Delay
(0026) 	if((PIND & 0x02) == 0)
    F475 9981      SBIC	0x10,1
    F476 C002      RJMP	0xF479
(0027) 		return 1;
    F477 E001      LDI	R16,1
    F478 C01C      RJMP	0xF495
(0028) 	RTCSDA_H;
    F479 9A91      SBI	0x12,1
(0029) 	RTC_Delay(1);
    F47A E001      LDI	R16,1
    F47B E010      LDI	R17,0
    F47C DFEA      RCALL	_RTC_Delay
(0030) 	RTCSDA_OUTPUT;
    F47D 9A89      SBI	0x11,1
(0031) 	RTCSCL_L;
    F47E B382      IN	R24,0x12
    F47F 7F8E      ANDI	R24,0xFE
    F480 BB82      OUT	0x12,R24
(0032) 	RTC_Delay(1);
    F481 E001      LDI	R16,1
    F482 E010      LDI	R17,0
    F483 DFE3      RCALL	_RTC_Delay
(0033) 	RTCSCL_H;
    F484 9A90      SBI	0x12,0
(0034) 	RTC_Delay(1);
    F485 E001      LDI	R16,1
    F486 E010      LDI	R17,0
    F487 DFDF      RCALL	_RTC_Delay
(0035) 	RTCSDA_L;
    F488 B382      IN	R24,0x12
    F489 7F8D      ANDI	R24,0xFD
    F48A BB82      OUT	0x12,R24
(0036) 	RTC_Delay(1);
    F48B E001      LDI	R16,1
    F48C E010      LDI	R17,0
    F48D DFD9      RCALL	_RTC_Delay
(0037) 	RTCSCL_L;
    F48E B382      IN	R24,0x12
    F48F 7F8E      ANDI	R24,0xFE
    F490 BB82      OUT	0x12,R24
(0038) 	RTC_Delay(1);
    F491 E001      LDI	R16,1
    F492 E010      LDI	R17,0
    F493 DFD3      RCALL	_RTC_Delay
(0039) 	return 0;
    F494 2700      CLR	R16
    F495 9508      RET
(0040) }
(0041) //==========================================================
(0042) //函	数:	void Send_Stop(void)
(0043) //功	能:	发送停止位
(0044) //入口参数:	无
(0045) //出口参数:	1错误,0正确
(0046) //日	期:	2005-07-20	覃道堂
(0047) //==========================================================
(0048) unsigned char Send_Stop(void)
(0049) {
(0050) 	RTCSDA_INPUT;
_Send_Stop:
    F496 B381      IN	R24,0x11
    F497 7F8D      ANDI	R24,0xFD
    F498 BB81      OUT	0x11,R24
(0051) 	RTC_Delay(20);
    F499 E104      LDI	R16,0x14
    F49A E010      LDI	R17,0
    F49B DFCB      RCALL	_RTC_Delay
(0052) 	if((PIND & 0x02) == 0)
    F49C 9981      SBIC	0x10,1
    F49D C002      RJMP	0xF4A0
(0053) 		return 1;
    F49E E001      LDI	R16,1
    F49F C019      RJMP	0xF4B9
(0054) 	RTCSDA_L;
    F4A0 B382      IN	R24,0x12
    F4A1 7F8D      ANDI	R24,0xFD
    F4A2 BB82      OUT	0x12,R24
(0055) 	RTCSDA_OUTPUT;
    F4A3 9A89      SBI	0x11,1
(0056) 	RTCSCL_L;
    F4A4 B382      IN	R24,0x12
    F4A5 7F8E      ANDI	R24,0xFE
    F4A6 BB82      OUT	0x12,R24
(0057) 	RTC_Delay(1);
    F4A7 E001      LDI	R16,1
    F4A8 E010      LDI	R17,0
    F4A9 DFBD      RCALL	_RTC_Delay
(0058) 	RTCSCL_H;
    F4AA 9A90      SBI	0x12,0
(0059) 	RTC_Delay(1);
    F4AB E001      LDI	R16,1
    F4AC E010      LDI	R17,0
    F4AD DFB9      RCALL	_RTC_Delay
(0060) 	RTCSDA_H;
    F4AE 9A91      SBI	0x12,1
(0061) 	RTC_Delay(1);
    F4AF E001      LDI	R16,1
    F4B0 E010      LDI	R17,0
    F4B1 DFB5      RCALL	_RTC_Delay
(0062) 	RTCSCL_L;
    F4B2 B382      IN	R24,0x12
    F4B3 7F8E      ANDI	R24,0xFE
    F4B4 BB82      OUT	0x12,R24
(0063) 	RTC_Delay(1);
    F4B5 E001      LDI	R16,1
    F4B6 E010      LDI	R17,0
    F4B7 DFAF      RCALL	_RTC_Delay
(0064) 	return 0;
    F4B8 2700      CLR	R16
    F4B9 9508      RET
(0065) }
(0066) //==========================================================
(0067) //函	数:	unsigned char Receive_ACK()
(0068) //功	能:	接收应答
(0069) //入口参数:	无
(0070) //出口参数:	1错误,0正确
(0071) //日	期:	2005-07-20	覃道堂
(0072) //==========================================================
(0073) unsigned char Receive_ACK(void)
(0074) {
(0075) 	RTCSDA_INPUT;
_Receive_ACK:
    F4BA B381      IN	R24,0x11
    F4BB 7F8D      ANDI	R24,0xFD
    F4BC BB81      OUT	0x11,R24
(0076) 	RTC_Delay(1);
    F4BD E001      LDI	R16,1
    F4BE E010      LDI	R17,0
    F4BF DFA7      RCALL	_RTC_Delay
(0077) 	RTCSCL_H;
    F4C0 9A90      SBI	0x12,0
(0078) 	RTC_Delay(1);
    F4C1 E001      LDI	R16,1
    F4C2 E010      LDI	R17,0
    F4C3 DFA3      RCALL	_RTC_Delay
(0079) 	if((PIND & 0x02) == 2)
    F4C4 B380      IN	R24,0x10
    F4C5 7082      ANDI	R24,2
    F4C6 3082      CPI	R24,2
    F4C7 F411      BNE	0xF4CA
(0080) 		return 1;
    F4C8 E001      LDI	R16,1
    F4C9 C007      RJMP	0xF4D1
(0081) 	RTCSCL_L;
    F4CA B382      IN	R24,0x12
    F4CB 7F8E      ANDI	R24,0xFE
    F4CC BB82      OUT	0x12,R24
(0082) 	RTC_Delay(1);
    F4CD E001      LDI	R16,1
    F4CE E010      LDI	R17,0
    F4CF DF97      RCALL	_RTC_Delay
(0083) 	return 0;
    F4D0 2700      CLR	R16
    F4D1 9508      RET
(0084) }
(0085) //==========================================================
(0086) //函	数:	unsigned char Send_ACK(void)
(0087) //功	能:	发送应答
(0088) //入口参数:	无
(0089) //出口参数:	无
(0090) //日	期:	2005-07-20	覃道堂
(0091) //==========================================================
(0092) unsigned char Send_ACK(void)
(0093) {
(0094) 	RTCSCL_L;
_Send_ACK:
    F4D2 B382      IN	R24,0x12
    F4D3 7F8E      ANDI	R24,0xFE
    F4D4 BB82      OUT	0x12,R24
(0095) 	if(!(PIND & 0x02))
    F4D5 9981      SBIC	0x10,1
    F4D6 C002      RJMP	0xF4D9
(0096) 		return 1;	
    F4D7 E001      LDI	R16,1
    F4D8 C012      RJMP	0xF4EB
(0097) 	RTCSDA_L;
    F4D9 B382      IN	R24,0x12
    F4DA 7F8D      ANDI	R24,0xFD
    F4DB BB82      OUT	0x12,R24
(0098) 	RTCSDA_OUTPUT;
    F4DC 9A89      SBI	0x11,1
(0099) 	RTC_Delay(1);
    F4DD E001      LDI	R16,1
    F4DE E010      LDI	R17,0
    F4DF DF87      RCALL	_RTC

⌨️ 快捷键说明

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