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

📄 e2prom.s

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 S
字号:
	.module E2PROM.C
	.area text(rom, con, rel)
	.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\E2PROM.C
	.dbfunc e E2PROM_Write _E2PROM_Write fV
;              i -> R10
;            Cnt -> y+1
;           Data -> R18,R19
;       IAddress -> R16,R17
	.even
_E2PROM_Write::
	st -y,R10
	.dbline -1
	.dbline 17
; //******************************************************************************
;  //MCU:ATMEL AVR MEGA16L ,晶振频率:8MHz,频率越高,播放Mp3越流畅
;  //用到硬件器件: MEGA16L内部的512B EEPROM
;  //EEPROM用来保存基本的参数,如:
;  //音量(0)、重低音(1)、当前歌曲(2,3)、遥控模式(4)
;  //RECS80遥控按键(5-8,9-12,13-16,17-20).
;  //RC5遥控按键(21-24,25-28,29-32,33-36).
;  //制作人:平顶山工学院计算机系,郭猛
; //******************************************************************************
; # include "iom16v.h"
; # include "macros.h"
; 
; //在E2PROM写入指定长度的数据
; //IAddress:起始地址,*Data:要写入的数据首地址,Cnt:要写入的数据个数
; //函数无返回值
; void E2PROM_Write(unsigned int IAddress,unsigned char *Data,unsigned char Cnt)
; {
	.dbline 19
;    unsigned char i;
;    CLI();	//程序进入临界区
	cli
	.dbline 20
;    for(i=0;i<Cnt;i++)
	clr R10
	xjmp L5
L6:
	.dbline 23
;    {
;    	   //等待前一次写操作完毕
;    	   while(EECR & BIT(EEWE)) ;
L7:
	.dbline 23
	sbic 0x1c,1
	rjmp L6
X0:
	.dbline 24
;    	   EEAR = IAddress + i;
	mov R2,R10
	clr R3
	movw R4,R16
	add R4,R2
	adc R5,R3
	out 0x1f,R5
	out 0x1e,R4
	.dbline 25
;    	   EEDR = Data[i];
	mov R30,R2
	clr R31
	add R30,R18
	adc R31,R19
	ldd R2,z+0
	out 0x1d,R2
	.dbline 26
; 	   EECR|= BIT(EEMWE);
	sbi 0x1c,2
	.dbline 27
; 	   ;;;;	  //等待4个周期
	.dbline 27
	.dbline 27
	.dbline 27
	.dbline 28
; 	   EECR|= BIT(EEWE);
	sbi 0x1c,1
	.dbline 29
;    } 
L3:
	.dbline 20
	inc R10
L5:
	.dbline 20
	ldd R0,y+1
	cp R10,R0
	brlo L7
X1:
	.dbline 30
;    SEI();	//程序退出临界区
	sei
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r i 10 c
	.dbsym l Cnt 1 c
	.dbsym r Data 18 pc
	.dbsym r IAddress 16 i
	.dbend
	.dbfunc e E2PROM_Read_OneChar _E2PROM_Read_OneChar fc
;       IAddress -> R16,R17
	.even
_E2PROM_Read_OneChar::
	.dbline -1
	.dbline 37
; }
; 
; //在E2PROM写入指定长度的数据
; //IAddress:起始地址,*Data:要写入的数据首地址,Cnt:要写入的数据个数
; //函数返回一个字节
; unsigned char E2PROM_Read_OneChar(unsigned int IAddress)
; {
	.dbline 38
;    CLI();	  //程序进入临界区
	cli
L10:
	.dbline 40
;    //等待前一次操作完毕
;    while(EECR & BIT(EEWE)) ;
L11:
	.dbline 40
	sbic 0x1c,1
	rjmp L10
X2:
	.dbline 41
;    EEAR = IAddress;
	out 0x1f,R17
	out 0x1e,R16
	.dbline 42
;    EECR|= BIT(EERE);
	sbi 0x1c,0
	.dbline 43
;    ;	  //等待1个周期
	.dbline 44
;    SEI(); 	 //程序退出临界区
	sei
	.dbline 45
;    return EEDR;
	in R16,0x1d
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbsym r IAddress 16 i
	.dbend
; }

⌨️ 快捷键说明

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