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

📄 main.lis

📁 AVR mage8单片机的bootload程序、完整版本、本人做项目一下在用、此程序为8m晶振版本、非常好用
💻 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           ; ///////////////////////////////////////////////////////////////////////////////
 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 + -