📄 usart.lst
字号:
__text_start:
__start:
003B E5CF LDI R28,0x5F
003C E0D8 LDI R29,0x8
003D BFCD OUT 0x3D,R28
003E BFDE OUT 0x3E,R29
003F 51C0 SUBI R28,0x10
0040 40D0 SBCI R29,0
0041 EA0A LDI R16,0xAA
0042 8308 STD Y+0,R16
0043 2400 CLR R0
0044 E8E2 LDI R30,0x82
0045 E0F0 LDI R31,0
0046 E010 LDI R17,0
0047 38E4 CPI R30,0x84
0048 07F1 CPC R31,R17
0049 F011 BEQ 0x004C
004A 9201 ST R0,Z+
004B CFFB RJMP 0x0047
004C 8300 STD Z+0,R16
004D E5E4 LDI R30,0x54
004E E0F0 LDI R31,0
004F E6A0 LDI R26,0x60
0050 E0B0 LDI R27,0
0051 E010 LDI R17,0
0052 37E6 CPI R30,0x76
0053 07F1 CPC R31,R17
0054 F021 BEQ 0x0059
0055 95C8 LPM
0056 9631 ADIW R30,1
0057 920D ST R0,X+
0058 CFF9 RJMP 0x0052
0059 940E008D CALL _main
_exit:
005B CFFF RJMP _exit
FILE: C:\DOCUME~1\pas\桌面\test\USART\USART.C
(0001) #include <iom32v.h>
(0002) #include <macros.h>
(0003) #include <stdio.h>
(0004) void port_init(void)
(0005) {
(0006) PORTA = 0x00;
_port_init:
005C 2422 CLR R2
005D BA2B OUT 0x1B,R2
(0007) DDRA = 0x00;
005E BA2A OUT 0x1A,R2
(0008) PORTB = 0x00;
005F BA28 OUT 0x18,R2
(0009) DDRB = 0x00;
0060 BA27 OUT 0x17,R2
(0010) PORTC = 0x00; //m103 output only
0061 BA25 OUT 0x15,R2
(0011) DDRC = 0x00;
0062 BA24 OUT 0x14,R2
(0012) PORTD = 0x02;
0063 E082 LDI R24,2
0064 BB82 OUT 0x12,R24
(0013) DDRD = 0xff;
0065 EF8F LDI R24,0xFF
0066 BB81 OUT 0x11,R24
0067 9508 RET
(0014) }
(0015)
(0016) //UART0 initialize
(0017) // desired baud rate: 9600
(0018) // actual: baud rate:9615 (0.2%)
(0019) // char size: 8 bit
(0020) // parity: Disabled
(0021) void uart0_init(void)
(0022) {
(0023) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
0068 2422 CLR R2
0069 B82A OUT 0x0A,R2
(0024) UCSRA = 0x00;
006A B82B OUT 0x0B,R2
(0025) UCSRC = BIT(URSEL) | 0x06;
006B E886 LDI R24,0x86
006C BD80 OUT 0x20,R24
(0026) UBRRL = 0x2F; //set baud rate lo
006D E28F LDI R24,0x2F
006E B989 OUT 0x09,R24
(0027) UBRRH = 0x00; //set baud rate hi
006F BC20 OUT 0x20,R2
(0028) UCSRB = 0x18;
0070 E188 LDI R24,0x18
0071 B98A OUT 0x0A,R24
0072 9508 RET
(0029) }
(0030)
(0031) //call this routine to initialize all peripherals
(0032) void init_devices(void)
(0033) {
(0034) //stop errant interrupts until set up
(0035) CLI(); //disable all interrupts
_init_devices:
0073 94F8 BCLR 7
(0036) port_init();
0074 DFE7 RCALL _port_init
(0037) uart0_init();
0075 DFF2 RCALL _uart0_init
(0038)
(0039) MCUCR = 0x00;
0076 2422 CLR R2
0077 BE25 OUT 0x35,R2
(0040) GICR = 0x00;
0078 BE2B OUT 0x3B,R2
(0041) TIMSK = 0x00; //timer interrupt sources
0079 BE29 OUT 0x39,R2
(0042) SEI(); //re-enable interrupts
007A 9478 BSET 7
007B 9508 RET
_Puts:
s --> R20
007C 940E00A0 CALL push_gset1
007E 01A8 MOVW R20,R16
(0043) //all peripherals are now initialized
(0044) }
(0045) void Puts( unsigned char *s) // \arg pointer to a string ending by \0
(0046) {
007F C006 RJMP 0x0086
(0047)
(0048) while (*s)
(0049) {
(0050) putchar(*s);
0080 01FA MOVW R30,R20
0081 8100 LDD R16,Z+0
0082 940E00B7 CALL _putchar
(0051) s++;
0084 5F4F SUBI R20,0xFF
0085 4F5F SBCI R21,0xFF
0086 01FA MOVW R30,R20
0087 8020 LDD R2,Z+0
0088 2022 TST R2
0089 F7B1 BNE 0x0080
008A 940E00A3 CALL pop_gset1
008C 9508 RET
(0052) }
(0053) }
(0054)
(0055) void main(void)
(0056) {
(0057) init_devices();
_main:
008D DFE5 RCALL _init_devices
008E C004 RJMP 0x0093
(0058) while(1)
(0059) {
(0060) puts("WWW.OURAVR.COM MY NAME IS PASYONG");
FILE: <library>
008F E600 LDI R16,0x60
0090 E010 LDI R17,0
0091 940E00CE CALL _puts
0093 CFFB RJMP 0x008F
0094 9508 RET
pop_gset2:
0095 E0E2 LDI R30,2
0096 940C00A4 JMP pop
push_gset5:
0098 92FA ST R15,-Y
0099 92EA ST R14,-Y
push_gset4:
009A 92DA ST R13,-Y
009B 92CA ST R12,-Y
push_gset3:
009C 92BA ST R11,-Y
009D 92AA ST R10,-Y
push_gset2:
009E 937A ST R23,-Y
009F 936A ST R22,-Y
push_gset1:
00A0 935A ST R21,-Y
00A1 934A ST R20,-Y
00A2 9508 RET
pop_gset1:
00A3 E0E1 LDI R30,1
pop:
00A4 9149 LD R20,Y+
00A5 9159 LD R21,Y+
00A6 FDE0 SBRC R30,0
00A7 9508 RET
00A8 9169 LD R22,Y+
00A9 9179 LD R23,Y+
00AA FDE1 SBRC R30,1
00AB 9508 RET
00AC 90A9 LD R10,Y+
00AD 90B9 LD R11,Y+
00AE FDE2 SBRC R30,2
00AF 9508 RET
00B0 90C9 LD R12,Y+
00B1 90D9 LD R13,Y+
00B2 FDE3 SBRC R30,3
00B3 9508 RET
00B4 90E9 LD R14,Y+
00B5 90F9 LD R15,Y+
00B6 9508 RET
_putchar:
00B7 940E00A0 CALL push_gset1
00B9 2F40 MOV R20,R16
00BA 90200082 LDS R2,_textmode
00BC 90300083 LDS R3,_textmode+1
00BE 2022 TST R2
00BF F411 BNE 0x00C2
00C0 2033 TST R3
00C1 F021 BEQ 0x00C6
00C2 304A CPI R20,0xA
00C3 F411 BNE 0x00C6
00C4 E00D LDI R16,0xD
00C5 DFF1 RCALL _putchar
00C6 9B5D SBIS 0x0B,5
00C7 CFFE RJMP 0x00C6
00C8 B94C OUT 0x0C,R20
00C9 2F04 MOV R16,R20
00CA 2711 CLR R17
00CB 940E00A3 CALL pop_gset1
00CD 9508 RET
_puts:
00CE 940E009E CALL push_gset2
00D0 2F60 MOV R22,R16
00D1 2F71 MOV R23,R17
00D2 2744 CLR R20
00D3 2755 CLR R21
00D4 C009 RJMP 0x00DE
00D5 2FE6 MOV R30,R22
00D6 2FF7 MOV R31,R23
00D7 8100 LDD R16,Z+0
00D8 940E00B7 CALL _putchar
00DA 5F4F SUBI R20,0xFF
00DB 4F5F SBCI R21,0xFF
00DC 5F6F SUBI R22,0xFF
00DD 4F7F SBCI R23,0xFF
00DE 2FE6 MOV R30,R22
00DF 2FF7 MOV R31,R23
00E0 8020 LDD R2,Z+0
00E1 2022 TST R2
00E2 F791 BNE 0x00D5
00E3 E00A LDI R16,0xA
00E4 940E00B7 CALL _putchar
00E6 E001 LDI R16,1
00E7 E010 LDI R17,0
00E8 940E0095 CALL pop_gset2
00EA 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -