?? e2prom.lis
字號:
.module E2PROM.C
.area text(rom, con, rel)
0000 .dbfile D:\學(xué)習(xí)\AVRpro\Mega16程序\TestLCD\E2PROM.C
0000 .dbfunc e E2PROM_Write _E2PROM_Write fV
0000 ; i -> R10
0000 ; Cnt -> y+1
0000 ; Data -> R18,R19
0000 ; IAddress -> R16,R17
.even
0000 _E2PROM_Write::
0000 AA92 st -y,R10
0002 .dbline -1
0002 .dbline 17
0002 ; //******************************************************************************
0002 ; //MCU:ATMEL AVR MEGA16L ,晶振頻率:8MHz,頻率越高,播放Mp3越流暢
0002 ; //用到硬件器件: MEGA16L內(nèi)部的512B EEPROM
0002 ; //EEPROM用來保存基本的參數(shù),如:
0002 ; //音量(0)、重低音(1)、當(dāng)前歌曲(2,3)、遙控模式(4)
0002 ; //RECS80遙控按鍵(5-8,9-12,13-16,17-20).
0002 ; //RC5遙控按鍵(21-24,25-28,29-32,33-36).
0002 ; //制作人:平頂山工學(xué)院計算機(jī)系,郭猛
0002 ; //******************************************************************************
0002 ; # include "iom16v.h"
0002 ; # include "macros.h"
0002 ;
0002 ; //在E2PROM寫入指定長度的數(shù)據(jù)
0002 ; //IAddress:起始地址,*Data:要寫入的數(shù)據(jù)首地址,Cnt:要寫入的數(shù)據(jù)個數(shù)
0002 ; //函數(shù)無返回值
0002 ; void E2PROM_Write(unsigned int IAddress,unsigned char *Data,unsigned char Cnt)
0002 ; {
0002 .dbline 19
0002 ; unsigned char i;
0002 ; CLI(); //程序進(jìn)入臨界區(qū)
0002 F894 cli
0004 .dbline 20
0004 ; for(i=0;i<Cnt;i++)
0004 AA24 clr R10
0006 12C0 xjmp L5
0008 L6:
0008 .dbline 23
0008 ; {
0008 ; //等待前一次寫操作完畢
0008 ; while(EECR & BIT(EEWE)) ;
0008 L7:
0008 .dbline 23
0008 E199 sbic 0x1c,1
000A FECF rjmp L6
000C X0:
000C .dbline 24
000C ; EEAR = IAddress + i;
000C 2A2C mov R2,R10
000E 3324 clr R3
0010 2801 movw R4,R16
0012 420C add R4,R2
0014 531C adc R5,R3
0016 5FBA out 0x1f,R5
0018 4EBA out 0x1e,R4
001A .dbline 25
001A ; EEDR = Data[i];
001A E22D mov R30,R2
001C FF27 clr R31
001E E20F add R30,R18
0020 F31F adc R31,R19
0022 2080 ldd R2,z+0
0024 2DBA out 0x1d,R2
0026 .dbline 26
0026 ; EECR|= BIT(EEMWE);
0026 E29A sbi 0x1c,2
0028 .dbline 27
0028 ; ;;;; //等待4個周期
0028 .dbline 27
0028 .dbline 27
0028 .dbline 27
0028 .dbline 28
0028 ; EECR|= BIT(EEWE);
0028 E19A sbi 0x1c,1
002A .dbline 29
002A ; }
002A L3:
002A .dbline 20
002A A394 inc R10
002C L5:
002C .dbline 20
002C 0980 ldd R0,y+1
002E A014 cp R10,R0
0030 58F3 brlo L7
0032 X1:
0032 .dbline 30
0032 ; SEI(); //程序退出臨界區(qū)
0032 7894 sei
0034 .dbline -2
0034 L1:
0034 .dbline 0 ; func end
0034 A990 ld R10,y+
0036 0895 ret
0038 .dbsym r i 10 c
0038 .dbsym l Cnt 1 c
0038 .dbsym r Data 18 pc
0038 .dbsym r IAddress 16 i
0038 .dbend
0038 .dbfunc e E2PROM_Read_OneChar _E2PROM_Read_OneChar fc
0038 ; IAddress -> R16,R17
.even
0038 _E2PROM_Read_OneChar::
0038 .dbline -1
0038 .dbline 37
0038 ; }
0038 ;
0038 ; //在E2PROM寫入指定長度的數(shù)據(jù)
0038 ; //IAddress:起始地址,*Data:要寫入的數(shù)據(jù)首地址,Cnt:要寫入的數(shù)據(jù)個數(shù)
0038 ; //函數(shù)返回一個字節(jié)
0038 ; unsigned char E2PROM_Read_OneChar(unsigned int IAddress)
0038 ; {
0038 .dbline 38
0038 ; CLI(); //程序進(jìn)入臨界區(qū)
0038 F894 cli
003A L10:
003A .dbline 40
003A ; //等待前一次操作完畢
003A ; while(EECR & BIT(EEWE)) ;
003A L11:
003A .dbline 40
003A E199 sbic 0x1c,1
003C FECF rjmp L10
003E X2:
003E .dbline 41
003E ; EEAR = IAddress;
003E 1FBB out 0x1f,R17
0040 0EBB out 0x1e,R16
0042 .dbline 42
0042 ; EECR|= BIT(EERE);
0042 E09A sbi 0x1c,0
0044 .dbline 43
0044 ; ; //等待1個周期
0044 .dbline 44
0044 ; SEI(); //程序退出臨界區(qū)
0044 7894 sei
0046 .dbline 45
0046 ; return EEDR;
0046 0DB3 in R16,0x1d
0048 .dbline -2
0048 L9:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbsym r IAddress 16 i
004A .dbend
004A ; }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -