📄 temp.lst
字号:
__start:
__text_start:
13 E5CF LDI R28,0x5F
14 E0D4 LDI R29,4
15 BFCD OUT 0x3D,R28
16 BFDE OUT 0x3E,R29
17 51C0 SUBI R28,0x10
18 40D0 SBCI R29,0
19 EA0A LDI R16,0xAA
1A 8308 STD Y+0,R16
1B 2400 CLR R0
1C E6E0 LDI R30,0x60
1D E0F0 LDI R31,0
1E E010 LDI R17,0
1F 36E1 CPI R30,0x61
20 07F1 CPC R31,R17
21 F011 BEQ 0x0024
22 9201 ST R0,Z+
23 CFFB RJMP 0x001F
24 8300 STD Z+0,R16
25 E2E6 LDI R30,0x26
26 E0F0 LDI R31,0
27 E6A0 LDI R26,0x60
28 E0B0 LDI R27,0
29 E010 LDI R17,0
2A E000 LDI R16,0
2B BF0B OUT 0x3B,R16
2C 32E6 CPI R30,0x26
2D 07F1 CPC R31,R17
2E F021 BEQ 0x0033
2F 95C8 LPM
30 9631 ADIW R30,1
31 920D ST R0,X+
32 CFF9 RJMP 0x002C
33 D056 RCALL _main
_exit:
34 CFFF RJMP _exit
FILE: F:\AVR常用函数\BootLooderMage8\用户测试程序\delay.h
(0001) void delay_1us(void) //1us延时函数
(0002) {
(0003) asm("nop");
_delay_1us:
35 0000 NOP
36 9508 RET
_delay_nus:
i --> R20
n --> R10
37 D063 RCALL push_xgset300C
38 0158 MOVW R10,R16
(0004) }
(0005)
(0006) void delay_nus(unsigned int n) //N us延时函数
(0007) {
(0008) unsigned int i=0;
39 2744 CLR R20
3A 2755 CLR R21
(0009) for (i=0;i<n;i++)
3B C003 RJMP 0x003F
(0010) delay_1us();
3C DFF8 RCALL _delay_1us
3D 5F4F SUBI R20,0xFF
3E 4F5F SBCI R21,0xFF
3F 154A CP R20,R10
40 055B CPC R21,R11
41 F3D0 BCS 0x003C
42 C05D RJMP pop_xgset300C
(0011) }
(0012)
(0013) void delay_1ms(void) //1ms延时函数
(0014) {
(0015) unsigned int i;
(0016) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
43 2700 CLR R16
44 2711 CLR R17
45 C002 RJMP 0x0048
46 5F0F SUBI R16,0xFF
47 4F1F SBCI R17,0xFF
48 3704 CPI R16,0x74
49 E0E4 LDI R30,4
4A 071E CPC R17,R30
4B F3D0 BCS 0x0046
4C 9508 RET
_delay_nms:
i --> R20
n --> R10
4D D04D RCALL push_xgset300C
4E 0158 MOVW R10,R16
(0017) }
(0018)
(0019) void delay_nms(unsigned int n) //N ms延时函数
(0020) {
(0021) unsigned int i=0;
4F 2744 CLR R20
50 2755 CLR R21
(0022) for (i=0;i<n;i++)
51 C003 RJMP 0x0055
(0023) delay_1ms();
52 DFF0 RCALL _delay_1ms
53 5F4F SUBI R20,0xFF
54 4F5F SBCI R21,0xFF
55 154A CP R20,R10
56 055B CPC R21,R11
57 F3D0 BCS 0x0052
58 C047 RJMP pop_xgset300C
FILE: F:\AVR常用函数\BootLooderMage8\用户测试程序\boot.h
(0001) void ToBootloderCode(char uartt)
(0002) {if(uartt=='r')
_ToBootloderCode:
uartt --> R16
59 3702 CPI R16,0x72
5A F431 BNE 0x0061
(0003) {
(0004) GICR=0X01; //中断向量表移位允许
5B E081 LDI R24,1
5C BF8B OUT 0x3B,R24
(0005) GICR=0X00; //中断向量指向应用程序区
5D 2422 CLR R2
5E BE2B OUT 0x3B,R2
(0006) asm("jmp 0xc00");
5F 940C 0600 JMP 0x0600
(0007) }
61 9508 RET
FILE: F:\AVR常用函数\BootLooderMage8\用户测试程序\temp.c
(0001) //ICC-AVR application builder : 2008-10-20 09:40:14
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) #include "delay.h"
(0008) #include "boot.h"
(0009) void port_init(void)
(0010) {
(0011) PORTB = 0x00;
_port_init:
62 2422 CLR R2
63 BA28 OUT 0x18,R2
(0012) DDRB = 0xFF;
64 EF8F LDI R24,0xFF
65 BB87 OUT 0x17,R24
(0013) PORTC = 0x00; //m103 output only
66 BA25 OUT 0x15,R2
(0014) DDRC = 0x00;
67 BA24 OUT 0x14,R2
(0015) PORTD = 0x00;
68 BA22 OUT 0x12,R2
(0016) DDRD = 0x00;
69 BA21 OUT 0x11,R2
6A 9508 RET
(0017) }
(0018)
(0019) //UART0 initialize
(0020) // desired baud rate: 9600
(0021) // actual: baud rate:9615 (0.2%)
(0022) void uart0_init(void)
(0023) {
(0024) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
6B 2422 CLR R2
6C B82A OUT 0x0A,R2
(0025) UCSRA = 0x02;
6D E082 LDI R24,2
6E B98B OUT 0x0B,R24
(0026) UCSRC = BIT(URSEL) | 0x06;
6F E886 LDI R24,0x86
70 BD80 OUT 0x20,R24
(0027) UBRRL = 0x0C; //set baud rate lo
71 E08C LDI R24,0xC
72 B989 OUT 0x09,R24
(0028) UBRRH = 0x00; //set baud rate hi
73 BC20 OUT 0x20,R2
(0029) UCSRB = 0x98;
74 E988 LDI R24,0x98
75 B98A OUT 0x0A,R24
76 9508 RET
_uart0_rx_isr:
77 922A ST R2,-Y
78 B62F IN R2,0x3F
79 922A ST R2,-Y
(0030) }
(0031) unsigned char uartdata;
(0032) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
(0033) void uart0_rx_isr(void)
(0034) { uartdata=UDR;
7A B02C IN R2,0x0C
7B 9220 0060 STS uartdata,R2
7D 9029 LD R2,Y+
7E BE2F OUT 0x3F,R2
7F 9029 LD R2,Y+
80 9518 RETI
(0035) //uart has received a character in UDR
(0036) }
(0037) //call this routine to initialize all peripherals
(0038) void init_devices(void)
(0039) {
(0040) //stop errant interrupts until set up
(0041) CLI(); //disable all interrupts
_init_devices:
81 94F8 BCLR 7
(0042) port_init();
82 DFDF RCALL _port_init
(0043) uart0_init();
83 DFE7 RCALL _uart0_init
(0044) MCUCR = 0x00;
84 2422 CLR R2
85 BE25 OUT 0x35,R2
(0045) GICR = 0x00;
86 BE2B OUT 0x3B,R2
(0046) TIMSK = 0x00; //timer interrupt sources
87 BE29 OUT 0x39,R2
(0047) SEI(); //re-enable interrupts
88 9478 BSET 7
89 9508 RET
(0048) //all peripherals are now initialized
(0049) }
(0050)
(0051) void main(void)
(0052) {
(0053) init_devices();
_main:
8A DFF6 RCALL _init_devices
8B C00D RJMP 0x0099
(0054) while(1)
(0055) {
(0056) PORTB=0X00;
8C 2422 CLR R2
8D BA28 OUT 0x18,R2
(0057) delay_nms(100);
8E E604 LDI R16,0x64
8F E010 LDI R17,0
90 DFBC RCALL _delay_nms
(0058) PORTB=0XFF;
91 EF8F LDI R24,0xFF
92 BB88 OUT 0x18,R24
(0059) delay_nms(100);
93 E604 LDI R16,0x64
94 E010 LDI R17,0
95 DFB7 RCALL _delay_nms
(0060) ToBootloderCode(uartdata);
FILE: <library>
96 9100 0060 LDS R16,uartdata
98 DFC0 RCALL _ToBootloderCode
99 CFF2 RJMP 0x008C
9A 9508 RET
push_xgset300C:
9B 935A ST R21,-Y
9C 934A ST R20,-Y
9D 92BA ST R11,-Y
9E 92AA ST R10,-Y
9F 9508 RET
pop_xgset300C:
A0 90A9 LD R10,Y+
A1 90B9 LD R11,Y+
A2 9149 LD R20,Y+
A3 9159 LD R21,Y+
A4 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -