📄 自恢复程序.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 + -