📄 eeprom_ex.lis
字号:
.module eeprom_ex.c
.area text(rom, con, rel)
; addr -> R1
; wWord -> R0,R1
.even
0000 _eep_write_word::
0000 ; /****************************************Copyright (c)**************************************************
0000 ; ** 技 术 有 限 公 司
0000 ; **
0000 ; ** 文 件 名 : eeprom_ex.c
0000 ; ** 最后修改日期 : 2006-2-24
0000 ; ** 描 述 : EEPROM_EX扩展读写函数
0000 ; ** 版 本 : V1.0
0000 ; ** 作 者 :chengs
0000 ; ** 主控芯片型号 : ATmega
0000 ; ** 集成开发环境 : ICCAVR 6.31A
0000 ; **********************************************************************************************************/
0000 ; #include <macros.h>
0000 ; #include <iom16v.h>
0000 ; #include "eeprom.h"
0000 ;
0000 ;
0000 ;
0000 ; /**********************************************************************
0000 ; functionName:void write_eeprom_word(unsigned int wWord,unsigned char addr)
0000 ; description:写EEPROM函数,每个地址存16位数据
0000 ; 高位存在高地址,低位存在低地址
0000 ; **********************************************************************/
0000 ; void eep_write_word(unsigned int wWord,unsigned char addr)
0000 ; {
0000 ; ;
0000 L1:
0000 .dbline 0 ; func end
0000 0895 ret
0002 ; addr -> R16
.even
0002 _eep_read_word::
0002 ; }
0002 ;
0002 ; /**********************************************************************
0002 ; functionName:unsigned int read_eeprom_word(unsigned char addr)
0002 ; description:读EEPROM函数,返回16位数据
0002 ; **********************************************************************/
0002 ; unsigned int eep_read_word(unsigned char addr)
0002 ; {
0002 ; return 0;
0002 0027 clr R16
0004 1127 clr R17
0006 L2:
0006 .dbline 0 ; func end
0006 0895 ret
0008 ; i -> R20
0008 ; byte_num -> R22
0008 ; s -> R18,R19
0008 ; start_add -> R16,R17
.even
0008 _eep_write_block::
0008 0E940000 xcall push_gset2
000C 6C81 ldd R22,y+4
000E ; }
000E ;
000E ; /**********************************************************************
000E ; functionName:void write_eep_block(unsinged char start_add,unsinged char *s,unsinged char byte_num)
000E ; description:从地址start_add开始连续写byte_num字节,内容为*s指向的内容
000E ; **********************************************************************/
000E ; void eep_write_block(unsigned int start_add,unsigned char *s,unsigned char byte_num)
000E ; {
000E ; unsigned char i;
000E ; for(i=0;i<byte_num;i++)
000E 4427 clr R20
0010 03C0 xjmp L7
0012 L4:
0012 2F5F subi R18,255 ; offset = 1
0014 3F4F sbci R19,255
0016 L5:
0016 4395 inc R20
0018 L7:
0018 4617 cp R20,R22
001A D8F3 brlo L4
001C L3:
001C 0E940000 xcall pop_gset2
0020 .dbline 0 ; func end
0020 0895 ret
0022 ; i -> R20
0022 ; byte_num -> R22
0022 ; s -> R18,R19
0022 ; start_add -> R16,R17
.even
0022 _eep_read_block::
0022 0E940000 xcall push_gset2
0026 6C81 ldd R22,y+4
0028 ; {
0028 ; //write_eeprom_byte(*s,start_add+i);
0028 ; s++;
0028 ; }
0028 ; }
0028 ;
0028 ; /**********************************************************************
0028 ; functionName:void read_eep_block(unsinged int start_add,unsigned *s,unsigned char byte_num);
0028 ; description:从地址start_add开始连续读byte_num字节,内容在*s指向的内容
0028 ; **********************************************************************/
0028 ; void eep_read_block(unsigned int start_add,unsigned *s,unsigned char byte_num)
0028 ; {
0028 ; unsigned char i;
0028 ; for(i=0;i<byte_num;i++)
0028 4427 clr R20
002A 03C0 xjmp L12
002C L9:
002C 2E5F subi R18,254 ; offset = 2
002E 3F4F sbci R19,255
0030 L10:
0030 4395 inc R20
0032 L12:
0032 4617 cp R20,R22
0034 D8F3 brlo L9
0036 L8:
0036 0E940000 xcall pop_gset2
003A .dbline 0 ; func end
003A 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -