📄 eeprom128.lis
字号:
.module Eeprom128.c
.area text(rom, con, rel)
0000 .dbfile D:\avr16\atmegal16\Eeprom128.c
0000 .dbfunc e eeprom_read_byte _eeprom_read_byte fc
0000 ; addr -> R16,R17
.even
0000 _eeprom_read_byte::
0000 .dbline -1
0000 .dbline 15
0000 ; #include <iom16v.h>
0000 ; #include "Eeprom128.h"
0000 ;
0000 ; //============================================================
0000 ; //函 数:unsigned char eeprom_read_byte(unsigned long *addr)
0000 ; //功 能:读取EE一个字节
0000 ; //入口参数:读取地址
0000 ; //返 回 值:读取的字节数据
0000 ; //设 计 者:覃道堂
0000 ; //创作时间:2006-03-28
0000 ; //修改时间:
0000 ; //修改目的:
0000 ; //============================================================
0000 ; unsigned char eeprom_read_byte(unsigned int *addr)
0000 ; {
0000 L2:
0000 .dbline 17
0000 L3:
0000 .dbline 17
0000 ; /* Wait for completion of previous write */
0000 ; while(EECR & (1<<EEWE));
0000 E199 sbic 0x1c,1
0002 FECF rjmp L2
0004 .dbline 19
0004 ; /* Set up address register */
0004 ; EEAR = *addr;
0004 F801 movw R30,R16
0006 2080 ldd R2,z+0
0008 3180 ldd R3,z+1
000A 3FBA out 0x1f,R3
000C 2EBA out 0x1e,R2
000E .dbline 21
000E ; /* Start eeprom read by writing EERE */
000E ; EECR |= (1<<EERE);
000E E09A sbi 0x1c,0
0010 .dbline 23
0010 ; /* Return data from Data Register */
0010 ; return EEDR;
0010 0DB3 in R16,0x1d
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r addr 16 pi
0014 .dbend
0014 .dbfunc e eeprom_write_byte _eeprom_write_byte fV
0014 ; val -> R18
0014 ; addr -> R16,R17
.even
0014 _eeprom_write_byte::
0014 .dbline -1
0014 .dbline 36
0014 ; }
0014 ; //============================================================
0014 ; //函 数:void eeprom_write_byte(unsigned long *addr, unsigned char val)
0014 ; //功 能:写入EE一个字节
0014 ; //入口参数:写入地址,写入数据
0014 ; //返 回 值:无
0014 ; //设 计 者:覃道堂
0014 ; //创作时间:2006-03-28
0014 ; //修改时间:
0014 ; //修改目的:
0014 ; //============================================================
0014 ; void eeprom_write_byte(unsigned int *addr, unsigned char val)
0014 ; {
0014 L6:
0014 .dbline 38
0014 L7:
0014 .dbline 38
0014 ; /* Wait for completion of previous write */
0014 ; while(EECR & (1<<EEWE));
0014 E199 sbic 0x1c,1
0016 FECF rjmp L6
0018 .dbline 40
0018 ; /* Set up address and Data Registers */
0018 ; EEAR = *addr;
0018 F801 movw R30,R16
001A 2080 ldd R2,z+0
001C 3180 ldd R3,z+1
001E 3FBA out 0x1f,R3
0020 2EBA out 0x1e,R2
0022 .dbline 41
0022 ; EEDR = val;
0022 2DBB out 0x1d,R18
0024 .dbline 43
0024 ; /* Write logical one to EEMWE */
0024 ; EECR |= (1<<EEMWE);
0024 E29A sbi 0x1c,2
0026 .dbline 45
0026 ; /* Start eeprom write by setting EEWE */
0026 ; EECR |= (1<<EEWE);
0026 E19A sbi 0x1c,1
0028 L9:
0028 .dbline 46
0028 L10:
0028 .dbline 46
0028 ; while(EECR & (1<<EEWE));
0028 E199 sbic 0x1c,1
002A FECF rjmp L9
002C .dbline -2
002C L5:
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r val 18 c
002E .dbsym r addr 16 pi
002E .dbend
002E .dbfunc e Write_EEPROM _Write_EEPROM fV
002E ; i -> R20
002E ; EE_START_ADR -> y+6
002E ; num_bytes -> R22
002E ; pBuffer -> R10,R11
.even
002E _Write_EEPROM::
002E 0E940000 xcall push_gset3
0032 622F mov R22,R18
0034 5801 movw R10,R16
0036 .dbline -1
0036 .dbline 60
0036 ; }
0036 ; /*****************************************************************************
0036 ; *
0036 ; * Function name : StoreEEPROM
0036 ; *
0036 ; * Returns : None
0036 ; *
0036 ; * Parameters : Pointer to string, number of bytes to write, adress in EEPROM
0036 ; *
0036 ; * Purpose : Write byte(s) to the EEPROM
0036 ; *
0036 ; *****************************************************************************/
0036 ; void Write_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
0036 ; {
0036 .dbline 62
0036 ; unsigned char i;
0036 ; for (i=0;i<num_bytes;i++)
0036 4427 clr R20
0038 0FC0 xjmp L16
003A L13:
003A .dbline 63
003A .dbline 64
003A E42F mov R30,R20
003C FF27 clr R31
003E EA0D add R30,R10
0040 FB1D adc R31,R11
0042 2081 ldd R18,z+0
0044 8E01 movw R16,R28
0046 0A5F subi R16,250 ; offset = 6
0048 1F4F sbci R17,255
004A E4DF xcall _eeprom_write_byte
004C .dbline 65
004C 8E81 ldd R24,y+6
004E 9F81 ldd R25,y+7
0050 0196 adiw R24,1
0052 9F83 std y+7,R25
0054 8E83 std y+6,R24
0056 .dbline 66
0056 L14:
0056 .dbline 62
0056 4395 inc R20
0058 L16:
0058 .dbline 62
0058 4617 cp R20,R22
005A 78F3 brlo L13
005C .dbline -2
005C L12:
005C 0E940000 xcall pop_gset3
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r i 20 c
0062 .dbsym l EE_START_ADR 6 i
0062 .dbsym r num_bytes 22 c
0062 .dbsym r pBuffer 10 pc
0062 .dbend
0062 .dbfunc e Read_EEPROM _Read_EEPROM fV
0062 ; i -> R20
0062 ; EE_START_ADR -> y+6
0062 ; num_bytes -> R22
0062 ; pBuffer -> R10,R11
.even
0062 _Read_EEPROM::
0062 0E940000 xcall push_gset3
0066 622F mov R22,R18
0068 5801 movw R10,R16
006A .dbline -1
006A .dbline 83
006A ; {
006A ; eeprom_write_byte(&EE_START_ADR, pBuffer[i]);
006A ; EE_START_ADR++;
006A ; }
006A ; }
006A ;
006A ;
006A ; /*****************************************************************************
006A ; *
006A ; * Function name : ReadEEPROM
006A ; *
006A ; * Returns : None
006A ; *
006A ; * Parameters : Pointer to string, number of bytes to read, adress in EEPROM
006A ; *
006A ; * Purpose : Write byte(s) to the EEPROM
006A ; *
006A ; *****************************************************************************/
006A ;
006A ; void Read_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
006A ; {
006A .dbline 86
006A ; unsigned char i;
006A ;
006A ; for (i=0;i<num_bytes;i++)
006A 4427 clr R20
006C 0FC0 xjmp L21
006E L18:
006E .dbline 87
006E .dbline 88
006E 8E01 movw R16,R28
0070 0A5F subi R16,250 ; offset = 6
0072 1F4F sbci R17,255
0074 C5DF xcall _eeprom_read_byte
0076 E42F mov R30,R20
0078 FF27 clr R31
007A EA0D add R30,R10
007C FB1D adc R31,R11
007E 0083 std z+0,R16
0080 .dbline 89
0080 8E81 ldd R24,y+6
0082 9F81 ldd R25,y+7
0084 0196 adiw R24,1
0086 9F83 std y+7,R25
0088 8E83 std y+6,R24
008A .dbline 90
008A L19:
008A .dbline 86
008A 4395 inc R20
008C L21:
008C .dbline 86
008C 4617 cp R20,R22
008E 78F3 brlo L18
0090 .dbline -2
0090 L17:
0090 0E940000 xcall pop_gset3
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbsym r i 20 c
0096 .dbsym l EE_START_ADR 6 i
0096 .dbsym r num_bytes 22 c
0096 .dbsym r pBuffer 10 pc
0096 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -