📄 main.lis
字号:
.module main.c
.area data(ram, con, rel)
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\iccv7avr\AVRBOO~1/para.h
0001 .dbsym e flag _flag c
.area bss(ram, con, rel)
0000 .dbfile D:\iccv7avr\AVRBOO~1/para.h
0000 L2:
0000 .blkb 2
.area text(rom, con, rel)
0000 .dbfile D:\iccv7avr\AVRBOO~1/para.h
0000 .dbfile D:\iccv7avr\AVRBOO~1\main.c
0000 .dbfunc e main _main fV
0000 .dbsym s msgCounter L2 i
0000 ; rec_data -> R20
.even
0000 _main::
0000 .dbline -1
0000 .dbline 29
0000 ; /****************************************Copyright (c)**************************************************
0000 ; **
0000 ; ** 文 件 名: main.c
0000 ; ** 描 述: M16_BOOTLOADER
0000 ; ** 版 本: V1.0
0000 ; ** 主 控 芯 片: M16 晶振频率:7.3728MHZ, 波特率115200
0000 ; ** 编 译 环 境:ICCAVR 6.31A
0000 ;
0000 ; 描 述:使用STK500_2 协议的bootloader,监控芯片 M16,数据通讯RS232
0000 ; 已经非常精简的使用STK500_2 协议的MEGA16的bootloader.使用
0000 ; ATMEL AVRStudio 4.xx STK500工具的进行软件升级。
0000 ;
0000 ; **********************************************************************************************************/
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <string.h>
0000 ; #include "define.h"
0000 ; #include "function.h"
0000 ; #include "command.h"
0000 ; #include "para.h"
0000 ;
0000 ;
0000 ;
0000 ; /**********************************************************************
0000 ; functionName:void main(void)
0000 ; description:主函数
0000 ; **********************************************************************/
0000 ; void main(void)
0000 ; {
0000 .dbline 32
0000 ; uint08 rec_data;
0000 ; static uint16 msgCounter;
0000 ; allInit();
0000 0E940000 xcall _allInit
0004 A6C0 xjmp L4
0006 L3:
0006 .dbline 34
0006 ; while(1)
0006 ; {
0006 .dbline 35
0006 ; rec_data=getChar();
0006 0E940000 xcall _getChar
000A 402F mov R20,R16
000C .dbline 36
000C ; if(statusMachine == ST_START)
000C 80910600 lds R24,_statusMachine
0010 803F cpi R24,240
0012 79F4 brne L6
0014 .dbline 37
0014 ; {
0014 .dbline 38
0014 ; flag = 1;
0014 81E0 ldi R24,1
0016 80930000 sts _flag,R24
001A .dbline 39
001A ; TCCR1B = 0x00;
001A 2224 clr R2
001C 2EBC out 0x2e,R2
001E .dbline 40
001E ; if(rec_data==MESSAGE_START)
001E 0B31 cpi R16,27
0020 09F0 breq X1
0022 97C0 xjmp L7
0024 X1:
0024 .dbline 41
0024 ; {
0024 .dbline 42
0024 ; statusMachine = ST_GET_SEQ_NUM;
0024 81EF ldi R24,241
0026 80930600 sts _statusMachine,R24
002A .dbline 43
002A ; checkSum = MESSAGE_START;
002A 8BE1 ldi R24,27
002C 80930B00 sts _checkSum,R24
0030 .dbline 44
0030 ; }
0030 .dbline 45
0030 ; }
0030 90C0 xjmp L7
0032 L6:
0032 .dbline 46
0032 ; else if(statusMachine == ST_GET_SEQ_NUM)
0032 80910600 lds R24,_statusMachine
0036 813F cpi R24,241
0038 59F4 brne L10
003A .dbline 47
003A ; {
003A .dbline 48
003A ; seqNumber = rec_data;
003A 40930C00 sts _seqNumber,R20
003E .dbline 49
003E ; checkSum ^= rec_data;
003E 20900B00 lds R2,_checkSum
0042 2426 eor R2,R20
0044 20920B00 sts _checkSum,R2
0048 .dbline 50
0048 ; statusMachine = ST_MSG_SIZE_1;
0048 82EF ldi R24,242
004A 80930600 sts _statusMachine,R24
004E .dbline 51
004E ; }
004E 81C0 xjmp L11
0050 L10:
0050 .dbline 52
0050 ; else if(statusMachine == ST_MSG_SIZE_1)
0050 80910600 lds R24,_statusMachine
0054 823F cpi R24,242
0056 A9F4 brne L12
0058 .dbline 53
0058 ; {
0058 .dbline 54
0058 ; msgSize = rec_data;
0058 242E mov R2,R20
005A 3324 clr R3
005C 30920500 sts _msgSize+1,R3
0060 20920400 sts _msgSize,R2
0064 .dbline 55
0064 ; msgSize <<=8;
0064 322C mov R3,R2
0066 2224 clr R2
0068 30920500 sts _msgSize+1,R3
006C 20920400 sts _msgSize,R2
0070 .dbline 56
0070 ; checkSum ^= rec_data;
0070 20900B00 lds R2,_checkSum
0074 2426 eor R2,R20
0076 20920B00 sts _checkSum,R2
007A .dbline 57
007A ; statusMachine = ST_MSG_SIZE_2;
007A 83EF ldi R24,243
007C 80930600 sts _statusMachine,R24
0080 .dbline 58
0080 ; }
0080 68C0 xjmp L13
0082 L12:
0082 .dbline 59
0082 ; else if(statusMachine == ST_MSG_SIZE_2)
0082 80910600 lds R24,_statusMachine
0086 833F cpi R24,243
0088 A9F4 brne L14
008A .dbline 60
008A ; {
008A .dbline 61
008A ; msgSize |= rec_data;
008A 242E mov R2,R20
008C 3324 clr R3
008E 40900400 lds R4,_msgSize
0092 50900500 lds R5,_msgSize+1
0096 4228 or R4,R2
0098 5328 or R5,R3
009A 50920500 sts _msgSize+1,R5
009E 40920400 sts _msgSize,R4
00A2 .dbline 62
00A2 ; checkSum ^= rec_data;
00A2 20900B00 lds R2,_checkSum
00A6 2426 eor R2,R20
00A8 20920B00 sts _checkSum,R2
00AC .dbline 63
00AC ; statusMachine = ST_GET_TOKEN;
00AC 84EF ldi R24,244
00AE 80930600 sts _statusMachine,R24
00B2 .dbline 64
00B2 ; }
00B2 4FC0 xjmp L15
00B4 L14:
00B4 .dbline 65
00B4 ; else if(statusMachine == ST_GET_TOKEN)
00B4 80910600 lds R24,_statusMachine
00B8 843F cpi R24,244
00BA A9F4 brne L16
00BC .dbline 66
00BC ; {
00BC .dbline 67
00BC ; if(rec_data==TOKEN)
00BC 4E30 cpi R20,14
00BE 79F4 brne L18
00C0 .dbline 68
00C0 ; {
00C0 .dbline 69
00C0 ; checkSum ^= rec_data;
00C0 20900B00 lds R2,_checkSum
00C4 2426 eor R2,R20
00C6 20920B00 sts _checkSum,R2
00CA .dbline 70
00CA ; statusMachine = ST_GET_DATA;
00CA 85EF ldi R24,245
00CC 80930600 sts _statusMachine,R24
00D0 .dbline 71
00D0 ; msgCounter=0;
00D0 2224 clr R2
00D2 3324 clr R3
00D4 30920100 sts L2+1,R3
00D8 20920000 sts L2,R2
00DC .dbline 72
00DC ; }
00DC 3AC0 xjmp L17
00DE L18:
00DE .dbline 74
00DE ; else
00DE ; {
00DE .dbline 75
00DE ; statusMachine = ST_START;
00DE 80EF ldi R24,240
00E0 80930600 sts _statusMachine,R24
00E4 .dbline 76
00E4 ; }
00E4 .dbline 77
00E4 ; }
00E4 36C0 xjmp L17
00E6 L16:
00E6 .dbline 78
00E6 ; else if(statusMachine == ST_GET_DATA)
00E6 80910600 lds R24,_statusMachine
00EA 853F cpi R24,245
00EC 21F5 brne L20
00EE .dbline 79
00EE ; {
00EE .dbline 80
00EE ; msg_buffer[msgCounter++]=rec_data;
00EE 20900000 lds R2,L2
00F2 30900100 lds R3,L2+1
00F6 C101 movw R24,R2
00F8 0196 adiw R24,1
00FA 90930100 sts L2+1,R25
00FE 80930000 sts L2,R24
0102 80E0 ldi R24,<_msg_buffer
0104 90E0 ldi R25,>_msg_buffer
0106 F101 movw R30,R2
0108 E80F add R30,R24
010A F91F adc R31,R25
010C 4083 std z+0,R20
010E .dbline 81
010E ; checkSum ^= rec_data;
010E 20900B00 lds R2,_checkSum
0112 2426 eor R2,R20
0114 20920B00 sts _checkSum,R2
0118 .dbline 82
0118 ; if(msgCounter==msgSize)
0118 20900400 lds R2,_msgSize
011C 30900500 lds R3,_msgSize+1
0120 40900000 lds R4,L2
0124 50900100 lds R5,L2+1
0128 4214 cp R4,R2
012A 5304 cpc R5,R3
012C 91F4 brne L21
012E .dbline 83
012E ; {
012E .dbline 84
012E ; statusMachine = ST_GET_CHECK;
012E 86EF ldi R24,246
0130 80930600 sts _statusMachine,R24
0134 .dbline 85
0134 ; }
0134 .dbline 86
0134 ; }
0134 0EC0 xjmp L21
0136 L20:
0136 .dbline 87
0136 ; else if(statusMachine == ST_GET_CHECK)
0136 80910600 lds R24,_statusMachine
013A 863F cpi R24,246
013C 51F4 brne L24
013E .dbline 88
013E ; {
013E .dbline 89
013E ; if(rec_data == checkSum)
013E 20900B00 lds R2,_checkSum
0142 4215 cp R20,R2
0144 19F4 brne L26
0146 .dbline 90
0146 ; {
0146 .dbline 91
0146 ; packageProcess(seqNumber);
0146 00910C00 lds R16,_seqNumber
014A 05D0 xcall _packageProcess
014C .dbline 92
014C ; }
014C L26:
014C .dbline 93
014C ; statusMachine = ST_START;
014C 80EF ldi R24,240
014E 80930600 sts _statusMachine,R24
0152 .dbline 94
0152 ; }
0152 L24:
0152 L21:
0152 L17:
0152 L15:
0152 L13:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -