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

📄 main.lis

📁 AVR mage8单片机的bootload程序、完整版本、本人做项目一下在用、此程序为16m晶振版本、非常好用
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -