📄 boot128.lst
字号:
(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 + -