eeprom_ex.s

来自「AVRMega16单片机的项目」· S 代码 · 共 120 行

S
120
字号
	.module eeprom_ex.c
	.area text(rom, con, rel)
;           addr -> R1
;          wWord -> R0,R1
	.even
_eep_write_word::
; /****************************************Copyright (c)**************************************************
; **                               技 术 有 限 公 司
; **                                     
; ** 文   件   名	: eeprom_ex.c
; ** 最后修改日期	: 2006-2-24
; ** 描        述	: EEPROM_EX扩展读写函数
; ** 版	     本	: V1.0
; ** 作	     者	:chengs
; ** 主控芯片型号	: ATmega 		
; ** 集成开发环境	: ICCAVR 6.31A
; **********************************************************************************************************/
; #include <macros.h>
; #include <iom16v.h>
; #include "eeprom.h"
; 
; 
; 	
; /**********************************************************************
; functionName:void write_eeprom_word(unsigned int wWord,unsigned char addr)
; description:写EEPROM函数,每个地址存16位数据
; 高位存在高地址,低位存在低地址
; **********************************************************************/
; void eep_write_word(unsigned int wWord,unsigned char addr)
; {
; 	;
L1:
	.dbline 0 ; func end
	ret
;           addr -> R16
	.even
_eep_read_word::
; }
; 
; /**********************************************************************
; functionName:unsigned int read_eeprom_word(unsigned char addr)
; description:读EEPROM函数,返回16位数据
; **********************************************************************/
; unsigned int eep_read_word(unsigned char addr)
; {
; 	return 0;
	clr R16
	clr R17
L2:
	.dbline 0 ; func end
	ret
;              i -> R20
;       byte_num -> R22
;              s -> R18,R19
;      start_add -> R16,R17
	.even
_eep_write_block::
	xcall push_gset2
	ldd R22,y+4
; }
; 
; /**********************************************************************
; functionName:void write_eep_block(unsinged char start_add,unsinged char *s,unsinged char byte_num)
; description:从地址start_add开始连续写byte_num字节,内容为*s指向的内容
; **********************************************************************/
; void eep_write_block(unsigned int start_add,unsigned char *s,unsigned char byte_num)
; {
; 	unsigned char i;
; 	for(i=0;i<byte_num;i++)
	clr R20
	xjmp L7
L4:
	subi R18,255  ; offset = 1
	sbci R19,255
L5:
	inc R20
L7:
	cp R20,R22
	brlo L4
L3:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
;              i -> R20
;       byte_num -> R22
;              s -> R18,R19
;      start_add -> R16,R17
	.even
_eep_read_block::
	xcall push_gset2
	ldd R22,y+4
; 	{
; 		//write_eeprom_byte(*s,start_add+i);
; 		s++;	
; 	}
; }
; 
; /**********************************************************************
; functionName:void read_eep_block(unsinged int start_add,unsigned *s,unsigned char byte_num);
; description:从地址start_add开始连续读byte_num字节,内容在*s指向的内容
; **********************************************************************/
; void eep_read_block(unsigned int start_add,unsigned *s,unsigned char byte_num)
; {
; 	unsigned char i;
; 	for(i=0;i<byte_num;i++)
	clr R20
	xjmp L12
L9:
	subi R18,254  ; offset = 2
	sbci R19,255
L10:
	inc R20
L12:
	cp R20,R22
	brlo L9
L8:
	xcall pop_gset2
	.dbline 0 ; func end
	ret

⌨️ 快捷键说明

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