📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\zhuji\桌面\AVR_BO~1.2\main.c
0000 .dbfunc e FlashLoad _FlashLoad fV
.even
0000 _FlashLoad::
0000 .dbline -1
0000 .dbline 63
0000 ; #include <macros.h>
0000 ; #include "assembly.h"
0000 ;
0000 ; #define ChipType Atmega16
0000 ;
0000 ; //*********************************************************
0000 ; //选择BOOT区大小 此必须与ICC options中的选项相对应
0000 ; //#define BootSize 'a' //128
0000 ; //#define BootSize 'b' //256
0000 ; //#define BootSize 'c' //512
0000 ; #define BootSize 'd' //1024
0000 ; //选择BootLoad版本号
0000 ; #define BootVer 'f' //1.0版本
0000 ;
0000 ; //**********************************************************
0000 ;
0000 ; #define Atmega16 0x31
0000 ;
0000 ; //*****************************************************************************
0000 ; #define InteClk //是否使用内部时钟
0000 ; #define OscAddress 0x1fff //时钟校准值存储地址
0000 ;
0000 ; //*****************************************************************************
0000 ; //7.3728M时钟下的波特率为19200的设置,此设置可根据ICC生成,选对芯片,时钟,波特率既可
0000 ; //由此语句调用UBRR = BAU;
0000 ; #define BAU 23 // 7.3728M 19200
0000 ; //#define BAU 191 // 7.3728M 2400
0000 ; //#define BAU 95 // 7.3728M 4800
0000 ; //#define BAU 47 // 7.3728M 9600
0000 ; //#define BAU 31 // 7.3728M 14400
0000 ; //#define BAU 23 // 7.3728M 19200
0000 ; //#define BAU 15 // 7.3728M 28800
0000 ;
0000 ; //#define BAU 38 // 12M 19200
0000 ;
0000 ; //*****************************************************************************
0000 ;
0000 ; #include <iom16v.h>
0000 ; #define PageByte 128
0000 ; #define AddressShift 7
0000 ; #define INTVECREG GICR
0000 ;
0000 ;
0000 ; void FlashLoad (void);
0000 ; void GetPageNumber (void);
0000 ; void ExecCode (void);
0000 ; char GetPage (void);
0000 ; void WriteFlash (void);
0000 ; char CheckFlash (void);
0000 ; unsigned char IsChar (void);
0000 ; void SendChar (unsigned char c);
0000 ; void delay (void); //1ms延时函数
0000 ; unsigned char RecChar (void);
0000 ;
0000 ; unsigned char PageBuffer[PageByte];
0000 ; unsigned int RealPageAddress;
0000 ; unsigned int PageAddress;
0000 ;
0000 ; /*****************************************************************************/
0000 ; //Flash编程
0000 ; /*****************************************************************************/
0000 ; void FlashLoad(void)
0000 ; {
0000 .dbline 64
0000 ; SendChar('!');
0000 01E2 ldi R16,33
0002 D8D0 rcall _SendChar
0004 19C0 rjmp L3
0006 L2:
0006 .dbline 66
0006 ; while (1)
0006 ; {
0006 .dbline 67
0006 ; GetPageNumber();
0006 1AD0 rcall _GetPageNumber
0008 .dbline 69
0008 ;
0008 ; if (RealPageAddress == 0xffff)
0008 80910200 lds R24,_RealPageAddress
000C 90910300 lds R25,_RealPageAddress+1
0010 8F3F cpi R24,255
0012 EFEF ldi R30,255
0014 9E07 cpc R25,R30
0016 09F4 brne L5
0018 .dbline 70
0018 ; return;
0018 10C0 rjmp L1
001A L5:
001A .dbline 72
001A ;
001A ; if (GetPage())
001A 26D0 rcall _GetPage
001C 0023 tst R16
001E 51F0 breq L7
0020 .dbline 73
0020 ; {
0020 .dbline 74
0020 ; WriteFlash();
0020 5DD0 rcall _WriteFlash
0022 .dbline 75
0022 ; if (CheckFlash())
0022 8DD0 rcall _CheckFlash
0024 0023 tst R16
0026 19F0 breq L9
0028 .dbline 76
0028 ; SendChar('!');
0028 01E2 ldi R16,33
002A C4D0 rcall _SendChar
002C 05C0 rjmp L8
002E L9:
002E .dbline 78
002E ; else
002E ; SendChar('@');
002E 00E4 ldi R16,64
0030 C1D0 rcall _SendChar
0032 .dbline 79
0032 ; }
0032 02C0 rjmp L8
0034 L7:
0034 .dbline 81
0034 ; else
0034 ; SendChar('@');
0034 00E4 ldi R16,64
0036 BED0 rcall _SendChar
0038 L8:
0038 .dbline 82
0038 L3:
0038 .dbline 65
0038 E6CF rjmp L2
003A X0:
003A .dbline -2
003A .dbline 83
003A ; }
003A ; }
003A L1:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e GetPageNumber _GetPageNumber fV
003C ; PageAddressL -> R20
003C ; PageAddressH -> R22
.even
003C _GetPageNumber::
003C 00D0 rcall push_gset2
003E .dbline -1
003E .dbline 87
003E ;
003E ; /*****************************************************************************/
003E ; void GetPageNumber(void)
003E ; {
003E .dbline 91
003E ; unsigned char PageAddressH;
003E ; unsigned char PageAddressL;
003E ;
003E ; PageAddressH = RecChar();
003E B6D0 rcall _RecChar
0040 602F mov R22,R16
0042 .dbline 93
0042 ;
0042 ; PageAddressL = RecChar();
0042 B4D0 rcall _RecChar
0044 402F mov R20,R16
0046 .dbline 95
0046 ;
0046 ; RealPageAddress=(int)((PageAddressH << 8) + PageAddressL);
0046 362E mov R3,R22
0048 242E mov R2,R20
004A 30920300 sts _RealPageAddress+1,R3
004E 20920200 sts _RealPageAddress,R2
0052 .dbline 96
0052 ; PageAddress=RealPageAddress<<AddressShift;
0052 27E0 ldi R18,7
0054 30E0 ldi R19,0
0056 022D mov R16,R2
0058 132D mov R17,R3
005A 00D0 rcall lsl16
005C 10930100 sts _PageAddress+1,R17
0060 00930000 sts _PageAddress,R16
0064 .dbline -2
0064 .dbline 103
0064 ; #ifdef RAMPZ_FLAG
0064 ; if (PageAddressH)
0064 ; RAMPZ = 1;
0064 ; else
0064 ; RAMPZ = 0;
0064 ; #endif
0064 ; }
0064 L11:
0064 00D0 rcall pop_gset2
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbsym r PageAddressL 20 c
0068 .dbsym r PageAddressH 22 c
0068 .dbend
0068 .dbfunc e GetPage _GetPage fc
0068 ; CheckSum -> R20
0068 ; LocalCheckSum -> R22
0068 ; i -> R10
.even
0068 _GetPage::
0068 00D0 rcall push_gset3
006A .dbline -1
006A .dbline 107
006A ;
006A ; /*****************************************************************************/
006A ; char GetPage(void)
006A ; {
006A .dbline 109
006A ; unsigned char i;
006A ; unsigned char LocalCheckSum = 0;
006A 6627 clr R22
006C .dbline 110
006C ; unsigned char CheckSum = 0;
006C 4427 clr R20
006E .dbline 112
006E ;
006E ; for (i=0;i<PageByte/2;i++)
006E AA24 clr R10
0070 12C0 rjmp L16
0072 X1:
0072 .dbline 113
0072 ; {
0072 L17:
0072 .dbline 114
0072 L18:
0072 .dbline 114
0072 96D0 rcall _IsChar
0074 0023 tst R16
0076 E9F3 breq L17
0078 .dbline 115
0078 99D0 rcall _RecChar
007A 80E0 ldi R24,<_PageBuffer
007C 90E0 ldi R25,>_PageBuffer
007E EA2D mov R30,R10
0080 FF27 clr R31
0082 E80F add R30,R24
0084 F91F adc R31,R25
0086 0083 std z+0,R16
0088 .dbline 116
0088 EA2D mov R30,R10
008A FF27 clr R31
008C E80F add R30,R24
008E F91F adc R31,R25
0090 2080 ldd R2,z+0
0092 6225 eor R22,R2
0094 .dbline 117
0094 L14:
0094 .dbline 112
0094 A394 inc R10
0096 L16:
0096 .dbline 112
0096 8A2D mov R24,R10
0098 8034 cpi R24,64
009A 58F3 brlo L18
009C .dbline 118
009C ; while(!IsChar());
009C ; PageBuffer[i]=RecChar();
009C ; LocalCheckSum ^= PageBuffer[i];
009C ; }
009C ; for (i=0;i<PageByte/2;i++)
009C AA24 clr R10
009E 12C0 rjmp L23
00A0 X2:
00A0 .dbline 119
00A0 ; {
00A0 L24:
00A0 .dbline 120
00A0 L25:
00A0 .dbline 120
00A0 7FD0 rcall _IsChar
00A2 0023 tst R16
00A4 E9F3 breq L24
00A6 .dbline 121
00A6 82D0 rcall _RecChar
00A8 80E0 ldi R24,<_PageBuffer+64
00AA 90E0 ldi R25,>_PageBuffer+64
00AC EA2D mov R30,R10
00AE FF27 clr R31
00B0 E80F add R30,R24
00B2 F91F adc R31,R25
00B4 0083 std z+0,R16
00B6 .dbline 122
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -