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

📄 boot128.lst

📁 AVR16源代码 ICC编译器
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    003A E5CF      LDI	R28,0x5F
    003B E0D4      LDI	R29,4
    003C BFCD      OUT	0x3D,R28
    003D BFDE      OUT	0x3E,R29
    003E 51C0      SUBI	R28,0x10
    003F 40D0      SBCI	R29,0
    0040 EA0A      LDI	R16,0xAA
    0041 8308      STD	Y+0,R16
    0042 2400      CLR	R0
    0043 E6E6      LDI	R30,0x66
    0044 E0F0      LDI	R31,0
    0045 E012      LDI	R17,2
    0046 3CE4      CPI	R30,0xC4
    0047 07F1      CPC	R31,R17
    0048 F011      BEQ	0x004B
    0049 9201      ST	R0,Z+
    004A CFFB      RJMP	0x0046
    004B 8300      STD	Z+0,R16
    004C E6ED      LDI	R30,0x6D
    004D E0F0      LDI	R31,0
    004E E6A0      LDI	R26,0x60
    004F E0B0      LDI	R27,0
    0050 E010      LDI	R17,0
    0051 37E3      CPI	R30,0x73
    0052 07F1      CPC	R31,R17
    0053 F021      BEQ	0x0058
    0054 95C8      LPM
    0055 9631      ADIW	R30,1
    0056 920D      ST	R0,X+
    0057 CFF9      RJMP	0x0051
    0058 940E005B  CALL	_main
_exit:
    005A CFFF      RJMP	_exit
_main:
  data                 --> Y+39
  SendBuf              --> Y+29
  ReceiveBuf           --> Y+14
  SendData             --> Y+4
  i                    --> R20
    005B 97E1      SBIW	R28,0x31
FILE: D:\avr16\atmegal16\main.c
(0001) #include	<iom16v.h>
(0002) #include	"Eeprom128.h"
(0003) #include	"Rtc8025.h"
(0004) #include	"Uart.h"
(0005) #include	"Crc.h"
(0006) 
(0007) #define		BOOT_TEST	0
(0008) 
(0009) //============================================================
(0010) //无线错误下载设置错误代码定义
(0011) #define		ERR_CONNECT	0x10//表示握手信号接收不对;
(0012) #define		ERR_COMMANDCRC	0x11//表示接收命令校验错误;
(0013) #define		ERR_DATACRC	0x12//表示接收数据不正确,要求丛发数据;
(0014) #define		ERR_OVERTIME	0x13//表示接收数据超时;
(0015) #define		ERR_NOCOMMAND	0x14//没有该指令;
(0016) #define		ERR_SETTING	0x15//设置参数失败;
(0017) #define		ERR_READTIME	0x16//读取系统时钟失败;
(0018) 
(0019) //============================================================
(0020) //定义写Flash一页的长度,同时声明数据Buffer
(0021) #define   	SPM_PAGESIZE 	256
(0022) unsigned char	SendData[100];       
(0023) unsigned char 	SendBuf[100];
(0024) unsigned char 	ReceiveBuf[150];
(0025) unsigned char 	data[SPM_PAGESIZE];
(0026) 
(0027) //============================================================ 
(0028) //定义接收数据的起点和写FLASH的起始地址
(0029) unsigned int 	bPiont = 0;
(0030) unsigned long 	address= 0x0000;
(0031) 
(0032) 
(0033) //============================================================
(0034) //函	数:void main(void)
(0035) //功	能:主函数
(0036) //入口参数:无
(0037) //返 回 值:无
(0038) //设 计 者:覃道堂 
(0039) //创作时间:2006-03-16
(0040) //修改时间:
(0041) //修改目的:
(0042) //============================================================
(0043) void main(void)
(0044) {
(0045)    
(0046)    unsigned char	SendData[10]="a000000000";     
    005C E584      LDI	R24,0x54
    005D E090      LDI	R25,0
    005E 01FE      MOVW	R30,R28
    005F 9634      ADIW	R30,4
    0060 E00A      LDI	R16,0xA
    0061 E010      LDI	R17,0
    0062 93FA      ST	R31,-Y
    0063 93EA      ST	R30,-Y
    0064 939A      ST	R25,-Y
    0065 938A      ST	R24,-Y
    0066 940E0263  CALL	asgncblk
(0047)    unsigned char 	SendBuf[10];
(0048)    unsigned char 	ReceiveBuf[15]="1234567810";
    0068 E58E      LDI	R24,0x5E
    0069 E090      LDI	R25,0
    006A 01FE      MOVW	R30,R28
    006B 963E      ADIW	R30,0xE
    006C E00F      LDI	R16,0xF
    006D E010      LDI	R17,0
    006E 93FA      ST	R31,-Y
    006F 93EA      ST	R30,-Y
    0070 939A      ST	R25,-Y
    0071 938A      ST	R24,-Y
    0072 940E0263  CALL	asgncblk
(0049)    unsigned char 	data[10];
(0050)    unsigned char    i;
(0051)    
(0052)    Init_Com();
    0074 940E0131  CALL	_Init_Com
(0053)    Uart_PutChar(0x01);
    0076 E001      LDI	R16,1
    0077 940E013A  CALL	_Uart_PutChar
(0054)    PC_Send_Ok(SendData,0x00,SendBuf,1);				//向PC 发送接收握手信号
    0079 E081      LDI	R24,1
    007A E090      LDI	R25,0
    007B 839B      STD	Y+3,R25
    007C 838A      STD	Y+2,R24
    007D 01CE      MOVW	R24,R28
    007E 964D      ADIW	R24,0x1D
    007F 8399      STD	Y+1,R25
    0080 8388      STD	Y+0,R24
    0081 2722      CLR	R18
    0082 018E      MOVW	R16,R28
    0083 5F0C      SUBI	R16,0xFC
    0084 4F1F      SBCI	R17,0xFF
    0085 940E01C3  CALL	_PC_Send_Ok
(0055)    Read_EEPROM(SendData,2,0x10);
    0087 E180      LDI	R24,0x10
    0088 E090      LDI	R25,0
    0089 8399      STD	Y+1,R25
    008A 8388      STD	Y+0,R24
    008B E022      LDI	R18,2
    008C 018E      MOVW	R16,R28
    008D 5F0C      SUBI	R16,0xFC
    008E 4F1F      SBCI	R17,0xFF
    008F 940E020C  CALL	_Read_EEPROM
(0056)    
(0057)     for(i=0;i<10;i++)
    0091 2744      CLR	R20
    0092 C009      RJMP	0x009C
(0058)     SendData[i]=0;
    0093 01CE      MOVW	R24,R28
    0094 9604      ADIW	R24,4
    0095 2FE4      MOV	R30,R20
    0096 27FF      CLR	R31
    0097 0FE8      ADD	R30,R24
    0098 1FF9      ADC	R31,R25
    0099 2422      CLR	R2
    009A 8220      STD	Z+0,R2
    009B 9543      INC	R20
    009C 304A      CPI	R20,0xA
    009D F3A8      BCS	0x0093
(0059) 	Write_EEPROM(&ReceiveBuf[5],2,0x10);//设置节点地址
    009E E180      LDI	R24,0x10
    009F E090      LDI	R25,0
    00A0 8399      STD	Y+1,R25
    00A1 8388      STD	Y+0,R24
    00A2 E022      LDI	R18,2
    00A3 018E      MOVW	R16,R28
    00A4 5E0D      SUBI	R16,0xED
    00A5 4F1F      SBCI	R17,0xFF
    00A6 940E01F2  CALL	_Write_EEPROM
(0060) 	Read_EEPROM(SendData,2,0x10);
    00A8 E180      LDI	R24,0x10
    00A9 E090      LDI	R25,0
    00AA 8399      STD	Y+1,R25
    00AB 8388      STD	Y+0,R24
    00AC E022      LDI	R18,2
    00AD 018E      MOVW	R16,R28
    00AE 5F0C      SUBI	R16,0xFC
    00AF 4F1F      SBCI	R17,0xFF
    00B0 940E020C  CALL	_Read_EEPROM
(0061) 	
(0062) 	for(i=0;i<10;i++)
    00B2 2744      CLR	R20
    00B3 C009      RJMP	0x00BD
(0063)     SendData[i]=0;
    00B4 01CE      MOVW	R24,R28
    00B5 9604      ADIW	R24,4
    00B6 2FE4      MOV	R30,R20
    00B7 27FF      CLR	R31
    00B8 0FE8      ADD	R30,R24
    00B9 1FF9      ADC	R31,R25
    00BA 2422      CLR	R2
    00BB 8220      STD	Z+0,R2
    00BC 9543      INC	R20
    00BD 304A      CPI	R20,0xA
    00BE F3A8      BCS	0x00B4
(0064) 	
(0065) 	Read_EEPROM(SendData,2,0x10);
    00BF E180      LDI	R24,0x10
    00C0 E090      LDI	R25,0
    00C1 8399      STD	Y+1,R25
    00C2 8388      STD	Y+0,R24
    00C3 E022      LDI	R18,2
    00C4 018E      MOVW	R16,R28
    00C5 5F0C      SUBI	R16,0xFC
    00C6 4F1F      SBCI	R17,0xFF
    00C7 940E020C  CALL	_Read_EEPROM
(0066) 	
(0067) 	while(1);
    00C9 CFFF      RJMP	0x00C9
    00CA 96E1      ADIW	R28,0x31
    00CB 9508      RET
_CRC16:
  ACC                  --> R20
  byte                 --> R22
  TOPBIT               --> R10
  k                    --> R14
  remainder            --> R12
  Len                  --> R18
  Message              --> R16
    00CC 940E0244  CALL	push_gset5
FILE: D:\avr16\atmegal16\Crc.c
(0001) #include	<iom128v.h>
(0002) #include	"Crc.h"
(0003) 
(0004) //============================================================
(0005) //函	数:unsigned short CRC16(unsigned char *Message, int Len)
(0006) //功	能:CRC16计算
(0007) //入口参数:Message 要进行CRC16计算字符串,Len字符串长度  
(0008) //返 回 值:CRC16计算结果  
(0009) //设 计 者:覃道堂 
(0010) //创作时间:2004-03-30
(0011) //修改时间:
(0012) //修改目的:
(0013) //============================================================
(0014) unsigned short CRC16(unsigned char *Message, int Len)
(0015) {
(0016) 	int 		byte;
(0017) 	unsigned char  	k;
(0018) 	unsigned short 	ACC,TOPBIT;
(0019)     	unsigned short 	remainder = 0x0000;
    00CE 24CC      CLR	R12
    00CF 24DD      CLR	R13
(0020) 
(0021) 	TOPBIT = 0x8000;
    00D0 E080      LDI	R24,0
    00D1 E890      LDI	R25,0x80
    00D2 015C      MOVW	R10,R24
(0022)    	for (byte = 0; byte < Len; ++byte)
    00D3 2766      CLR	R22
    00D4 2777      CLR	R23
    00D5 C025      RJMP	0x00FB
(0023)    	{
(0024) 		ACC = Message[byte];
    00D6 01FB      MOVW	R30,R22
    00D7 0FE0      ADD	R30,R16
    00D8 1FF1      ADC	R31,R17
    00D9 8140      LDD	R20,Z+0
    00DA 2755      CLR	R21
(0025) 		remainder ^= (ACC <<8);
    00DB 011A      MOVW	R2,R20
    00DC 2C32      MOV	R3,R2
    00DD 2422      CLR	R2
    00DE 24C2      EOR	R12,R2
    00DF 24D3      EOR	R13,R3
(0026)        	for (k = 8; k > 0; --k)
    00E0 E088      LDI	R24,0x8
    00E1 2EE8      MOV	R14,R24
    00E2 C013      RJMP	0x00F6
(0027)        	{
(0028)            	if (remainder & TOPBIT)
    00E3 0116      MOVW	R2,R12
    00E4 202A      AND	R2,R10
    00E5 203B      AND	R3,R11
    00E6 2022      TST	R2
    00E7 F411      BNE	0x00EA
    00E8 2033      TST	R3
    00E9 F049      BEQ	0x00F3
(0029) 			{
(0030)                	remainder = (remainder << 1) ^0x8005;
    00EA E085      LDI	R24,5
    00EB E890      LDI	R25,0x80
    00EC 0116      MOVW	R2,R12
    00ED 0C22      LSL	R2
    00EE 1C33      ROL	R3
    00EF 2628      EOR	R2,R24
    00F0 2639      EOR	R3,R25
    00F1 0161      MOVW	R12,R2
(0031) 			}
    00F2 C002      RJMP	0x00F5
(0032)            	else
(0033) 			{
(0034)            	 	remainder = (remainder << 1);
    00F3 0CCC      LSL	R12
    00F4 1CDD      ROL	R13
    00F5 94EA      DEC	R14
    00F6 2422      CLR	R2
    00F7 142E      CP	R2,R14
    00F8 F350      BCS	0x00E3
    00F9 5F6F      SUBI	R22,0xFF
    00FA 4F7F      SBCI	R23,0xFF
    00FB 1762      CP	R22,R18
    00FC 0773      CPC	R23,R19
    00FD F2C4      BLT	0x00D6
(0035) 			}
(0036) 		}
(0037)  	}
(0038)     	return (remainder^0x0000);
    00FE 0186      MOVW	R16,R12
    00FF 940E0241  CALL	pop_gset5
    0101 9508      RET
_Verify_Command:
  Crc_Tmp              --> R20
  Len                  --> R10
  ReceiveBuf           --> R22
    0102 940E0248  CALL	push_gset3
    0104 0159      MOVW	R10,R18
    0105 01B8      MOVW	R22,R16
(0039) } 
(0040) 
(0041) //============================================================
(0042) //函	数:unsigned char Verify_Command(unsigned char *ReceiveBuf,int Len)
(0043) //功	能:CRC校验处理
(0044) //入口参数:校验数据,校验数据长度
(0045) //返 回 值:0校验成功。否则不正确
(0046) //设 计 者:覃道堂 
(0047) //创作时间:2006-03-16
(0048) //修改时间:
(0049) //修改目的:
(0050) //============================================================
(0051) unsigned char Verify_Command(unsigned char *ReceiveBuf,int Len)
(0052) {
(0053) 	unsigned short 	Crc_Tmp;
(0054) 
(0055) 	if(ReceiveBuf[4] != (Len - 2))//整包数据长度减去校验和为命令长度
    0106 01C5      MOVW	R24,R10
    0107 9702      SBIW	R24,2
    0108 01FB      MOVW	R30,R22
    0109 8024      LDD	R2,Z+4
    010A 2433      CLR	R3
    010B 1628      CP	R2,R24
    010C 0639      CPC	R3,R25
    010D F011      BEQ	0x0110
(0056) 		return 1;
    010E E001      LDI	R16,1
    010F C01E      RJMP	0x012E
(0057) 
(0058) 	Crc_Tmp = ReceiveBuf[Len-2]*0x100 + ReceiveBuf[Len-1];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -