📄 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 ; #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 12D1 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 2BD0 rcall _GetPage
001C 0023 tst R16
001E 51F0 breq L7
0020 ; {
0020 ; WriteFlash();
0020 54D0 rcall _WriteFlash
0022 ; if (CheckFlash())
0022 81D0 rcall _CheckFlash
0024 0023 tst R16
0026 19F0 breq L9
0028 ; TxChar('!');
0028 01E2 ldi R16,33
002A FED0 rcall _TxChar
002C 05C0 rjmp L8
002E L9:
002E ; else TxChar('@');
002E 00E4 ldi R16,64
0030 FBD0 rcall _TxChar
0032 ; }
0032 02C0 rjmp L8
0034 L7:
0034 ; else TxChar('@');
0034 00E4 ldi R16,64
0036 F8D0 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 ECD0 rcall _IsChar
0040 0023 tst R16
0042 E9F3 breq L12
0044 ; // WDR();
0044 ; PageAddressHigh = RxChar();
0044 EFD0 rcall _RxChar
0046 602F mov R22,R16
0048 L15:
0048 L16:
0048 ;
0048 ; while(!IsChar());
0048 E7D0 rcall _IsChar
004A 0023 tst R16
004C E9F3 breq L15
004E ; // WDR();
004E ; PageAddressLow = RxChar();
004E EAD0 rcall _RxChar
0050 402F mov R20,R16
0052 ;
0052 ; RealPageAddress = (int)((PageAddressHigh << 8) + PageAddressLow);
0052 362E mov R3,R22
0054 242E mov R2,R20
0056 30920100 sts _RealPageAddress+1,R3
005A 20920000 sts _RealPageAddress,R2
005E ; PageAddress = RealPageAddress << NSHIFTPAGE;
005E 26E0 ldi R18,6
0060 30E0 ldi R19,0
0062 8101 movw R16,R2
0064 00D0 rcall lsl16
0066 10930300 sts _PageAddress+1,R17
006A 00930200 sts _PageAddress,R16
006E L11:
006E 00D0 rcall pop_gset2
0070 .dbline 0 ; func end
0070 0895 ret
0072 ; CheckSum -> R20
0072 ; LocalCheckSum -> R22
0072 ; i -> R10,R11
.even
0072 _GetPage::
0072 00D0 rcall push_gset3
0074 ;
0074 ; #ifdef RAMPZ_FLAG
0074 ; if (PageAddressHigh) RAMPZ = 1;
0074 ; else RAMPZ = 0;
0074 ; #endif
0074 ; }
0074 ;
0074 ; /*****************************************************************************/
0074 ;
0074 ; char GetPage(void)
0074 ; {
0074 ; unsigned int i;
0074 ; unsigned char LocalCheckSum = 0;
0074 6627 clr R22
0076 ; unsigned char CheckSum = 0;
0076 4427 clr R20
0078 ;
0078 ; for (i = 0 ; i < PageByte ; i++)
0078 AA24 clr R10
007A BB24 clr R11
007C 14C0 rjmp L22
007E X1:
007E ; {
007E L23:
007E L24:
007E CCD0 rcall _IsChar
0080 0023 tst R16
0082 E9F3 breq L23
0084 A895 wdr
0086 CED0 rcall _RxChar
0088 80E0 ldi R24,<_PageBuffer
008A 90E0 ldi R25,>_PageBuffer
008C F501 movw R30,R10
008E E80F add R30,R24
0090 F91F adc R31,R25
0092 0083 std z+0,R16
0094 F501 movw R30,R10
0096 E80F add R30,R24
0098 F91F adc R31,R25
009A 2080 ldd R2,z+0
009C 620D add R22,R2
009E A895 wdr
00A0 L20:
00A0 C501 movw R24,R10
00A2 0196 adiw R24,1
00A4 5C01 movw R10,R24
00A6 L22:
00A6 C501 movw R24,R10
00A8 8034 cpi R24,64
00AA E0E0 ldi R30,0
00AC 9E07 cpc R25,R30
00AE 38F3 brlo L24
00B0 L26:
00B0 L27:
00B0 ; while(!IsChar());
00B0 ; WDR();
00B0 ; PageBuffer[i] = RxChar();
00B0 ; LocalCheckSum += PageBuffer[i];
00B0 ; WDR();
00B0 ; }
00B0 ;
00B0 ; while(!IsChar());
00B0 B3D0 rcall _IsChar
00B2 0023 tst R16
00B4 E9F3 breq L26
00B6 ; WDR();
00B6 A895 wdr
00B8 ; CheckSum = RxChar();
00B8 B5D0 rcall _RxChar
00BA 402F mov R20,R16
00BC ; if (LocalCheckSum == CheckSum) return 1;
00BC 6017 cp R22,R16
00BE 11F4 brne L29
00C0 01E0 ldi R16,1
00C2 01C0 rjmp L18
00C4 L29:
00C4 ; else return 0;
00C4 0027 clr R16
00C6 L18:
00C6 00D0 rcall pop_gset3
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA ; TempInt -> R20,R21
00CA ; i -> R22,R23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -