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

📄 main.lis

📁 AVR mage8单片机的bootload程序、完整版本、本人做项目一下在用、此程序为8m晶振版本、非常好用
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 020E           ;       location -> R16,R17
                        .even
 020E           _EEPROMread::
 020E           ; } 
 020E           ; #endif         
 020E           ; 
 020E           ; 
 020E           ; 
 020E           ; #ifdef EEPROM
 020E           ; unsigned char EEPROMread( int location)
 020E           ; {
 020E           L70:
 020E           L71:
 020E           ; //WDR();
 020E           ; while (EECR & 0x02);            
 020E E199              sbic 0x1c,1
 0210 FECF              rjmp L70
 0212           ; EEAR = location;
 0212 1FBB              out 0x1f,R17
 0214 0EBB              out 0x1e,R16
 0216           ; EECR |= 0x01;                       // Set READ strobe
 0216 E09A              sbi 0x1c,0
 0218           ; return (EEDR);                      // Return byte
 0218 0DB3              in R16,0x1d
 021A           L69:
 021A                   .dbline 0 ; func end
 021A 0895              ret
                        .even
 021C           _IsChar::
 021C           ; }
 021C           ; #endif 
 021C           ; 
 021C           ; 
 021C           ; /*****************************************************************************/
 021C           ; /* LockBit Code										                         */
 021C           ; /*****************************************************************************/
 021C           ; 
 021C           ; 
 021C           ; #ifdef LOCKBIT
 021C           ; void LockBit(void)
 021C           ; {
 021C           ; unsigned char Byte;
 021C           ; WDR();
 021C           ; TxChar('%');
 021C           ; 
 021C           ; while(!IsChar());
 021C           ; Byte = RxChar();
 021C           ; 
 021C           ; while(!IsChar());
 021C           ; if (Byte == ~RxChar()) write_lock_bits(~Byte);
 021C           ; }
 021C           ; #endif
 021C           ; 
 021C           ; 
 021C           ; /*****************************************************************************/
 021C           ; /* Serial Port Code										                     */
 021C           ; /*****************************************************************************/
 021C           ; unsigned char IsChar(void)
 021C           ; {
 021C           ;     if(UCSRA & 0x80) 
 021C 5F9B              sbis 0xb,7
 021E 02C0              rjmp L74
 0220           ;         return 1;
 0220 01E0              ldi R16,1
 0222 01C0              rjmp L73
 0224           L74:
 0224           ;     else 
 0224           ;     	  return 0;
 0224 0027              clr R16
 0226           L73:
 0226                   .dbline 0 ; func end
 0226 0895              ret
                        .even
 0228           _RxChar::
 0228           ; }
 0228           ; 
 0228           ; /*****************************************************************************/
 0228           ; unsigned char RxChar(void)
 0228           ; {
 0228           ;     return UDR;
 0228 0CB1              in R16,0xc
 022A           L76:
 022A                   .dbline 0 ; func end
 022A 0895              ret
 022C           ;             ch -> R16
                        .even
 022C           _TxChar::
 022C           ; }
 022C           ; 
 022C           ; /*****************************************************************************/
 022C           ; 
 022C           ; void TxChar(char ch)
 022C           ; {
 022C           L78:
 022C           L79:
 022C           ;     while(!(UCSRA & 0x20));  // wait for empty transmit buffer
 022C 5D9B              sbis 0xb,5
 022E FECF              rjmp L78
 0230           ;       
 0230           ;       RS485PORT |= RS485TXE;
 0230 949A              sbi 0x12,4
 0232           ;       UDR = ch;                            // write char
 0232 0CB9              out 0xc,R16
 0234           L81:
 0234           L82:
 0234           ; 	while(!(UCSRA & 0x40));
 0234 5E9B              sbis 0xb,6
 0236 FECF              rjmp L81
 0238           ;       UCSRA |= 0x40;
 0238 5E9A              sbi 0xb,6
 023A           ;       RS485PORT &= ~RS485TXE; 
 023A 9498              cbi 0x12,4
 023C           ;   WDR(); 
 023C A895              wdr
 023E           L77:
 023E                   .dbline 0 ; func end
 023E 0895              ret
 0240           ;              i -> R16,R17
                        .even
 0240           _Wait::
 0240           ; }
 0240           ; 
 0240           ; /*****************************************************************************/
 0240           ; /* Helpers Code											                     */
 0240           ; /*****************************************************************************/
 0240           ; void Wait()
 0240           ; {
 0240 00E0              ldi R16,-32000
 0242 13E8              ldi R17,-125
 0244           L85:
 0244           L86:
 0244           ; int i;
 0244           ; #ifdef LOW 
 0244           ; for (i=0;i<32000;i++);
 0244           ; WDR();
 0244           ; #endif
 0244           ; #ifdef HIGH 
 0244           ; for (i=-32000;i<32000;i++);
 0244 0F5F              subi R16,255  ; offset = 1
 0246 1F4F              sbci R17,255
 0248 0030              cpi R16,0
 024A EDE7              ldi R30,125
 024C 1E07              cpc R17,R30
 024E D4F3              brlt L85
 0250           ; WDR();
 0250 A895              wdr
 0252           L84:
 0252                   .dbline 0 ; func end
 0252 0895              ret
                        .even
 0254           _SendDeviceID::
 0254           ; #endif
 0254           ; }
 0254           ; 
 0254           ; /*****************************************************************************/
 0254           ; 
 0254           ; void SendDeviceID(void)
 0254           ; {
 0254           ; 
 0254           ;     TxChar(DeviceID);
 0254 01E4              ldi R16,65
 0256 EADF              rcall _TxChar
 0258           ;     TxChar(FlashSize);
 0258 0CE6              ldi R16,108
 025A E8DF              rcall _TxChar
 025C           ;     TxChar(BootSize);
 025C 04E6              ldi R16,100
 025E E6DF              rcall _TxChar
 0260           ;     TxChar(PageSize);
 0260 02E5              ldi R16,82
 0262 E4DF              rcall _TxChar
 0264           ;     TxChar(EEpromSize);
 0264 01E3              ldi R16,49
 0266 E2DF              rcall _TxChar
 0268           ;     RxChar();
 0268 DFDF              rcall _RxChar
 026A           ;     WDR();
 026A A895              wdr
 026C           L89:
 026C                   .dbline 0 ; func end
 026C 0895              ret
                        .even
 026E           _ExecCode::
 026E           ; }
 026E           ; 
 026E           ; /*****************************************************************************/
 026E           ; 
 026E           ; void ExecCode(void)
 026E           ; {
 026E           ; #ifdef RAMPZ_FLAG 
 026E           ;     RAMPZ = 0;
 026E           ; #endif
 026E           ;     INTVECREG = 0x01;	   	 // Enable interrupt vector select
 026E 81E0              ldi R24,1
 0270 8BBF              out 0x3b,R24
 0272           ;     INTVECREG = 0x00;          // Move interrupt vector to flash
 0272 2224              clr R2
 0274 2BBE              out 0x3b,R2
 0276           ;     asm("jmp 0x0000");       // Run application code   
 0276 0C940000          jmp 0x0000
 027A           L90:
 027A                   .dbline 0 ; func end
 027A 0895              ret
 027C           ;              i -> R20
                        .even
 027C           _main::
 027C           ; }
 027C           ; 
 027C           ; 
 027C           ; 
 027C           ; void main(void)
 027C           ; {
 027C           ;     unsigned char i;
 027C           ;     CLI();          		      // disable all interrupts
 027C F894              cli
 027E           ;     
 027E           ;     WDTCR |= ( 1 << WDCE ) | ( 1 << WDE ) ;
 027E 81B5              in R24,0x21
 0280 8861              ori R24,24
 0282 81BD              out 0x21,R24
 0284           ;     WDTCR = 0x07 ;
 0284 87E0              ldi R24,7
 0286 81BD              out 0x21,R24
 0288           ;     
 0288           ;       PULLUPPORT = PULLUPPIN;       // Pull up on RX line
 0288 81E0              ldi R24,1
 028A 82BB              out 0x12,R24
 028C           ; 
 028C           ;     UCSRB = 0x00;                                      //disable while setting baud rate
 028C 2224              clr R2
 028E 2AB8              out 0xa,R2
 0290           ;     UCSRA = 0x00; 
 0290 2BB8              out 0xb,R2
 0292           ;     UCSRC = 0x86;                                      // Asyn,NoParity,1StopBit,8Bit,
 0292 86E8              ldi R24,134
 0294 80BD              out 0x20,R24
 0296           ;     UBRRH = 0;     //set baud rate hi
 0296 20BC              out 0x20,R2
 0298           ;     UCSRB = 0x18;                                      // Rx enable Tx Enable
 0298 88E1              ldi R24,24
 029A 8AB9              out 0xa,R24
 029C           ; #ifdef RS485DDR
 029C           ;       RS485DDR |= RS485TXE ;
 029C 8C9A              sbi 0x11,4
 029E           ;     RS485PORT &= ~RS485TXE ;
 029E 9498              cbi 0x12,4
 02A0           ; #endif        
 02A0           ; #ifdef BAUDRATE
 02A0           ;     {
 02A0           ;         UBRRL = BAUDRATE;
 02A0           ; #else
 02A0           ; for (i = 8; i < 18; ++i)
 02A0 48E0              ldi R20,8
 02A2 0EC0              rjmp L95
 02A4           L92:
 02A4           ;     {
 02A4           ;     	  WDR();
 02A4 A895              wdr
 02A6           ;         UBRRL = i;
 02A6 49B9              out 0x9,R20
 02A8           ; #endif
 02A8           ; 
 02A8           ;         RxChar();
 02A8 BFDF              rcall _RxChar
 02AA           ;           TxChar('>');
 02AA 0EE3              ldi R16,62
 02AC BFDF              rcall _TxChar
 02AE           ;           Wait();
 02AE C8DF              rcall _Wait
 02B0           ;           if (RxChar() == '<') 
 02B0 BBDF              rcall _RxChar
 02B2 0C33              cpi R16,60
 02B4 21F4              brne L96
 02B6           ;           {
 02B6           ;               SendDeviceID();
 02B6 CEDF              rcall _SendDeviceID
 02B8           ;               FlashLoad();
 02B8 A3DE              rcall _FlashLoad
 02BA           ; //            Watchdog_Feed();
 02BA           ;        #ifdef EEPROM
 02BA           ;               EEpromLoad();
 02BA 64DF              rcall _EEpromLoad
 02BC           ; //            Watchdog_Feed();
 02BC           ;          #endif
 02BC           ;          #ifdef LOCKBIT
 02BC           ;               LockBit();
 02BC           ;          #endif
 02BC           ;               ExecCode();
 02BC D8DF              rcall _ExecCode
 02BE           ;           }
 02BE           L96:
 02BE           L93:
 02BE 4395              inc R20
 02C0           L95:
 02C0 4231              cpi R20,18
 02C2 80F3              brlo L92
 02C4           ;       }
 02C4           ;     ExecCode();
 02C4 D4DF              rcall _ExecCode
 02C6           L91:
 02C6                   .dbline 0 ; func end
 02C6 0895              ret
                        .area bss(ram, con, rel)
 0000           _RealPageAddress::
 0000                   .blkb 2
 0002           _PageAddress::
 0002                   .blkb 2
 0004           _PageBuffer::
 0004                   .blkb 64

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -