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

📄 eeprom128.lis

📁 AVR16源代码 ICC编译器
💻 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 + -