📄 boot128.lst
字号:
01BB 8366 STD Z+6,R22
(0163) Uart_Send_Frame(SendBuf, 7);
01BC E027 LDI R18,7
01BD E030 LDI R19,0
01BE 018A MOVW R16,R20
01BF DF8D RCALL _Uart_Send_Frame
01C0 940E023B CALL pop_gset2
01C2 9508 RET
_PC_Send_Ok:
Crc_Data --> Y+1
i --> Y+1
Len --> Y+8
SendBuf --> R20
Ok_Coad --> R22
Ok_Frame --> R10
01C3 940E0248 CALL push_gset3
01C5 2F62 MOV R22,R18
01C6 0158 MOVW R10,R16
01C7 814E LDD R20,Y+6
01C8 815F LDD R21,Y+7
(0164) }
(0165)
(0166) //============================================================
(0167) //函 数:void PC_Send_Ok(unsigned char *Ok_Frame,unsigned char Ok_Coad,
(0168) // unsigned char *SendBuf,int Len)
(0169) //功 能:向PC返回执行结果
(0170) //入口参数:发送数据,结果代码,发送缓冲区,发送数据长度
(0171) //返 回 值:无
(0172) //设 计 者:覃道堂
(0173) //创作时间:2006-03-16
(0174) //修改时间:
(0175) //修改目的:
(0176) //============================================================
(0177) void PC_Send_Ok(unsigned char *Ok_Frame,unsigned char Ok_Coad,unsigned char *SendBuf,int Len)
(0178) {
(0179) int i;
(0180) unsigned short Crc_Data;
(0181)
(0182) SendBuf[0] = 0x4F;
01C9 E48F LDI R24,0x4F
01CA 01FA MOVW R30,R20
01CB 8380 STD Z+0,R24
(0183) SendBuf[1] = 0x4B;
01CC E48B LDI R24,0x4B
01CD 8381 STD Z+1,R24
(0184) SendBuf[2] = 0x00; //包序号
01CE 2422 CLR R2
01CF 01FA MOVW R30,R20
01D0 8222 STD Z+2,R2
(0185) SendBuf[3] = 0x04; //数据长度
01D1 E084 LDI R24,4
01D2 01FA MOVW R30,R20
01D3 8383 STD Z+3,R24
(0186) //if(Len == 1)
(0187) // SendBuf[4] = Ok_Coad;
(0188) //else if(Len > 1)
(0189) //{
(0190) // for(i = 0;i < Len;i ++)
(0191) // SendBuf[4+i] = Ok_Frame[i];
(0192) //}
(0193) //else
(0194) // SendBuf[4] = 0;
(0195) //Crc_Data = CRC16(SendBuf,4+Len);
(0196) //SendBuf[Len+4] = Crc_Data / 0x100;
(0197) //SendBuf[Len+5] = (unsigned char)Crc_Data;
(0198) Uart_Send_Frame(SendBuf, 4);
01D4 E024 LDI R18,4
01D5 E030 LDI R19,0
01D6 018A MOVW R16,R20
01D7 DF75 RCALL _Uart_Send_Frame
01D8 940E023E CALL pop_gset3
01DA 9508 RET
FILE: D:\avr16\atmegal16\Eeprom128.c
(0001) #include <iom16v.h>
(0002) #include "Eeprom128.h"
(0003)
(0004) //============================================================
(0005) //函 数:unsigned char eeprom_read_byte(unsigned long *addr)
(0006) //功 能:读取EE一个字节
(0007) //入口参数:读取地址
(0008) //返 回 值:读取的字节数据
(0009) //设 计 者:覃道堂
(0010) //创作时间:2006-03-28
(0011) //修改时间:
(0012) //修改目的:
(0013) //============================================================
(0014) unsigned char eeprom_read_byte(unsigned int *addr)
(0015) {
(0016) /* Wait for completion of previous write */
(0017) while(EECR & (1<<EEWE));
_eeprom_read_byte:
addr --> R16
01DB 99E1 SBIC 0x1C,1
01DC CFFE RJMP _eeprom_read_byte
(0018) /* Set up address register */
(0019) EEAR = *addr;
01DD 01F8 MOVW R30,R16
01DE 8020 LDD R2,Z+0
01DF 8031 LDD R3,Z+1
01E0 BA3F OUT 0x1F,R3
01E1 BA2E OUT 0x1E,R2
(0020) /* Start eeprom read by writing EERE */
(0021) EECR |= (1<<EERE);
01E2 9AE0 SBI 0x1C,0
(0022) /* Return data from Data Register */
(0023) return EEDR;
01E3 B30D IN R16,0x1D
01E4 9508 RET
(0024) }
(0025) //============================================================
(0026) //函 数:void eeprom_write_byte(unsigned long *addr, unsigned char val)
(0027) //功 能:写入EE一个字节
(0028) //入口参数:写入地址,写入数据
(0029) //返 回 值:无
(0030) //设 计 者:覃道堂
(0031) //创作时间:2006-03-28
(0032) //修改时间:
(0033) //修改目的:
(0034) //============================================================
(0035) void eeprom_write_byte(unsigned int *addr, unsigned char val)
(0036) {
(0037) /* Wait for completion of previous write */
(0038) while(EECR & (1<<EEWE));
_eeprom_write_byte:
val --> R18
addr --> R16
01E5 99E1 SBIC 0x1C,1
01E6 CFFE RJMP _eeprom_write_byte
(0039) /* Set up address and Data Registers */
(0040) EEAR = *addr;
01E7 01F8 MOVW R30,R16
01E8 8020 LDD R2,Z+0
01E9 8031 LDD R3,Z+1
01EA BA3F OUT 0x1F,R3
01EB BA2E OUT 0x1E,R2
(0041) EEDR = val;
01EC BB2D OUT 0x1D,R18
(0042) /* Write logical one to EEMWE */
(0043) EECR |= (1<<EEMWE);
01ED 9AE2 SBI 0x1C,2
(0044) /* Start eeprom write by setting EEWE */
(0045) EECR |= (1<<EEWE);
01EE 9AE1 SBI 0x1C,1
(0046) while(EECR & (1<<EEWE));
01EF 99E1 SBIC 0x1C,1
01F0 CFFE RJMP 0x01EF
01F1 9508 RET
_Write_EEPROM:
i --> R20
EE_START_ADR --> Y+6
num_bytes --> R22
pBuffer --> R10
01F2 940E0248 CALL push_gset3
01F4 2F62 MOV R22,R18
01F5 0158 MOVW R10,R16
(0047) }
(0048) /*****************************************************************************
(0049) *
(0050) * Function name : StoreEEPROM
(0051) *
(0052) * Returns : None
(0053) *
(0054) * Parameters : Pointer to string, number of bytes to write, adress in EEPROM
(0055) *
(0056) * Purpose : Write byte(s) to the EEPROM
(0057) *
(0058) *****************************************************************************/
(0059) void Write_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
(0060) {
(0061) unsigned char i;
(0062) for (i=0;i<num_bytes;i++)
01F6 2744 CLR R20
01F7 C00F RJMP 0x0207
(0063) {
(0064) eeprom_write_byte(&EE_START_ADR, pBuffer[i]);
01F8 2FE4 MOV R30,R20
01F9 27FF CLR R31
01FA 0DEA ADD R30,R10
01FB 1DFB ADC R31,R11
01FC 8120 LDD R18,Z+0
01FD 018E MOVW R16,R28
01FE 5F0A SUBI R16,0xFA
01FF 4F1F SBCI R17,0xFF
0200 DFE4 RCALL _eeprom_write_byte
(0065) EE_START_ADR++;
0201 818E LDD R24,Y+6
0202 819F LDD R25,Y+7
0203 9601 ADIW R24,1
0204 839F STD Y+7,R25
0205 838E STD Y+6,R24
0206 9543 INC R20
0207 1746 CP R20,R22
0208 F378 BCS 0x01F8
0209 940E023E CALL pop_gset3
020B 9508 RET
_Read_EEPROM:
i --> R20
EE_START_ADR --> Y+6
num_bytes --> R22
pBuffer --> R10
020C 940E0248 CALL push_gset3
020E 2F62 MOV R22,R18
020F 0158 MOVW R10,R16
(0066) }
(0067) }
(0068)
(0069)
(0070) /*****************************************************************************
(0071) *
(0072) * Function name : ReadEEPROM
(0073) *
(0074) * Returns : None
(0075) *
(0076) * Parameters : Pointer to string, number of bytes to read, adress in EEPROM
(0077) *
(0078) * Purpose : Write byte(s) to the EEPROM
(0079) *
(0080) *****************************************************************************/
(0081)
(0082) void Read_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
(0083) {
(0084) unsigned char i;
(0085)
(0086) for (i=0;i<num_bytes;i++)
0210 2744 CLR R20
0211 C00F RJMP 0x0221
(0087) {
(0088) pBuffer[i]=eeprom_read_byte(&EE_START_ADR);
0212 018E MOVW R16,R28
0213 5F0A SUBI R16,0xFA
0214 4F1F SBCI R17,0xFF
0215 DFC5 RCALL _eeprom_read_byte
0216 2FE4 MOV R30,R20
0217 27FF CLR R31
0218 0DEA ADD R30,R10
0219 1DFB ADC R31,R11
021A 8300 STD Z+0,R16
(0089) EE_START_ADR++;
FILE: <library>
021B 818E LDD R24,Y+6
021C 819F LDD R25,Y+7
021D 9601 ADIW R24,1
021E 839F STD Y+7,R25
021F 838E STD Y+6,R24
0220 9543 INC R20
0221 1746 CP R20,R22
0222 F378 BCS 0x0212
0223 940E023E CALL pop_gset3
0225 9508 RET
push_arg4:
0226 933A ST R19,-Y
0227 932A ST R18,-Y
push_arg2:
0228 931A ST R17,-Y
0229 930A ST R16,-Y
022A 9508 RET
empy16s:
022B 920A ST R0,-Y
022C 921A ST R1,-Y
022D 938A ST R24,-Y
022E 939A ST R25,-Y
022F 9F02 MUL R16,R18
0230 01C0 MOVW R24,R0
0231 9F12 MUL R17,R18
0232 0D90 ADD R25,R0
0233 9F03 MUL R16,R19
0234 0D90 ADD R25,R0
0235 018C MOVW R16,R24
0236 9199 LD R25,Y+
0237 9189 LD R24,Y+
0238 9019 LD R1,Y+
0239 9009 LD R0,Y+
023A 9508 RET
pop_gset2:
023B E0E2 LDI R30,2
023C 940C0250 JMP pop
pop_gset3:
023E E0E4 LDI R30,4
023F 940C0250 JMP pop
pop_gset5:
0241 27EE CLR R30
0242 940C0250 JMP pop
push_gset5:
0244 92FA ST R15,-Y
0245 92EA ST R14,-Y
push_gset4:
0246 92DA ST R13,-Y
0247 92CA ST R12,-Y
push_gset3:
0248 92BA ST R11,-Y
0249 92AA ST R10,-Y
push_gset2:
024A 937A ST R23,-Y
024B 936A ST R22,-Y
push_gset1:
024C 935A ST R21,-Y
024D 934A ST R20,-Y
024E 9508 RET
pop_gset1:
024F E0E1 LDI R30,1
pop:
0250 9149 LD R20,Y+
0251 9159 LD R21,Y+
0252 FDE0 SBRC R30,0
0253 9508 RET
0254 9169 LD R22,Y+
0255 9179 LD R23,Y+
0256 FDE1 SBRC R30,1
0257 9508 RET
0258 90A9 LD R10,Y+
0259 90B9 LD R11,Y+
025A FDE2 SBRC R30,2
025B 9508 RET
025C 90C9 LD R12,Y+
025D 90D9 LD R13,Y+
025E FDE3 SBRC R30,3
025F 9508 RET
0260 90E9 LD R14,Y+
0261 90F9 LD R15,Y+
0262 9508 RET
asgncblk:
0263 93AA ST R26,-Y
0264 93BA ST R27,-Y
0265 93EA ST R30,-Y
0266 93FA ST R31,-Y
0267 920A ST R0,-Y
0268 81AF LDD R26,Y+7
0269 85B8 LDD R27,Y+8
026A 81ED LDD R30,Y+5
026B 81FE LDD R31,Y+6
026C 3000 CPI R16,0
026D 0701 CPC R16,R17
026E F031 BEQ 0x0275
026F 95C8 LPM
0270 920D ST R0,X+
0271 9631 ADIW R30,1
0272 5001 SUBI R16,1
0273 4010 SBCI R17,0
0274 CFF7 RJMP 0x026C
0275 9009 LD R0,Y+
0276 91F9 LD R31,Y+
0277 91E9 LD R30,Y+
0278 91B9 LD R27,Y+
0279 91A9 LD R26,Y+
027A 9624 ADIW R28,4
027B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -