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

📄 main.lis

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