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

📄 bldstk500.lst

📁 程序下载在M16中后
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    1C2F E001      LDI	R16,1
    1C30 BF05      OUT	0x35,R16
    1C31 E002      LDI	R16,2
    1C32 BF05      OUT	0x35,R16
    1C33 E5CF      LDI	R28,0x5F
    1C34 E0D4      LDI	R29,4
    1C35 BFCD      OUT	0x3D,R28
    1C36 BFDE      OUT	0x3E,R29
    1C37 51C0      SUBI	R28,0x10
    1C38 40D0      SBCI	R29,0
    1C39 EA0A      LDI	R16,0xAA
    1C3A 8308      STD	Y+0,R16
    1C3B 2400      CLR	R0
    1C3C E6EA      LDI	R30,0x6A
    1C3D E0F0      LDI	R31,0
    1C3E E011      LDI	R17,1
    1C3F 3AE3      CPI	R30,0xA3
    1C40 07F1      CPC	R31,R17
    1C41 F011      BEQ	0x1C44
    1C42 9201      ST	R0,Z+
    1C43 CFFB      RJMP	0x1C3F
    1C44 8300      STD	Z+0,R16
    1C45 E5E4      LDI	R30,0x54
    1C46 E3F8      LDI	R31,0x38
    1C47 E6A0      LDI	R26,0x60
    1C48 E0B0      LDI	R27,0
    1C49 E318      LDI	R17,0x38
    1C4A 35EE      CPI	R30,0x5E
    1C4B 07F1      CPC	R31,R17
    1C4C F021      BEQ	0x1C51
    1C4D 95C8      LPM
    1C4E 9631      ADIW	R30,1
    1C4F 920D      ST	R0,X+
    1C50 CFF9      RJMP	0x1C4A
    1C51 D04B      RCALL	_main
_exit:
    1C52 CFFF      RJMP	_exit
FILE: D:\iccv7avr\AVRBOO~1\uart.c
(0001) /****************************************Copyright (c)******************************
(0002) 文件名:			uart.c
(0003) 修改日期:		2005-7-9 20:36
(0004) 描述:			ATmega16L的操作函数
(0005) 版本:			V1.0
(0006) 主控  芯片:		M16  晶振频率:7.3728MHZ, 
(0007) ********************************************************************************/
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) #include "define.h"
(0011) #include "function.h"
(0012) #include "extern.h"
(0013) 
(0014) /**********************************************************************
(0015) functionName:putChar(uint8 sentData)
(0016) description:通过串口发送数据sentData
(0017) **********************************************************************/
(0018) void putChar(uint08 sentData)
(0019) {
(0020)  	 while(!(UCSRA&(1<<UDRE)));
_putChar:
  sentData             --> R16
    1C53 9B5D      SBIS	0x0B,5
    1C54 CFFE      RJMP	_putChar
(0021) 	 UDR=sentData;
    1C55 B90C      OUT	0x0C,R16
    1C56 9508      RET
(0022) }
(0023) 
(0024) /**********************************************************************
(0025) functionName:putChars(uint08 *sentData)
(0026) description:通过串口接受数据
(0027) **********************************************************************/
(0028) uint08 getChar(void)
(0029) {
_getChar:
    1C57 C00C      RJMP	0x1C64
(0030) 	while(!(UCSRA&BIT(RXC)))
(0031) 	{
(0032) 	 	if(!flag)
    1C58 90200060  LDS	R2,flag
    1C5A 2022      TST	R2
    1C5B F441      BNE	0x1C64
(0033) 			if(TCNT1 < 20)
    1C5C B58C      IN	R24,0x2C
    1C5D B59D      IN	R25,0x2D
    1C5E 3184      CPI	R24,0x14
    1C5F E0E0      LDI	R30,0
    1C60 079E      CPC	R25,R30
    1C61 F410      BCC	0x1C64
(0034) 			asm("jmp 0x000000\n");
    1C62 940C0000  JMP	0x0
    1C64 9B5F      SBIS	0x0B,7
    1C65 CFF2      RJMP	0x1C58
(0035) 	};
(0036) 	return(UDR);
    1C66 B10C      IN	R16,0x0C
    1C67 9508      RET
FILE: D:\iccv7avr\AVRBOO~1\initial.c
(0001) /****************************************Copyright (c)****************************
(0002) 文件  名:		initial.c
(0003) 修改日期:		2006-1-23 13:47
(0004) 描述:			初始化程序
(0005) 版本:			V1.0
(0006) 主控芯片:		M16  晶振频率:7.3728MHZ, 
(0007) ********************************************************************************/
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) #include "define.h"
(0011) #include "extern.h"
(0012) #include "function.h"
(0013) #include "command.h"
(0014) 
(0015) 
(0016) /**********************************************************************
(0017) functionName:void paraInit(void)
(0018) description:变量初始化
(0019) **********************************************************************/
(0020) void globalParaInit(void)
(0021) {
(0022) 	statusMachine = ST_START;
_globalParaInit:
    1C68 EF80      LDI	R24,0xF0
    1C69 93800070  STS	statusMachine,R24
(0023) 	paramControllerInit=0x00;
    1C6B 2422      CLR	R2
    1C6C 92200072  STS	paramControllerInit,R2
(0024) 	prgMode=0;
    1C6E 92200071  STS	prgMode,R2
    1C70 9508      RET
(0025) 
(0026) }
(0027) //TIMER1 initialize - prescale:1024
(0028) // WGM: 0) Normal, TOP=0xFFFF
(0029) // desired value: 15Sec
(0030) // actual value: 15.000Sec (0.0%)
(0031) void timer1_init(void)
(0032) {
(0033)  TCCR1B = 0x00; //stop
_timer1_init:
    1C71 2422      CLR	R2
    1C72 BC2E      OUT	0x2E,R2
(0034)  TCNT1H = 0x73; //setup
    1C73 E783      LDI	R24,0x73
    1C74 BD8D      OUT	0x2D,R24
(0035)  TCNT1L = 0x5F;
    1C75 E58F      LDI	R24,0x5F
    1C76 BD8C      OUT	0x2C,R24
(0036)  TCCR1A = 0x00;
    1C77 BC2F      OUT	0x2F,R2
(0037)  TCCR1B = 0x05; //start Timer
    1C78 E085      LDI	R24,5
    1C79 BD8E      OUT	0x2E,R24
    1C7A 9508      RET
(0038) }
(0039) 
(0040) /**********************************************************************
(0041) functionName:void uart0Init(void)
(0042) description:串口初始化函数
(0043) desired baud rate: UBRRL决定
(0044) UBRRL = 1; //115200
(0045) UBRRL = 3; //57600
(0046) UBRRL = 11; //19200
(0047) UBRRL = 23; //9600
(0048) char size: 8 bit
(0049) parity: Disabled
(0050) **********************************************************************/
(0051) void uart0Init(void)
(0052) {
(0053)  	UCSRB = 0x00; 		//disable while setting baud rate
_uart0Init:
    1C7B 2422      CLR	R2
    1C7C B82A      OUT	0x0A,R2
(0054)  	UCSRA = 0x00;
    1C7D B82B      OUT	0x0B,R2
(0055)  	UCSRC = 0x86;
    1C7E E886      LDI	R24,0x86
    1C7F BD80      OUT	0x20,R24
(0056) //	UBRRL = 1; 	//set baud rate lo
(0057) 	UBRRL = 3; 	//set baud rate lo
    1C80 E083      LDI	R24,3
    1C81 B989      OUT	0x09,R24
(0058)  	UBRRH = 0x00; 		//set baud rate hi
    1C82 BC20      OUT	0x20,R2
(0059) // 	UCSRB = 0x98;		//使用中断
(0060) 	UCSRB = 0x18;
    1C83 E188      LDI	R24,0x18
    1C84 B98A      OUT	0x0A,R24
    1C85 9508      RET
(0061) 	
(0062) }
(0063) 
(0064) 
(0065) 
(0066) /**********************************************************************
(0067) functionName:void portInit(void)
(0068) description:M16 IO初始化
(0069) **********************************************************************/
(0070) void portInit(void)
(0071) {
(0072)  	PORTA=0xFF;
_portInit:
    1C86 EF8F      LDI	R24,0xFF
    1C87 BB8B      OUT	0x1B,R24
(0073)  	DDRA=0x00;
    1C88 2422      CLR	R2
    1C89 BA2A      OUT	0x1A,R2
(0074)  	PORTB=0xAA;
    1C8A EA8A      LDI	R24,0xAA
    1C8B BB88      OUT	0x18,R24
(0075)  	DDRB=0xFF;
    1C8C EF8F      LDI	R24,0xFF
    1C8D BB87      OUT	0x17,R24
(0076)  	PORTC=0xFF;
    1C8E BB85      OUT	0x15,R24
(0077)  	DDRC=0x00;
    1C8F BA24      OUT	0x14,R2
(0078)  	PORTD=0xFF;
    1C90 BB82      OUT	0x12,R24
(0079)  	DDRD=0x00;
    1C91 BA21      OUT	0x11,R2
    1C92 9508      RET
(0080) }
(0081) 
(0082) /**********************************************************************
(0083) functionName:void allInit(void)
(0084) description:初始化所有的器件以及变量
(0085) **********************************************************************/
(0086) void allInit(void)
(0087) {
(0088)  	//开始初始化工作
(0089)  	CLI(); 				//关闭中断源 
_allInit:
    1C93 94F8      BCLR	7
(0090)  	globalParaInit();		//变量初始化
    1C94 DFD3      RCALL	_globalParaInit
(0091)  	portInit();			//M16 IO初始化
    1C95 DFF0      RCALL	_portInit
(0092) 	uart0Init();			//串口初始化函数
    1C96 DFE4      RCALL	_uart0Init
(0093) 	timer1_init();
    1C97 DFD9      RCALL	_timer1_init
(0094) 	MCUCR = 0x00;
    1C98 2422      CLR	R2
    1C99 BE25      OUT	0x35,R2
(0095)  	GICR  = 0x00;
    1C9A BE2B      OUT	0x3B,R2
(0096)  	TIMSK = 0x00; 			
    1C9B BE29      OUT	0x39,R2
    1C9C 9508      RET
FILE: D:\iccv7avr\AVRBOO~1\main.c
(0001) /****************************************Copyright (c)**************************************************                                                 
(0002) **                              
(0003) ** 文   件    名: main.c
(0004) ** 描         述: M16_BOOTLOADER
(0005) ** 版	      本: V1.0
(0006) ** 主  控  芯 片: M16  晶振频率:7.3728MHZ, 波特率115200
(0007) ** 编  译  环 境:ICCAVR 6.31A	
(0008) 
(0009) 描    述:使用STK500_2 协议的bootloader,监控芯片 M16,数据通讯RS232
(0010) 		  已经非常精简的使用STK500_2 协议的MEGA16的bootloader.使用
(0011) 		  ATMEL AVRStudio 4.xx STK500工具的进行软件升级。
(0012) 		  	
(0013) **********************************************************************************************************/
(0014) #include <iom16v.h>
(0015) #include <macros.h>
(0016) #include <string.h>
(0017) #include "define.h"
(0018) #include "function.h"
(0019) #include "command.h"
(0020) #include "para.h"
(0021) 
(0022) 
(0023) 
(0024) /**********************************************************************
(0025) functionName:void main(void)
(0026) description:主函数
(0027) **********************************************************************/
(0028) void main(void)
(0029) {
(0030) 	uint08 rec_data;
(0031) 	static uint16 msgCounter;
(0032) 	allInit();
_main:
  rec_data             --> R20
    1C9D 940E1C93  CALL	_allInit
    1C9F C0A6      RJMP	0x1D46
(0033) 	while(1)
(0034) 	{
(0035) 		rec_data=getChar();
    1CA0 940E1C57  CALL	_getChar
    1CA2 2F40      MOV	R20,R16
(0036) 		if(statusMachine == ST_START)
    1CA3 91800070  LDS	R24,statusMachine
    1CA5 3F80      CPI	R24,0xF0
    1CA6 F479      BNE	0x1CB6
(0037) 		{
(0038) 		 	flag = 1;
    1CA7 E081      LDI	R24,1
    1CA8 93800060  STS	flag,R24
(0039) 			TCCR1B = 0x00;
    1CAA 2422      CLR	R2
    1CAB BC2E      OUT	0x2E,R2
(0040) 			if(rec_data==MESSAGE_START)
    1CAC 310B      CPI	R16,0x1B
    1CAD F009      BEQ	0x1CAF
    1CAE C097      RJMP	0x1D46
(0041) 			{
(0042) 				statusMachine = ST_GET_SEQ_NUM;	
    1CAF EF81      LDI	R24,0xF1
    1CB0 93800070  STS	statusMachine,R24
(0043) 				checkSum = MESSAGE_START;
    1CB2 E18B      LDI	R24,0x1B
    1CB3 93800075  STS	checkSum,R24
(0044) 			}
(0045) 		}
    1CB5 C090      RJMP	0x1D46
(0046) 		else if(statusMachine == ST_GET_SEQ_NUM)
    1CB6 91800070  LDS	R24,statusMachine
    1CB8 3F81      CPI	R24,0xF1
    1CB9 F459      BNE	0x1CC5
(0047) 		{
(0048) 			seqNumber = rec_data;
    1CBA 93400076  STS	seqNumber,R20
(0049) 			checkSum ^= rec_data; 
    1CBC 90200075  LDS	R2,checkSum
    1CBE 2624      EOR	R2,R20
    1CBF 92200075  STS	checkSum,R2
(0050) 			statusMachine = ST_MSG_SIZE_1;
    1CC1 EF82      LDI	R24,0xF2
    1CC2 93800070  STS	statusMachine,R24
(0051) 		}
    1CC4 C081      RJMP	0x1D46
(0052) 		else if(statusMachine == ST_MSG_SIZE_1)
    1CC5 91800070  LDS	R24,statusMachine
    1CC7 3F82      CPI	R24,0xF2
    1CC8 F4A9      BNE	0x1CDE
(0053) 		{
(0054) 			msgSize = rec_data;
    1CC9 2E24      MOV	R2,R20
    1CCA 2433      CLR	R3
    1CCB 9230006F  STS	msgSize+1,R3
    1CCD 9220006E  STS	msgSize,R2
(0055) 			msgSize <<=8;
    1CCF 2C32      MOV	R3,R2
    1CD0 2422      CLR	R2
    1CD1 9230006F  STS	msgSize+1,R3
    1CD3 9220006E  STS	msgSize,R2
(0056) 			checkSum ^= rec_data;
    1CD5 90200075  LDS	R2,checkSum
    1CD7 2624      EOR	R2,R20
    1CD8 92200075  STS	checkSum,R2
(0057) 			statusMachine = ST_MSG_SIZE_2;	
    1CDA EF83      LDI	R24,0xF3
    1CDB 93800070  STS	statusMachine,R24
(0058) 		}
    1CDD C068      RJMP	0x1D46
(0059) 		else if(statusMachine == ST_MSG_SIZE_2)
    1CDE 91800070  LDS	R24,statusMachine
    1CE0 3F83      CPI	R24,0xF3
    1CE1 F4A9      BNE	0x1CF7
(0060) 		{
(0061) 			msgSize |= rec_data;
    1CE2 2E24      MOV	R2,R20
    1CE3 2433      CLR	R3
    1CE4 9040006E  LDS	R4,msgSize
    1CE6 9050006F  LDS	R5,msgSize+1
    1CE8 2842      OR	R4,R2
    1CE9 2853      OR	R5,R3
    1CEA 9250006F  STS	msgSize+1,R5
    1CEC 9240006E  STS	msgSize,R4
(0062) 			checkSum ^= rec_data;
    1CEE 90200075  LDS	R2,checkSum
    1CF0 2624      EOR	R2,R20
    1CF1 92200075  STS	checkSum,R2
(0063) 			statusMachine = ST_GET_TOKEN;	
    1CF3 EF84      LDI	R24,0xF4
    1CF4 93800070  STS	statusMachine,R24
(0064) 		}
    1CF6 C04F      RJMP	0x1D46
(0065) 		else if(statusMachine == ST_GET_TOKEN)
    1CF7 91800070  LDS	R24,statusMachine
    1CF9 3F84      CPI	R24,0xF4
    1CFA F4A9      BNE	0x1D10
(0066) 		{
(0067) 			if(rec_data==TOKEN)
    1CFB 304E      CPI	R20,0xE
    1CFC F479      BNE	0x1D0C
(0068) 			{
(0069) 				checkSum ^= rec_data;
    1CFD 90200075  LDS	R2,checkSum
    1CFF 2624      EOR	R2,R20
    1D00 92200075  STS	checkSum,R2
(0070) 				statusMachine = ST_GET_DATA;
    1D02 EF85      LDI	R24,0xF5
    1D03 93800070  STS	statusMachine,R24
(0071) 				msgCounter=0;
    1D05 2422      CLR	R2
    1D06 2433      CLR	R3
    1D07 9230006B  STS	msgCounter+1,R3
    1D09 9220006A  STS	msgCounter,R2
(0072) 			}
    1D0B C03A      RJMP	0x1D46
(0073) 			else
(0074) 			{
(0075) 				statusMachine = ST_START;
    1D0C EF80      LDI	R24,0xF0
    1D0D 93800070  STS	statusMachine,R24
(0076) 			}
(0077) 		}
    1D0F C036      RJMP	0x1D46
(0078) 		else if(statusMachine == ST_GET_DATA)
    1D10 91800070  LDS	R24,statusMachine
    1D12 3F85      CPI	R24,0xF5
    1D13 F521      BNE	0x1D38
(0079) 		{
(0080) 			msg_buffer[msgCounter++]=rec_data;
    1D14 9020006A  LDS	R2,msgCounter
    1D16 9030006B  LDS	R3,msgCounter+1
    1D18 01C1      MOVW	R24,R2
    1D19 9601      ADIW	R24,1
    1D1A 9390006B  STS	msgCounter+1,R25
    1D1C 9380006A  STS	msgCounter,R24
    1D1E E787      LDI	R24,0x77
    1D1F E090      LDI	R25,0
    1D20 01F1      MOVW	R30,R2
    1D21 0FE8      ADD	R30,R24
    1D22 1FF9      ADC	R31,R25
    1D23 8340      STD	Z+0,R20
(0081) 			checkSum ^= rec_data;
    1D24 90200075  LDS	R2,checkSum
    1D26 2624      EOR	R2,R20
    1D27 92200075  STS	checkSum,R2
(0082) 			if(msgCounter==msgSize)
    1D29 9020006E  LDS	R2,msgSize
    1D2B 9030006F  LDS	R3,msgSize+1
    1D2D 9040006A  LDS	R4,msgCounter
    1D2F 9050006B  LDS	R5,msgCounter+1
    1D31 1442      CP	R4,R2
    1D32 0453      CPC	R5,R3
    1D33 F491      BNE	0x1D46
(0083) 			{
(0084) 				statusMachine = ST_GET_CHECK;
    1D34 EF86      LDI	R24,0xF6
    1D35 93800070  STS	statusMachine,R24
(0085) 			}
(0086) 		}
    1D37 C00E      RJMP	0x1D46
(0087) 		else if(statusMachine == ST_GET_CHECK)
    1D38 91800070  LDS	R24,statusMachine
    1D3A 3F86      CPI	R24,0xF6

⌨️ 快捷键说明

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