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

📄 自恢复程序.lst

📁 本程序用于ATmega8不小心写错熔丝
💻 LST
字号:
__text_start:
__start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	0x3D,R28
    0016 BFDE      OUT	0x3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	Y+0,R16
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E0      CPI	R30,0x60
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	Z+0,R16
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D04B      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: 自恢复程序.c
(0001) #include "iom8v.h"
(0002) #include "macros.h"
(0003) #include "stdio.h"
(0004) #define      FUSE_H   0xD9  
(0005) #define      FUSE_L   0xE1 
(0006) #define      ERASE_CHIP   0x80 
(0007) #define      WRITE_FUSE   0x40   
(0008) #define      READ_FUSE   0x04 
(0009) 
(0010) #define      LED_ON    PORTD|=BIT(PD0); 
(0011) #define      LED_OFF   PORTD&=~BIT(PD0);          
(0012) #define      OE         2  
(0013) #define      OE_H      PORTD|=BIT(PD2);  
(0014) #define      OE_L      PORTD&=~BIT(PD2); 
(0015) #define      WR         3  
(0016) #define      WR_H      PORTD|=BIT(PD3);  
(0017) #define      WR_L      PORTD&=~BIT(PD3); 
(0018) #define      BS1         4  
(0019) #define      BS1_H      PORTD|=BIT(PD4);  
(0020) #define      BS1_L      PORTD&=~BIT(PD4); 
(0021) #define      XA0         5  
(0022) #define      XA0_H      PORTD|=BIT(PD5);  
(0023) #define      XA0_L      PORTD&=~BIT(PD5); 
(0024) #define      XA1         6  
(0025) #define      XA1_H      PORTD|=BIT(PD6);   
(0026) #define      XA1_L      PORTD&=~BIT(PD6); 
(0027) #define      PAGEL      7  
(0028) #define      PAGEL_H      PORTD|=BIT(PD7); 
(0029) #define      PAGEL_L     PORTD&=~BIT(PD7);
(0030) 
(0031) #define      BS2         2   
(0032) #define      BS2_H      PORTC|=BIT(PC2);  
(0033) #define      BS2_L       PORTC&=~BIT(PC2); 
(0034) #define      XTAL1      3  
(0035) #define      XTAL1_H      PORTC|=BIT(PC3);  
(0036) #define      XTAL1_L      PORTC&=~BIT(PC3); 
(0037) #define      RDY         4  
(0038) #define      RESET      5  
(0039) #define      RESET_H     PORTC|=BIT(PC5);   
(0040) #define      RESET_L     PORTC&=~BIT(PC5);  
(0041) void delay()   
(0042) {
(0043) unsigned int a,b;
(0044) for(a=0;a<250;a++)
_delay:
  a                    --> R16
  b                    --> R18
    0033 2700      CLR	R16
    0034 2711      CLR	R17
    0035 C00B      RJMP	0x0041
(0045) for(b=0;b<350;b++)
    0036 2722      CLR	R18
    0037 2733      CLR	R19
    0038 C002      RJMP	0x003B
    0039 5F2F      SUBI	R18,0xFF
    003A 4F3F      SBCI	R19,0xFF
    003B 352E      CPI	R18,0x5E
    003C E0E1      LDI	R30,1
    003D 073E      CPC	R19,R30
    003E F3D0      BCS	0x0039
    003F 5F0F      SUBI	R16,0xFF
    0040 4F1F      SBCI	R17,0xFF
    0041 3F0A      CPI	R16,0xFA
    0042 E0E0      LDI	R30,0
    0043 071E      CPC	R17,R30
    0044 F388      BCS	0x0036
    0045 9508      RET
(0046) ;
(0047) }
(0048) void wait()  
(0049) {
(0050) unsigned char a,b;
(0051) for(a=0;a<10;a++)
_wait:
  a                    --> R16
  b                    --> R18
    0046 2700      CLR	R16
    0047 C006      RJMP	0x004E
(0052) for(b=0;b<10;b++)
    0048 2722      CLR	R18
    0049 C001      RJMP	0x004B
    004A 9523      INC	R18
    004B 302A      CPI	R18,0xA
    004C F3E8      BCS	0x004A
    004D 9503      INC	R16
    004E 300A      CPI	R16,0xA
    004F F3C0      BCS	0x0048
    0050 9508      RET
_set_data:
  data                 --> R20
    0051 D081      RCALL	push_gset1
    0052 2F40      MOV	R20,R16
(0053) ;
(0054) }
(0055) void set_data(char data)
(0056) {  
(0057) 
(0058)    XA1_L;  
    0053 9896      CBI	0x12,6
(0059)    XA0_H;  
    0054 9A95      SBI	0x12,5
(0060)    PORTB=data;
    0055 BB48      OUT	0x18,R20
(0061)    XTAL1_H;  
    0056 9AAB      SBI	0x15,3
(0062)    wait();  
    0057 DFEE      RCALL	_wait
(0063)    XTAL1_L;  
    0058 98AB      CBI	0x15,3
(0064)    wait();  
    0059 DFEC      RCALL	_wait
    005A D07B      RCALL	pop_gset1
    005B 9508      RET
(0065) }  
(0066) void write_puls()
(0067) {  
(0068)    WR_L;  
_write_puls:
    005C 9893      CBI	0x12,3
(0069)    wait();  
    005D DFE8      RCALL	_wait
(0070)    WR_H;  
    005E 9A93      SBI	0x12,3
(0071)    while((PINC&0x10)==0)
    005F 9B9C      SBIS	0x13,4
    0060 CFFE      RJMP	0x005F
(0072)    ;
(0073)  PORTB=0; 
    0061 2422      CLR	R2
    0062 BA28      OUT	0x18,R2
    0063 9508      RET
_set_command:
  com                  --> R20
    0064 D06E      RCALL	push_gset1
    0065 2F40      MOV	R20,R16
(0074) } 
(0075) void set_command(char com)
(0076) {  
(0077) 
(0078)    WR_H;  
    0066 9A93      SBI	0x12,3
(0079)    OE_H;  
    0067 9A92      SBI	0x12,2
(0080)    XA1_H;  
    0068 9A96      SBI	0x12,6
(0081)    XA0_L;  
    0069 9895      CBI	0x12,5
(0082)    BS1_L;  
    006A 9894      CBI	0x12,4
(0083)    BS2_L;  
    006B 98AA      CBI	0x15,2
(0084)   PORTB=com;
    006C BB48      OUT	0x18,R20
(0085)    XTAL1_H;  
    006D 9AAB      SBI	0x15,3
(0086)    wait();  
    006E DFD7      RCALL	_wait
(0087)    XTAL1_L;  
    006F 98AB      CBI	0x15,3
(0088)    wait();  
    0070 DFD5      RCALL	_wait
    0071 D064      RCALL	pop_gset1
    0072 9508      RET
_read_data:
  data                 --> R20
    0073 D05F      RCALL	push_gset1
(0089) }  
(0090) char read_data()
(0091) {  
(0092)    char   data;  
(0093)   DDRB=0x00; 
    0074 2422      CLR	R2
    0075 BA27      OUT	0x17,R2
(0094)    OE_L;  
    0076 9892      CBI	0x12,2
(0095)    wait();  
    0077 DFCE      RCALL	_wait
(0096)    data=PINB; 
    0078 B346      IN	R20,0x16
(0097)    OE_H;  
    0079 9A92      SBI	0x12,2
(0098)    return data;  
    007A 2F04      MOV	R16,R20
    007B D05A      RCALL	pop_gset1
    007C 9508      RET
(0099) }  
(0100) void main() 
(0101) {  
(0102) char i=0,j=0,k=0;
_main:
  p                    --> R10
  k                    --> R10
  i                    --> R22
  j                    --> R20
    007D 2766      CLR	R22
    007E 2744      CLR	R20
    007F 24AA      CLR	R10
(0103) char p=0;
(0104) 
(0105) DDRD=0x01;
    0080 E081      LDI	R24,1
    0081 BB81      OUT	0x11,R24
(0106) DDRC=0xef; 
    0082 EE8F      LDI	R24,0xEF
    0083 BB84      OUT	0x14,R24
(0107) delay();
    0084 DFAE      RCALL	_delay
(0108) delay();
    0085 DFAD      RCALL	_delay
(0109) delay();
    0086 DFAC      RCALL	_delay
(0110) LED_ON;
    0087 9A90      SBI	0x12,0
(0111) delay();
    0088 DFAA      RCALL	_delay
(0112) LED_OFF;
    0089 9890      CBI	0x12,0
(0113) RESET_L;  
    008A 98AD      CBI	0x15,5
(0114)    for (i=0; i < 10; i++)
    008B C004      RJMP	0x0090
(0115)    {  
(0116)       XTAL1_H;  
    008C 9AAB      SBI	0x15,3
(0117)       wait(); 
    008D DFB8      RCALL	_wait
(0118)       XTAL1_L;  
    008E 98AB      CBI	0x15,3
    008F 9563      INC	R22
    0090 306A      CPI	R22,0xA
    0091 F3D0      BCS	0x008C
(0119)    } 
(0120)    DDRC=0xef; 
    0092 EE8F      LDI	R24,0xEF
    0093 BB84      OUT	0x14,R24
(0121)    DDRB=0xff;
    0094 EF8F      LDI	R24,0xFF
    0095 BB87      OUT	0x17,R24
(0122)    DDRD=0xff;
    0096 BB81      OUT	0x11,R24
(0123)    OE_L;  
    0097 9892      CBI	0x12,2
(0124)    WR_L;  
    0098 9893      CBI	0x12,3
(0125)    BS1_L;  
    0099 9894      CBI	0x12,4
(0126)    XA0_L;  
    009A 9895      CBI	0x12,5
(0127)    XA1_L;  
    009B 9896      CBI	0x12,6
(0128)    PAGEL_L;  
    009C 9897      CBI	0x12,7
(0129)    BS2_L;  
    009D 98AA      CBI	0x15,2
(0130)    XTAL1_L;     
    009E 98AB      CBI	0x15,3
(0131) delay();
    009F DF93      RCALL	_delay
(0132)  XTAL1_H;  
    00A0 9AAB      SBI	0x15,3
(0133)       wait(); 
    00A1 DFA4      RCALL	_wait
(0134)       XTAL1_L;
    00A2 98AB      CBI	0x15,3
(0135)  RESET_H;  
    00A3 9AAD      SBI	0x15,5
(0136) delay();
    00A4 DF8E      RCALL	_delay
(0137) set_command(ERASE_CHIP);  
    00A5 E800      LDI	R16,0x80
    00A6 DFBD      RCALL	_set_command
(0138)    write_puls();  
    00A7 DFB4      RCALL	_write_puls
(0139)     set_command(ERASE_CHIP);  
    00A8 E800      LDI	R16,0x80
    00A9 DFBA      RCALL	_set_command
(0140)    write_puls();  
    00AA DFB1      RCALL	_write_puls
(0141)    wait();  
    00AB DF9A      RCALL	_wait
(0142)    wait();  
    00AC DF99      RCALL	_wait
(0143)    for (j = 0; j < 8; j++)
    00AD 2744      CLR	R20
    00AE C00A      RJMP	0x00B9
(0144)    {  
(0145)       set_command(WRITE_FUSE);  
    00AF E400      LDI	R16,0x40
    00B0 DFB3      RCALL	_set_command
(0146)       set_data(FUSE_L);  
    00B1 EE01      LDI	R16,0xE1
    00B2 DF9E      RCALL	_set_data
(0147) 
(0148)       BS1_L;  
    00B3 9894      CBI	0x12,4
(0149)       BS2_L;  
    00B4 98AA      CBI	0x15,2
(0150)       write_puls();  
    00B5 DFA6      RCALL	_write_puls
(0151)       wait();  
    00B6 DF8F      RCALL	_wait
(0152)       wait(); 
    00B7 DF8E      RCALL	_wait
    00B8 9543      INC	R20
    00B9 3048      CPI	R20,0x8
    00BA F3A0      BCS	0x00AF
(0153)    }  
(0154)     for (j = 0; j < 8; j++)
    00BB 2744      CLR	R20
    00BC C00A      RJMP	0x00C7
(0155) 	{  
(0156) 
(0157)       set_command(WRITE_FUSE);  
    00BD E400      LDI	R16,0x40
    00BE DFA5      RCALL	_set_command
(0158)       set_data(FUSE_H);  
    00BF ED09      LDI	R16,0xD9
    00C0 DF90      RCALL	_set_data
(0159) 
(0160)       BS1_H;  
    00C1 9A94      SBI	0x12,4
(0161)       BS2_L;  
    00C2 98AA      CBI	0x15,2
(0162)       write_puls();  
    00C3 DF98      RCALL	_write_puls
(0163) 
(0164)       wait();  
    00C4 DF81      RCALL	_wait
(0165)       wait();  
    00C5 DF80      RCALL	_wait
    00C6 9543      INC	R20
    00C7 3048      CPI	R20,0x8
    00C8 F3A0      BCS	0x00BD
(0166)    }  
(0167) 
(0168) 
(0169) LED_ON;
FILE: <library>
    00C9 9A90      SBI	0x12,0
    00CA 9508      RET
push_gset5:
    00CB 92FA      ST	R15,-Y
    00CC 92EA      ST	R14,-Y
push_gset4:
    00CD 92DA      ST	R13,-Y
    00CE 92CA      ST	R12,-Y
push_gset3:
    00CF 92BA      ST	R11,-Y
    00D0 92AA      ST	R10,-Y
push_gset2:
    00D1 937A      ST	R23,-Y
    00D2 936A      ST	R22,-Y
push_gset1:
    00D3 935A      ST	R21,-Y
    00D4 934A      ST	R20,-Y
    00D5 9508      RET
pop_gset1:
    00D6 E0E1      LDI	R30,1
pop:
    00D7 9149      LD	R20,Y+
    00D8 9159      LD	R21,Y+
    00D9 FDE0      SBRC	R30,0
    00DA 9508      RET
    00DB 9169      LD	R22,Y+
    00DC 9179      LD	R23,Y+
    00DD FDE1      SBRC	R30,1
    00DE 9508      RET
    00DF 90A9      LD	R10,Y+
    00E0 90B9      LD	R11,Y+
    00E1 FDE2      SBRC	R30,2
    00E2 9508      RET
    00E3 90C9      LD	R12,Y+
    00E4 90D9      LD	R13,Y+
    00E5 FDE3      SBRC	R30,3
    00E6 9508      RET
    00E7 90E9      LD	R14,Y+
    00E8 90F9      LD	R15,Y+
    00E9 9508      RET

⌨️ 快捷键说明

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