📄 boot128.lst
字号:
F12C 81FD LDD R31,Y+5
F12D 0FE8 ADD R30,R24
F12E 1FF9 ADC R31,R25
F12F 8020 LDD R2,Z+0
F130 E086 LDI R24,6
F131 E091 LDI R25,1
F132 81EC LDD R30,Y+4
F133 81FD LDD R31,Y+5
F134 0FE8 ADD R30,R24
F135 1FF9 ADC R31,R25
F136 8220 STD Z+0,R2
F137 818C LDD R24,Y+4
F138 819D LDD R25,Y+5
F139 9601 ADIW R24,1
F13A 839D STD Y+5,R25
F13B 838C STD Y+4,R24
F13C 3080 CPI R24,0
F13D E0E1 LDI R30,1
F13E 079E CPC R25,R30
F13F F34C BLT 0xF129
(0169) write_one_page();
F140 DF51 RCALL _write_one_page
(0170) address += SPM_PAGESIZE;
F141 E040 LDI R20,0
F142 E051 LDI R21,1
F143 E060 LDI R22,0
F144 E070 LDI R23,0
F145 90400104 LDS R4,address+2
F147 90500105 LDS R5,address+3
F149 90200102 LDS R2,address
F14B 90300103 LDS R3,address+1
F14D 0E24 ADD R2,R20
F14E 1E35 ADC R3,R21
F14F 1E46 ADC R4,R22
F150 1E57 ADC R5,R23
F151 92300103 STS address+1,R3
F153 92200102 STS address,R2
F155 92500105 STS address+3,R5
F157 92400104 STS address+2,R4
(0171) bPiont = 0;
F159 2400 CLR R0
F15A 2411 CLR R1
F15B 821D STD Y+5,R1
F15C 820C STD Y+4,R0
(0172) }
(0173) PC_Send_Ok(SendData,0x00,SendBuf,0); //请求下一包命令
F15D 2422 CLR R2
F15E 2433 CLR R3
F15F 823B STD Y+3,R3
F160 822A STD Y+2,R2
F161 E98C LDI R24,0x9C
F162 E092 LDI R25,2
F163 8399 STD Y+1,R25
F164 8388 STD Y+0,R24
F165 2722 CLR R18
F166 E000 LDI R16,0
F167 E013 LDI R17,3
F168 940EF3CD CALL _PC_Send_Ok
(0174) }
F16A C00B RJMP 0xF176
(0175) else
(0176) {
(0177) Wrong_Cnt++;
F16B 94C3 INC R12
(0178) if(Wrong_Cnt == 3)
F16C 2D8C MOV R24,R12
F16D 3083 CPI R24,3
F16E F411 BNE 0xF171
(0179) return ERR_OVERTIME;
F16F E103 LDI R16,0x13
F170 C01E RJMP 0xF18F
(0180) PC_Send_Err(ERR_DATACRC,SendBuf); //接收数据错误,需重发
F171 E92C LDI R18,0x9C
F172 E032 LDI R19,2
F173 E102 LDI R16,0x12
F174 940EF3A8 CALL _PC_Send_Err
F176 2D8C MOV R24,R12
F177 3083 CPI R24,3
F178 F408 BCC 0xF17A
F179 CF64 RJMP 0xF0DE
(0181) }
(0182) }
(0183) }
(0184) }
(0185) if(bPiont)
F17A 800C LDD R0,Y+4
F17B 801D LDD R1,Y+5
F17C 2000 TST R0
F17D F411 BNE 0xF180
F17E 2011 TST R1
F17F F009 BEQ 0xF181
(0186) write_one_page();
F180 DF11 RCALL _write_one_page
(0187) PC_Send_Ok(SendData,0x00,SendBuf,0); //向上位机发送下载成功命令
F181 2422 CLR R2
F182 2433 CLR R3
F183 823B STD Y+3,R3
F184 822A STD Y+2,R2
F185 E98C LDI R24,0x9C
F186 E092 LDI R25,2
F187 8399 STD Y+1,R25
F188 8388 STD Y+0,R24
F189 2722 CLR R18
F18A E000 LDI R16,0
F18B E013 LDI R17,3
F18C 940EF3CD CALL _PC_Send_Ok
(0188)
(0189) return 0x00;
F18E 2700 CLR R16
F18F 9626 ADIW R28,6
F190 940EF5F5 CALL pop_gset5
F192 9508 RET
_Setting_Param:
ReceiveBuf --> R20
F193 940EF5FF CALL push_gset1
F195 01A8 MOVW R20,R16
F196 9724 SBIW R28,4
(0190) }
(0191)
(0192) //============================================================
(0193) //函 数:void Setting_Param(unsigned char *ReceiveBuf)
(0194) //功 能:设置参数
(0195) //入口参数:接收到的数据
(0196) //返 回 值:执行结果
(0197) //设 计 者:覃道堂
(0198) //创作时间:2006-03-16
(0199) //修改时间:
(0200) //修改目的:
(0201) //============================================================
(0202) unsigned char Setting_Param(unsigned char *ReceiveBuf)
(0203) {
(0204) Write_EEPROM(&ReceiveBuf[5],2,EE_WT_ID);//设置节点地址
F197 E081 LDI R24,1
F198 E090 LDI R25,0
F199 8399 STD Y+1,R25
F19A 8388 STD Y+0,R24
F19B E022 LDI R18,2
F19C 018A MOVW R16,R20
F19D 5F0B SUBI R16,0xFB
F19E 4F1F SBCI R17,0xFF
F19F 940EF433 CALL _Write_EEPROM
(0205)
(0206) Write_EEPROM(&ReceiveBuf[7],1,EE_WT_GD);//设置组地址
F1A1 E083 LDI R24,3
F1A2 E090 LDI R25,0
F1A3 8399 STD Y+1,R25
F1A4 8388 STD Y+0,R24
F1A5 E021 LDI R18,1
F1A6 018A MOVW R16,R20
F1A7 5F09 SUBI R16,0xF9
F1A8 4F1F SBCI R17,0xFF
F1A9 940EF433 CALL _Write_EEPROM
(0207)
(0208) if(Write_Time_Data(&ReceiveBuf[8],Time_Address,7))//设置系统时钟
F1AB E087 LDI R24,7
F1AC 8388 STD Y+0,R24
F1AD 2722 CLR R18
F1AE 018A MOVW R16,R20
F1AF 5F08 SUBI R16,0xF8
F1B0 4F1F SBCI R17,0xFF
F1B1 940EF589 CALL _Write_Time_Data
F1B3 2300 TST R16
F1B4 F031 BEQ 0xF1BB
(0209) PC_Send_Err(ERR_SETTING,SendBuf);
F1B5 E92C LDI R18,0x9C
F1B6 E032 LDI R19,2
F1B7 E105 LDI R16,0x15
F1B8 940EF3A8 CALL _PC_Send_Err
F1BA C00D RJMP 0xF1C8
(0210) else
(0211) PC_Send_Ok(SendData,0x00,SendBuf,0); //向上位机发送设置表具信息结果
F1BB 2422 CLR R2
F1BC 2433 CLR R3
F1BD 823B STD Y+3,R3
F1BE 822A STD Y+2,R2
F1BF E98C LDI R24,0x9C
F1C0 E092 LDI R25,2
F1C1 8399 STD Y+1,R25
F1C2 8388 STD Y+0,R24
F1C3 2722 CLR R18
F1C4 E000 LDI R16,0
F1C5 E013 LDI R17,3
F1C6 940EF3CD CALL _PC_Send_Ok
(0212)
(0213) return 0;
F1C8 2700 CLR R16
F1C9 9624 ADIW R28,4
F1CA 940EF602 CALL pop_gset1
F1CC 9508 RET
_Read_Param:
SendData --> R20
F1CD 940EF5FF CALL push_gset1
F1CF 01A8 MOVW R20,R16
F1D0 9724 SBIW R28,4
(0214) }
(0215)
(0216) //============================================================
(0217) //函 数:unsigned char Read_Param(unsigned char *SendData)
(0218) //功 能:读取参数
(0219) //入口参数:读取存放的地址
(0220) //返 回 值:执行结果
(0221) //设 计 者:覃道堂
(0222) //创作时间:2006-03-16
(0223) //修改时间:
(0224) //修改目的:
(0225) //============================================================
(0226) unsigned char Read_Param(unsigned char *SendData)
(0227) {
(0228) Read_EEPROM(SendData,2,EE_WT_ID); //读取节点地址
F1D1 E081 LDI R24,1
F1D2 E090 LDI R25,0
F1D3 8399 STD Y+1,R25
F1D4 8388 STD Y+0,R24
F1D5 E022 LDI R18,2
F1D6 018A MOVW R16,R20
F1D7 940EF44D CALL _Read_EEPROM
(0229)
(0230) Read_EEPROM(&SendData[2],1,EE_WT_GD); //读取组地址
F1D9 E083 LDI R24,3
F1DA E090 LDI R25,0
F1DB 8399 STD Y+1,R25
F1DC 8388 STD Y+0,R24
F1DD E021 LDI R18,1
F1DE 018A MOVW R16,R20
F1DF 5F0E SUBI R16,0xFE
F1E0 4F1F SBCI R17,0xFF
F1E1 940EF44D CALL _Read_EEPROM
(0231)
(0232) PC_Send_Ok(SendData,0,SendBuf,3); //向上位机发送读取表具信息结果
F1E3 E083 LDI R24,3
F1E4 E090 LDI R25,0
F1E5 839B STD Y+3,R25
F1E6 838A STD Y+2,R24
F1E7 E98C LDI R24,0x9C
F1E8 E092 LDI R25,2
F1E9 8399 STD Y+1,R25
F1EA 8388 STD Y+0,R24
F1EB 2722 CLR R18
F1EC 018A MOVW R16,R20
F1ED 940EF3CD CALL _PC_Send_Ok
(0233)
(0234) return 0;
F1EF 2700 CLR R16
F1F0 9624 ADIW R28,4
F1F1 940EF602 CALL pop_gset1
F1F3 9508 RET
_Read_SystemTime:
SendData --> R20
F1F4 940EF5FF CALL push_gset1
F1F6 01A8 MOVW R20,R16
F1F7 9724 SBIW R28,4
(0235) }
(0236)
(0237) //============================================================
(0238) //函 数:unsigned char Read_SystemTime(unsigned char *SendData)
(0239) //功 能:读取参数
(0240) //入口参数:读取存放的地址
(0241) //返 回 值:执行结果
(0242) //设 计 者:覃道堂
(0243) //创作时间:2006-03-16
(0244) //修改时间:
(0245) //修改目的:
(0246) //============================================================
(0247) unsigned char Read_SystemTime(unsigned char *SendData)
(0248) {
(0249) if(Read_Time_Data(SendData,Time_Address,7))
F1F8 E087 LDI R24,7
F1F9 8388 STD Y+0,R24
F1FA 2722 CLR R18
F1FB 018A MOVW R16,R20
F1FC 940EF556 CALL _Read_Time_Data
F1FE 2300 TST R16
F1FF F031 BEQ 0xF206
(0250) PC_Send_Err(ERR_READTIME,SendBuf);
F200 E92C LDI R18,0x9C
F201 E032 LDI R19,2
F202 E106 LDI R16,0x16
F203 940EF3A8 CALL _PC_Send_Err
F205 C00C RJMP 0xF212
(0251) else
(0252) PC_Send_Ok(SendData,0,SendBuf,7); //向上位机发送读取表具信息结果
F206 E087 LDI R24,7
F207 E090 LDI R25,0
F208 839B STD Y+3,R25
F209 838A STD Y+2,R24
F20A E98C LDI R24,0x9C
F20B E092 LDI R25,2
F20C 8399 STD Y+1,R25
F20D 8388 STD Y+0,R24
F20E 2722 CLR R18
F20F 018A MOVW R16,R20
F210 940EF3CD CALL _PC_Send_Ok
(0253)
(0254) return 0;
F212 2700 CLR R16
F213 9624 ADIW R28,4
F214 940EF602 CALL pop_gset1
F216 9508 RET
_main:
Crc_Value --> Y+5
Ret_Value --> R22
Rec_Len --> R20
F217 9724 SBIW R28,4
(0255) }
(0256)
(0257) //============================================================
(0258) //函 数:void main(void)
(0259) //功 能:主函数
(0260) //入口参数:无
(0261) //返 回 值:无
(0262) //设 计 者:覃道堂
(0263) //创作时间:2006-03-16
(0264) //修改时间:
(0265) //修改目的:
(0266) //============================================================
(0267) void main(void)
(0268) {
(0269) int Rec_Len = 0;
F218 2744 CLR R20
F219 2755 CLR R21
(0270) unsigned char Ret_Value = 0;
F21A 2766 CLR R22
(0271) unsigned short Crc_Value;
(0272)
(0273) Init_Com();
F21B 940EF335 CALL _Init_Com
(0274) Reset_R8025();
F21D 940EF5B2 CALL _Reset_R8025
(0275)
(0276) PC_Send_Ok(SendData,0x00,SendBuf,1); //向PC 发送接收握手信号
F21F E081 LDI R24,1
F220 E090 LDI R25,0
F221 839B STD Y+3,R25
F222 838A STD Y+2,R24
F223 E98C LDI R24,0x9C
F224 E092 LDI R25,2
F225 8399 STD Y+1,R25
F226 8388 STD Y+0,R24
F227 2722 CLR R18
F228 E000 LDI R16,0
F229 E013 LDI R17,3
F22A 940EF3CD CALL _PC_Send_Ok
(0277)
(0278) Rec_Len = Uart_Receive_Frame(ReceiveBuf, 100); //等待接收握手信号
F22C E624 LDI R18,0x64
F22D E030 LDI R19,0
F22E E006 LDI R16,6
F22F E012 LDI R17,2
F230 940EF36B CALL _Uart_Receive_Frame
F232 2F40 MOV R20,R16
F233 2755 CLR R21
(0279) if(Rec_Len) //如果没收到数据,跳到0x00处运行程序
F234 3040 CPI R20,0
F235 0745 CPC R20,R21
F236 F0C9 BEQ 0xF250
(0280) {
(0281) if(Verify_Command(ReceiveBuf,Rec_Len))
F237 019A MOVW R18,R20
F238 E006 LDI R16,6
F239 E012 LDI R17,2
F23A 940EF306 CALL _Verify_Command
F23C 2300 TST R16
F23D F031 BEQ 0xF244
(0282) {
(0283) PC_Send_Err(ERR_COMMANDCRC,SendBuf); //命令CRC校验错误
F23E E92C LDI R18,0x9C
F23F E032 LDI R19,2
F240 E101 LDI R16,0x11
F241 940EF3A8 CALL _PC_Send_Err
(0284) quit();
F243 DE89 RCALL _quit
(0285) }
(0286) if((ReceiveBuf[2] != 0x00)) //不是联机命令
F244 90200208 LDS R2,ReceiveBuf+2
F246 2022 TST R2
F247 F409 BNE 0xF249
F248 C084 RJMP 0xF2CD
(0287) {
(0288) PC_Send_Err(ERR_CONNECT,SendBuf);
F249 E92C LDI R18,0x9C
F24A E032 LDI R19,2
F24B E100 LDI R16,0x10
F24C 940EF3A8 CALL _PC_Send_Err
(0289) quit(); //验证错误
F24E DE7E RCALL _quit
(0290) }
(0291) }
F24F C07D RJMP 0xF2CD
(0292) else
(0293) quit();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -