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

📄 eeprom.lst

📁 AVRkaifashili.rar
💻 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 + -