📄 main.lis
字号:
0000 ; #if (MEGATYPE == 8535)
0000 ; #include "iom8515v.h"
0000 ; #define DeviceID Mega8535
0000 ; #define FlashSize Flash8k
0000 ; #define PageSize Page64
0000 ; #define EEpromSize EEprom512
0000 ; #define PageByte 64
0000 ; #define NSHIFTPAGE 6
0000 ; #define INTVECREG GICR
0000 ; #define PULLUPPORT PORTD
0000 ; #define PULLUPPIN 0x01
0000 ; #endif
0000 ;
0000 ; #if (MEGATYPE == 2313)
0000 ; #include "iot2313v.h"
0000 ; #define DeviceID Tiny2313
0000 ; #define FlashSize Flash2k
0000 ; #define PageSize Page32
0000 ; #define EEpromSize EEprom128
0000 ; #define PageByte 32
0000 ; #define NSHIFTPAGE 5
0000 ; #define PULLUPPORT PORTD
0000 ; #define PULLUPPIN 0x01
0000 ; #endif
0000 ;
0000 ; #ifndef UDR
0000 ; #if (UART == 0)
0000 ; #define UCSRA UCSR0A
0000 ; #define UCSRB UCSR0B
0000 ; #define UCSRC UCSR0C
0000 ; #define UBRRL UBRR0L
0000 ; #define UBRRH UBRR0H
0000 ; #define UDR UDR0
0000 ; #endif
0000 ;
0000 ; #if (UART == 1)
0000 ; #define UCSRA UCSR1A
0000 ; #define UCSRB UCSR1B
0000 ; #define UCSRC UCSR1C
0000 ; #define UBRRL UBRR1L
0000 ; #define UBRRH UBRR1H
0000 ; #define UDR UDR1
0000 ; #endif
0000 ; #endif
0000 ;
0000 ;
0000 ; #define FALSE 0
0000 ; #define TRUE 1
0000 ;
0000 ; /*********************************************************/
0000 ; /* I N C L U D E */
0000 ; /*********************************************************/
0000 ; #include "assembly.h"
0000 ;
0000 ; /*********************************************************/
0000 ; /* P R O T O T Y P E */
0000 ; /*********************************************************/
0000 ; void FlashLoad(void);
0000 ; void EEpromLoad(void);
0000 ; void WriteEEprom(void);
0000 ; char CheckEEprom(void);
0000 ; void EEPROMwrite(int location, unsigned char byte);
0000 ; unsigned char EEPROMread(int location);
0000 ; void SendDeviceID(void);
0000 ; void GetPageNumber(void);
0000 ; void ExecCode(void);
0000 ; char GetPage(void);
0000 ; void WriteFlash(void);
0000 ; char CheckFlash(void);
0000 ; void LockBit(void);
0000 ; unsigned char IsChar(void);
0000 ; unsigned char RxChar(void);
0000 ; void TxChar(unsigned char ch);
0000 ; void Wait(void);
0000 ; char HomeNet(void);
0000 ; void main(void);
0000 ;
0000 ; /*
0000 ; ///////////////////////////////////////////////////////////////////////////////
0000 ; #define WATCHDOG 4
0000 ;
0000 ; void Watchdog_Feed( void );
0000 ;
0000 ; unsigned char watchdog_feed_flag;
0000 ; */
0000 ; ///////////////////////////////////////////////////////////////////////////////
0000 ;
0000 ; /*****************************************************************************/
0000 ; /* G L O B A L V A R I A B L E S */
0000 ; /*****************************************************************************/
0000 ; unsigned char PageBuffer[PageByte];
0000 ; unsigned int PageAddress;
0000 ; unsigned int RealPageAddress;
0000 ;
0000 ;
0000 ; /*
0000 ; void Watchdog_Feed( void )
0000 ; {
0000 ; if ( watchdog_feed_flag == 0 )
0000 ; {
0000 ; watchdog_feed_flag = 1;
0000 ; PORTC |= 1 << WATCHDOG;
0000 ; }
0000 ; else
0000 ; {
0000 ; watchdog_feed_flag = 0;
0000 ; PORTC &= ~( 1 << WATCHDOG );
0000 ; }
0000 ; }
0000 ; */
0000 ; /*****************************************************************************/
0000 ; /* Flash Programing Code */
0000 ; /*****************************************************************************/
0000 ; void FlashLoad(void)
0000 ; {
0000 ; TxChar('!');
0000 01E2 ldi R16,33
0002 14D1 rcall _TxChar
0004 19C0 rjmp L3
0006 L2:
0006 ; while (1)
0006 ; {
0006 ; GetPageNumber();
0006 1AD0 rcall _GetPageNumber
0008 ;
0008 ; if (RealPageAddress == 0xFFFF) return;
0008 80910000 lds R24,_RealPageAddress
000C 90910100 lds R25,_RealPageAddress+1
0010 8F3F cpi R24,255
0012 EFEF ldi R30,255
0014 9E07 cpc R25,R30
0016 09F4 brne L5
0018 10C0 rjmp L1
001A L5:
001A ; // Watchdog_Feed();
001A ;
001A ; if (GetPage())
001A 2DD0 rcall _GetPage
001C 0023 tst R16
001E 51F0 breq L7
0020 ; {
0020 ; WriteFlash();
0020 56D0 rcall _WriteFlash
0022 ; if (CheckFlash())
0022 83D0 rcall _CheckFlash
0024 0023 tst R16
0026 19F0 breq L9
0028 ; TxChar('!');
0028 01E2 ldi R16,33
002A 00D1 rcall _TxChar
002C 05C0 rjmp L8
002E L9:
002E ; else TxChar('@');
002E 00E4 ldi R16,64
0030 FDD0 rcall _TxChar
0032 ; }
0032 02C0 rjmp L8
0034 L7:
0034 ; else TxChar('@');
0034 00E4 ldi R16,64
0036 FAD0 rcall _TxChar
0038 L8:
0038 L3:
0038 E6CF rjmp L2
003A X0:
003A L1:
003A .dbline 0 ; func end
003A 0895 ret
003C ; PageAddressLow -> R20
003C ; PageAddressHigh -> R22
.even
003C _GetPageNumber::
003C 00D0 rcall push_gset2
003E ; }
003E ; }
003E ;
003E ; /*****************************************************************************/
003E ;
003E ; void GetPageNumber(void)
003E ; {
003E L12:
003E L13:
003E ; unsigned char PageAddressHigh;
003E ; unsigned char PageAddressLow;
003E ;
003E ; while(!IsChar());
003E EED0 rcall _IsChar
0040 0023 tst R16
0042 E9F3 breq L12
0044 ; WDR();
0044 A895 wdr
0046 ; PageAddressHigh = RxChar();
0046 F0D0 rcall _RxChar
0048 602F mov R22,R16
004A L15:
004A L16:
004A ;
004A ; while(!IsChar());
004A E8D0 rcall _IsChar
004C 0023 tst R16
004E E9F3 breq L15
0050 ; WDR();
0050 A895 wdr
0052 ; PageAddressLow = RxChar();
0052 EAD0 rcall _RxChar
0054 402F mov R20,R16
0056 ;
0056 ; RealPageAddress = (int)((PageAddressHigh << 8) + PageAddressLow);
0056 362E mov R3,R22
0058 242E mov R2,R20
005A 30920100 sts _RealPageAddress+1,R3
005E 20920000 sts _RealPageAddress,R2
0062 ; PageAddress = RealPageAddress << NSHIFTPAGE;
0062 26E0 ldi R18,6
0064 30E0 ldi R19,0
0066 8101 movw R16,R2
0068 00D0 rcall lsl16
006A 10930300 sts _PageAddress+1,R17
006E 00930200 sts _PageAddress,R16
0072 L11:
0072 00D0 rcall pop_gset2
0074 .dbline 0 ; func end
0074 0895 ret
0076 ; CheckSum -> R20
0076 ; LocalCheckSum -> R22
0076 ; i -> R10,R11
.even
0076 _GetPage::
0076 00D0 rcall push_gset3
0078 ;
0078 ; #ifdef RAMPZ_FLAG
0078 ; if (PageAddressHigh) RAMPZ = 1;
0078 ; else RAMPZ = 0;
0078 ; #endif
0078 ; }
0078 ;
0078 ; /*****************************************************************************/
0078 ;
0078 ; char GetPage(void)
0078 ; {
0078 ; unsigned int i;
0078 ; unsigned char LocalCheckSum = 0;
0078 6627 clr R22
007A ; unsigned char CheckSum = 0;
007A 4427 clr R20
007C ;
007C ; for (i = 0 ; i < PageByte ; i++)
007C AA24 clr R10
007E BB24 clr R11
0080 14C0 rjmp L22
0082 X1:
0082 ; {
0082 L23:
0082 L24:
0082 CCD0 rcall _IsChar
0084 0023 tst R16
0086 E9F3 breq L23
0088 A895 wdr
008A CED0 rcall _RxChar
008C 80E0 ldi R24,<_PageBuffer
008E 90E0 ldi R25,>_PageBuffer
0090 F501 movw R30,R10
0092 E80F add R30,R24
0094 F91F adc R31,R25
0096 0083 std z+0,R16
0098 F501 movw R30,R10
009A E80F add R30,R24
009C F91F adc R31,R25
009E 2080 ldd R2,z+0
00A0 620D add R22,R2
00A2 A895 wdr
00A4 L20:
00A4 C501 movw R24,R10
00A6 0196 adiw R24,1
00A8 5C01 movw R10,R24
00AA L22:
00AA C501 movw R24,R10
00AC 8034 cpi R24,64
00AE E0E0 ldi R30,0
00B0 9E07 cpc R25,R30
00B2 38F3 brlo L24
00B4 L26:
00B4 L27:
00B4 ; while(!IsChar());
00B4 ; WDR();
00B4 ; PageBuffer[i] = RxChar();
00B4 ; LocalCheckSum += PageBuffer[i];
00B4 ; WDR();
00B4 ; }
00B4 ;
00B4 ; while(!IsChar());
00B4 B3D0 rcall _IsChar
00B6 0023 tst R16
00B8 E9F3 breq L26
00BA ; WDR();
00BA A895 wdr
00BC ; CheckSum = RxChar();
00BC B5D0 rcall _RxChar
00BE 402F mov R20,R16
00C0 ; if (LocalCheckSum == CheckSum) return 1;
00C0 6017 cp R22,R16
00C2 11F4 brne L29
00C4 01E0 ldi R16,1
00C6 01C0 rjmp L18
00C8 L29:
00C8 ; else return 0;
00C8 0027 clr R16
00CA L18:
00CA 00D0 rcall pop_gset3
00CC .dbline 0 ; func end
00CC 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -