📄 bldstk500.lst
字号:
__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 + -