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

📄 boot128.lst

📁 AVR16源代码 ICC编译器
💻 LST
📖 第 1 页 / 共 3 页
字号:
    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 + -