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