📄 main.lis
字号:
.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 + -