📄 eeprom.lst
字号:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E007A CALL _main
_exit:
004A CFFF RJMP _exit
_delay_ms:
i --> R20
time --> R16
004B 940E00A4 CALL push_gset1
FILE: D:\AVR\我的程序\EEPROM读写实验\cfg.h
(0001) /*******************************
(0002) *程序名称:功能函数集
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-22
(0005) ********************************/
(0006) #include <iom16v.h>
(0007)
(0008)
(0009) /*延时子程序*/
(0010) void delay_ms(int time)
(0011) {
(0012) int i;
(0013) for(;time>0;time--)
004D C00A RJMP 0x0058
(0014) for(i=0;i<1000;i++);
004E 2744 CLR R20
004F 2755 CLR R21
0050 5F4F SUBI R20,0xFF
0051 4F5F SBCI R21,0xFF
0052 3E48 CPI R20,0xE8
0053 E0E3 LDI R30,3
0054 075E CPC R21,R30
0055 F3D4 BLT 0x0050
0056 5001 SUBI R16,1
0057 4010 SBCI R17,0
0058 2422 CLR R2
0059 2433 CLR R3
005A 1620 CP R2,R16
005B 0631 CPC R3,R17
005C F38C BLT 0x004E
005D 940E00A7 CALL pop_gset1
005F 9508 RET
(0015) }
(0016)
(0017) /*串口初始化*/
(0018) void uart_init()
(0019) {
(0020) UCSRA=0x02; //异步正常模式
_uart_init:
0060 E082 LDI R24,2
0061 B98B OUT 0x0B,R24
(0021) UCSRB=0x18; //允许发送接受中断和使能
0062 E188 LDI R24,0x18
0063 B98A OUT 0x0A,R24
(0022) UCSRC=0x06; //8位数据
0064 E086 LDI R24,6
0065 BD80 OUT 0x20,R24
(0023) UBRRH=0x00;
0066 2422 CLR R2
0067 BC20 OUT 0x20,R2
(0024) UBRRL=12; //波特率位9600
0068 E08C LDI R24,0xC
0069 B989 OUT 0x09,R24
006A 9508 RET
(0025) }
(0026)
(0027) /*EEPROM写子入程序*/
(0028) void EEPROM_write(unsigned int Address, unsigned char Data)
(0029) {
(0030) while(EECR & (1<<EEWE)); /* 等待上一次写操作结束 */
_EEPROM_write:
Data --> R18
Address --> R16
006B 99E1 SBIC 0x1C,1
006C CFFE RJMP _EEPROM_write
(0031) EEAR = Address; /* 设置地址和数据寄存器*/
006D BB1F OUT 0x1F,R17
006E BB0E OUT 0x1E,R16
(0032) EEDR = Data;
006F BB2D OUT 0x1D,R18
(0033)
(0034) EECR |= (1<<EEMWE); /* 置位EEMWE */
0070 9AE2 SBI 0x1C,2
(0035) EECR |= (1<<EEWE); /* 置位EEWE 以启动写操作*/
0071 9AE1 SBI 0x1C,1
0072 9508 RET
(0036) }
(0037)
(0038) /*从EEPROM中读取数据*/
(0039) unsigned char EEPROM_read(unsigned int Address)
(0040) {
(0041) while(EECR & (1<<EEWE)); /* 等待上一次写操作结束 */
_EEPROM_read:
Address --> R16
0073 99E1 SBIC 0x1C,1
0074 CFFE RJMP _EEPROM_read
(0042) EEAR = Address; /* 设置地址寄存器*/
0075 BB1F OUT 0x1F,R17
0076 BB0E OUT 0x1E,R16
(0043) EECR |= (1<<EERE); /* 设置EERE 以启动读操作*/
0077 9AE0 SBI 0x1C,0
(0044) return EEDR; /* 自数据寄存器返回数据 */
0078 B30D IN R16,0x1D
0079 9508 RET
FILE: D:\AVR\我的程序\EEPROM读写实验\main.c
(0001) /***********************************
(0002) *实验目的:熟悉EEPROM编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-22
(0005) ************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008)
(0009) void main()
(0010) {
(0011) unsigned char i;
(0012) uart_init();
_main:
i --> R20
007A DFE5 RCALL _uart_init
(0013) for(i=0;i<10;i++)
007B 2744 CLR R20
007C C007 RJMP 0x0084
(0014) EEPROM_write(0x01+i,i);
007D 2F24 MOV R18,R20
007E 2F04 MOV R16,R20
007F 2711 CLR R17
0080 5F0F SUBI R16,0xFF
0081 4F1F SBCI R17,0xFF
0082 DFE8 RCALL _EEPROM_write
0083 9543 INC R20
0084 304A CPI R20,0xA
0085 F3B8 BCS 0x007D
(0015) delay_ms(1000);
0086 EE08 LDI R16,0xE8
0087 E013 LDI R17,3
0088 DFC2 RCALL _delay_ms
0089 C010 RJMP 0x009A
(0016) while(1)
(0017) {
(0018) for(i=0;i<10;i++)
008A 2744 CLR R20
008B C00C RJMP 0x0098
(0019) {
(0020) while(!(UCSRA&(1<<UDRE))); //等待发送寄存器为空
008C 9B5D SBIS 0x0B,5
008D CFFE RJMP 0x008C
(0021) delay_ms(10);
008E E00A LDI R16,0xA
008F E010 LDI R17,0
0090 DFBA RCALL _delay_ms
(0022) UDR=EEPROM_read(0x01+i); //发送数据
FILE: <library>
0091 2F04 MOV R16,R20
0092 2711 CLR R17
0093 5F0F SUBI R16,0xFF
0094 4F1F SBCI R17,0xFF
0095 DFDD RCALL _EEPROM_read
0096 B90C OUT 0x0C,R16
0097 9543 INC R20
0098 304A CPI R20,0xA
0099 F390 BCS 0x008C
009A CFEF RJMP 0x008A
009B 9508 RET
push_gset5:
009C 92FA ST R15,-Y
009D 92EA ST R14,-Y
push_gset4:
009E 92DA ST R13,-Y
009F 92CA ST R12,-Y
push_gset3:
00A0 92BA ST R11,-Y
00A1 92AA ST R10,-Y
push_gset2:
00A2 937A ST R23,-Y
00A3 936A ST R22,-Y
push_gset1:
00A4 935A ST R21,-Y
00A5 934A ST R20,-Y
00A6 9508 RET
pop_gset1:
00A7 E0E1 LDI R30,1
pop:
00A8 9149 LD R20,Y+
00A9 9159 LD R21,Y+
00AA FDE0 SBRC R30,0
00AB 9508 RET
00AC 9169 LD R22,Y+
00AD 9179 LD R23,Y+
00AE FDE1 SBRC R30,1
00AF 9508 RET
00B0 90A9 LD R10,Y+
00B1 90B9 LD R11,Y+
00B2 FDE2 SBRC R30,2
00B3 9508 RET
00B4 90C9 LD R12,Y+
00B5 90D9 LD R13,Y+
00B6 FDE3 SBRC R30,3
00B7 9508 RET
00B8 90E9 LD R14,Y+
00B9 90F9 LD R15,Y+
00BA 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -