📄 eeprom.lst
字号:
__start:
__text_start:
0019 E5CF LDI R28,0x5F
001A E0D2 LDI R29,2
001B BFCD OUT 0x3D,R28
001C BFDE OUT 0x3E,R29
001D 51C0 SUBI R28,0x10
001E 40D0 SBCI R29,0
001F EA0A LDI R16,0xAA
0020 8308 STD Y+0,R16
0021 2400 CLR R0
0022 E7E0 LDI R30,0x70
0023 E0F0 LDI R31,0
0024 E010 LDI R17,0
0025 37E4 CPI R30,0x74
0026 07F1 CPC R31,R17
0027 F011 BEQ 0x002A
0028 9201 ST R0,Z+
0029 CFFB RJMP 0x0025
002A 8300 STD Z+0,R16
002B E2E2 LDI R30,0x22
002C E0F0 LDI R31,0
002D E6A0 LDI R26,0x60
002E E0B0 LDI R27,0
002F E010 LDI R17,0
0030 33E2 CPI R30,0x32
0031 07F1 CPC R31,R17
0032 F021 BEQ 0x0037
0033 95C8 LPM
0034 9631 ADIW R30,1
0035 920D ST R0,X+
0036 CFF9 RJMP 0x0030
0037 D06C RCALL _main
_exit:
0038 CFFF RJMP _exit
_DelayMs:
j --> R20
i --> R16
0039 D098 RCALL push_gset1
FILE: J:\AVRpractice\BOOK\EEPROM\EEPROM时序\EEPROM.c
(0001) //***************FileName:Capature.C***************//
(0002) //***************ICCAVR V6.30编译*****************//
(0003)
(0004) #include <io8535v.h>
(0005) #define uchar unsigned char
(0006) #define uint unsigned int
(0007)
(0008) //数码管字型表,对应0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F//
(0009) uchar Table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0010) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0011) uchar Read_Data[4]; //定义读出数据
(0012)
(0013) void DelayMs(uint i) //Ms级延时,参数i为延时时间
(0014) {uint j;
(0015) for(;i!=0;i--)
003A C00A RJMP 0x0045
(0016) {for(j=8000;j!=0;j--) {;}}
003B E440 LDI R20,0x40
003C E15F LDI R21,0x1F
003D C002 RJMP 0x0040
003E 5041 SUBI R20,1
003F 4050 SBCI R21,0
0040 3040 CPI R20,0
0041 0745 CPC R20,R21
0042 F7D9 BNE 0x003E
0043 5001 SUBI R16,1
0044 4010 SBCI R17,0
0045 3000 CPI R16,0
0046 0701 CPC R16,R17
0047 F799 BNE 0x003B
(0017) }
0048 D08C RCALL pop_gset1
0049 9508 RET
_Display:
sel --> R20
i --> R22
p --> R10
004A D0A1 RCALL push_gset3
004B 2EA0 MOV R10,R16
004C 2EB1 MOV R11,R17
(0018)
(0019) void Display(uchar *p) //动态显示函数,参数p为待显示的数组名
(0020) {uchar i,sel=0x01;
004D E041 LDI R20,1
(0021) for(i=0;i<4;i++)
004E 2766 CLR R22
004F C017 RJMP 0x0067
(0022) {PORTA=sel; //选通最右边的数码管
0050 BB4B OUT 0x1B,R20
(0023) PORTC=0xff-Table[p[i]]; //送字型码
0051 2FE6 MOV R30,R22
0052 27FF CLR R31
0053 0DEA ADD R30,R10
0054 1DFB ADC R31,R11
0055 81E0 LDD R30,Z+0
0056 27FF CLR R31
0057 E680 LDI R24,0x60
0058 E090 LDI R25,0
0059 0FE8 ADD R30,R24
005A 1FF9 ADC R31,R25
005B 8020 LDD R2,Z+0
005C 2433 CLR R3
005D EF8F LDI R24,0xFF
005E E090 LDI R25,0
005F 1982 SUB R24,R2
0060 0993 SBC R25,R3
0061 BB85 OUT 0x15,R24
(0024) DelayMs(1); //显示延时
0062 E001 LDI R16,1
0063 E010 LDI R17,0
0064 DFD4 RCALL _DelayMs
(0025) sel=sel<<1; //移位以显示前一位
0065 0F44 LSL R20
0066 9563 INC R22
0067 3064 CPI R22,4
0068 F338 BCS 0x0050
(0026) }
(0027) }
0069 D066 RCALL pop_gset3
006A 9508 RET
(0028)
(0029) void Init_IO(void) //初始化I/O口
(0030) {DDRA=0xff; //设置A口为推挽1输出
_Init_IO:
006B EF8F LDI R24,0xFF
006C BB8A OUT 0x1A,R24
(0031) PORTA=0xff;
006D BB8B OUT 0x1B,R24
(0032) DDRC=0xff; //设置C口为推挽1输出
006E BB84 OUT 0x14,R24
(0033) PORTC=0xff;
006F BB85 OUT 0x15,R24
(0034) }
0070 9508 RET
_Write_EEPROM:
Address --> R22
Data --> R20
0071 D077 RCALL push_gset2
0072 2F62 MOV R22,R18
0073 2F73 MOV R23,R19
0074 2F40 MOV R20,R16
(0035)
(0036) void Write_EEPROM(uchar Data,uint Address)
(0037) {if(EECR&0x20) DelayMs(4);
0075 9BE5 SBIS 0x1C,5
0076 C003 RJMP 0x007A
0077 E004 LDI R16,4
0078 E010 LDI R17,0
0079 DFBF RCALL _DelayMs
(0038) EEARH=Address>>8;
007A 2E26 MOV R2,R22
007B 2E37 MOV R3,R23
007C 2C23 MOV R2,R3
007D 2433 CLR R3
007E BA2F OUT 0x1F,R2
(0039) EEARL=Address&0x00ff;
007F 2F86 MOV R24,R22
0080 2F97 MOV R25,R23
0081 7090 ANDI R25,0
0082 BB8E OUT 0x1E,R24
(0040) EEDR=Data;
0083 BB4D OUT 0x1D,R20
(0041) EECR=EECR|0x04;
0084 9AE2 SBI 0x1C,2
(0042) EECR=EECR|0x02;
0085 9AE1 SBI 0x1C,1
(0043) DelayMs(4);
0086 E004 LDI R16,4
0087 E010 LDI R17,0
0088 DFB0 RCALL _DelayMs
(0044) }
0089 D044 RCALL pop_gset2
008A 9508 RET
_Read_EEPROM:
i --> R20
Address --> R20
008B D046 RCALL push_gset1
008C 2F40 MOV R20,R16
008D 2F51 MOV R21,R17
(0045)
(0046) uchar Read_EEPROM(uint Address)
(0047) {uchar i;
(0048) if(EECR&0x01) DelayMs(4);
008E 9BE0 SBIS 0x1C,0
008F C003 RJMP 0x0093
0090 E004 LDI R16,4
0091 E010 LDI R17,0
0092 DFA6 RCALL _DelayMs
(0049) EEARH=Address>>8;
0093 2E24 MOV R2,R20
0094 2E35 MOV R3,R21
0095 2C23 MOV R2,R3
0096 2433 CLR R3
0097 BA2F OUT 0x1F,R2
(0050) EEARL=Address&0x00ff;
0098 2F84 MOV R24,R20
0099 2F95 MOV R25,R21
009A 7090 ANDI R25,0
009B BB8E OUT 0x1E,R24
(0051) EECR=EECR|0x01;
009C 9AE0 SBI 0x1C,0
(0052) DelayMs(5);
009D E005 LDI R16,5
009E E010 LDI R17,0
009F DF99 RCALL _DelayMs
(0053) i=EEDR;
00A0 B34D IN R20,0x1D
(0054) return(i);
00A1 2F04 MOV R16,R20
00A2 D032 RCALL pop_gset1
00A3 9508 RET
(0055) }
(0056)
(0057) void main(void)
(0058) {uchar i;
(0059) Init_IO(); //初始化I/O口
_main:
i --> R20
00A4 DFC6 RCALL _Init_IO
(0060) PORTA=0xff; //点亮以测试所有的数码管
00A5 EF8F LDI R24,0xFF
00A6 BB8B OUT 0x1B,R24
(0061) PORTC=0x00;
00A7 2422 CLR R2
00A8 BA25 OUT 0x15,R2
(0062) DelayMs(300); //延时
00A9 E20C LDI R16,0x2C
00AA E011 LDI R17,1
00AB DF8D RCALL _DelayMs
(0063) PORTC=0xff; //熄灭所有的数码管
00AC EF8F LDI R24,0xFF
00AD BB85 OUT 0x15,R24
(0064) for(i=0;i<4;i++)
00AE 2744 CLR R20
00AF C007 RJMP 0x00B7
(0065) Write_EEPROM(5*i,i);
00B0 2F24 MOV R18,R20
00B1 2733 CLR R19
00B2 E005 LDI R16,5
00B3 2F14 MOV R17,R20
00B4 D03A RCALL mpy8s
00B5 DFBB RCALL _Write_EEPROM
00B6 9543 INC R20
00B7 3044 CPI R20,4
00B8 F3B8 BCS 0x00B0
(0066) for(i=0;i<4;i++)
00B9 2744 CLR R20
00BA C00B RJMP 0x00C6
(0067) Read_Data[i]=Read_EEPROM(i);
00BB 2F04 MOV R16,R20
00BC 2711 CLR R17
00BD DFCD RCALL _Read_EEPROM
00BE E780 LDI R24,0x70
00BF E090 LDI R25,0
00C0 2FE4 MOV R30,R20
00C1 27FF CLR R31
00C2 0FE8 ADD R30,R24
00C3 1FF9 ADC R31,R25
00C4 8300 STD Z+0,R16
00C5 9543 INC R20
00C6 3044 CPI R20,4
00C7 F398 BCS 0x00BB
00C8 C003 RJMP 0x00CC
(0068) while(1)
(0069) Display(Read_Data);
00C9 E700 LDI R16,0x70
00CA E010 LDI R17,0
00CB DF7E RCALL _Display
00CC CFFC RJMP 0x00C9
(0070) }
FILE: <library>
00CD 9508 RET
pop_gset2:
00CE E0E2 LDI R30,2
00CF C006 RJMP pop
pop_gset3:
00D0 E0E4 LDI R30,4
00D1 C004 RJMP pop
push_gset1:
00D2 935A ST R21,-Y
00D3 934A ST R20,-Y
00D4 9508 RET
pop_gset1:
00D5 E0E1 LDI R30,1
pop:
00D6 9149 LD R20,Y+
00D7 9159 LD R21,Y+
00D8 FDE0 SBRC R30,0
00D9 9508 RET
00DA 9169 LD R22,Y+
00DB 9179 LD R23,Y+
00DC FDE1 SBRC R30,1
00DD 9508 RET
00DE 90A9 LD R10,Y+
00DF 90B9 LD R11,Y+
00E0 FDE2 SBRC R30,2
00E1 9508 RET
00E2 90C9 LD R12,Y+
00E3 90D9 LD R13,Y+
00E4 FDE3 SBRC R30,3
00E5 9508 RET
00E6 90E9 LD R14,Y+
00E7 90F9 LD R15,Y+
00E8 9508 RET
push_gset2:
00E9 937A ST R23,-Y
00EA 936A ST R22,-Y
00EB CFE6 RJMP push_gset1
push_gset3:
00EC 92BA ST R11,-Y
00ED 92AA ST R10,-Y
00EE CFFA RJMP push_gset2
mpy8s:
00EF 920A ST R0,-Y
00F0 2400 CLR R0
00F1 2300 TST R16
00F2 F029 BEQ 0x00F8
00F3 9506 LSR R16
00F4 F408 BCC 0x00F6
00F5 0E01 ADD R0,R17
00F6 0F11 LSL R17
00F7 CFF9 RJMP 0x00F1
00F8 2D00 MOV R16,R0
00F9 9009 LD R0,Y+
00FA 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -