📄 usart_0.lst
字号:
__text_start:
__start:
0130 EFCF LDI R28,0xFF
0131 E1D0 LDI R29,0x10
0132 BFCD OUT 0x3D,R28
0133 BFDE OUT 0x3E,R29
0134 51C0 SUBI R28,0x10
0135 40D0 SBCI R29,0
0136 EA0A LDI R16,0xAA
0137 8308 STD Y+0,R16
0138 2400 CLR R0
0139 EDE1 LDI R30,0xD1
013A E0F1 LDI R31,1
013B E011 LDI R17,1
013C 3EEC CPI R30,0xEC
013D 07F1 CPC R31,R17
013E F011 BEQ 0x0141
013F 9201 ST R0,Z+
0140 CFFB RJMP 0x013C
0141 8300 STD Z+0,R16
0142 E8EF LDI R30,0x8F
0143 E0F1 LDI R31,1
0144 E0A0 LDI R26,0
0145 E0B1 LDI R27,1
0146 E012 LDI R17,2
0147 36E0 CPI R30,0x60
0148 07F1 CPC R31,R17
0149 F021 BEQ 0x014E
014A 95C8 LPM
014B 9631 ADIW R30,1
014C 920D ST R0,X+
014D CFF9 RJMP 0x0147
014E 940E0151 CALL _main
_exit:
0150 CFFF RJMP _exit
FILE: E:\zhangxuehuan\uart_0\main.c
(0001) #include "includes.h"
(0002)
(0003)
(0004) /*main function of USART communication */
(0005) void main()
(0006) {
(0007) U8 i,rc,out1,out2;
(0008)
(0009) //port_init();
(0010) uart0_init();
_main:
out2 --> R22
out1 --> R10
rc --> R12
i --> R14
0151 940E01BE CALL _uart0_init
(0011)
(0012) printf("Main running ...");
0153 E000 LDI R16,0
0154 E011 LDI R17,1
0155 940E0544 CALL _printf
0157 C064 RJMP 0x01BC
(0013)
(0014) while(1)
(0015) {
(0016) uart0_putchar('a');
0158 E601 LDI R16,0x61
0159 940E01C9 CALL _uart0_putchar
(0017) uart0_putchar(0xd);uart0_putchar(0xa);
015B E00D LDI R16,0xD
015C 940E01C9 CALL _uart0_putchar
015E E00A LDI R16,0xA
015F 940E01C9 CALL _uart0_putchar
(0018) rc=uart0_waitchar();
0161 940E01EC CALL _uart0_waitchar
0163 2EC0 MOV R12,R16
(0019)
(0020) switch(rc)
0164 2D4C MOV R20,R12
0165 2755 CLR R21
0166 3340 CPI R20,0x30
0167 E0E0 LDI R30,0
0168 075E CPC R21,R30
0169 F0C1 BEQ 0x0182
016A 3341 CPI R20,0x31
016B E0E0 LDI R30,0
016C 075E CPC R21,R30
016D F139 BEQ 0x0195
016E 3342 CPI R20,0x32
016F E0E0 LDI R30,0
0170 075E CPC R21,R30
0171 F409 BNE 0x0173
0172 C036 RJMP 0x01A9
0173 3340 CPI R20,0x30
0174 E0E0 LDI R30,0
0175 075E CPC R21,R30
0176 F40C BGE 0x0178
0177 C044 RJMP 0x01BC
0178 3748 CPI R20,0x78
0179 E0E0 LDI R30,0
017A 075E CPC R21,R30
017B F009 BEQ 0x017D
017C C03F RJMP 0x01BC
(0021) {
(0022) case 'x':
(0023) WDR();
017D 95A8 WDR
(0024) WDTCR = 0x0E;
017E E08E LDI R24,0xE
017F BD81 OUT 0x21,R24
(0025) while(1);
0180 CFFF RJMP 0x0180
(0026) break;
0181 C03A RJMP 0x01BC
(0027)
(0028) case '0':
(0029) for(i=0;i<5;i++)
0182 24EE CLR R14
0183 C005 RJMP 0x0189
(0030) {
(0031) uart0_putchar('0'+i);
0184 2D0E MOV R16,R14
0185 5D00 SUBI R16,0xD0
0186 940E01C9 CALL _uart0_putchar
0188 94E3 INC R14
0189 2D8E MOV R24,R14
018A 3085 CPI R24,5
018B F3C0 BCS 0x0184
(0032) }
(0033) delay_ms(100);
018C E604 LDI R16,0x64
018D E010 LDI R17,0
018E 940E0239 CALL _delay_ms
(0034) port_init0();
0190 940E01F7 CALL _port_init0
(0035) out1 = PINA;
0192 B2A9 IN R10,0x19
(0036) out2 = PINC;
0193 B363 IN R22,0x13
(0037) break;
0194 C027 RJMP 0x01BC
(0038)
(0039) case '1':
(0040) for(i=5;i<10;i++)
0195 E085 LDI R24,5
0196 2EE8 MOV R14,R24
0197 C005 RJMP 0x019D
(0041) {
(0042) uart0_putchar('0'+i);
0198 2D0E MOV R16,R14
0199 5D00 SUBI R16,0xD0
019A 940E01C9 CALL _uart0_putchar
019C 94E3 INC R14
019D 2D8E MOV R24,R14
019E 308A CPI R24,0xA
019F F3C0 BCS 0x0198
(0043) }
(0044) delay_ms(100);
01A0 E604 LDI R16,0x64
01A1 E010 LDI R17,0
01A2 940E0239 CALL _delay_ms
(0045) port_init1();
01A4 940E020C CALL _port_init1
(0046) out1 = PINA;
01A6 B2A9 IN R10,0x19
(0047) out2 = PINC;
01A7 B363 IN R22,0x13
(0048) break;
01A8 C013 RJMP 0x01BC
(0049)
(0050) case '2':
(0051) for(i='a';i<='z';i++)
01A9 E681 LDI R24,0x61
01AA 2EE8 MOV R14,R24
01AB C005 RJMP 0x01B1
(0052) {
(0053) uart0_putchar('a'+i);
01AC 2D0E MOV R16,R14
01AD 590F SUBI R16,0x9F
01AE 940E01C9 CALL _uart0_putchar
01B0 94E3 INC R14
01B1 E78A LDI R24,0x7A
01B2 158E CP R24,R14
01B3 F7C0 BCC 0x01AC
(0054) }
(0055) delay_ms(100);
01B4 E604 LDI R16,0x64
01B5 E010 LDI R17,0
01B6 940E0239 CALL _delay_ms
(0056) port_init2();
01B8 940E0221 CALL _port_init2
(0057) out1 = PINA;
01BA B2A9 IN R10,0x19
(0058) out2 = PINC;
01BB B363 IN R22,0x13
01BC CF9B RJMP 0x0158
01BD 9508 RET
FILE: E:\zhangxuehuan\uart_0\myuart.c
(0001) #include"includes.h"
(0002)
(0003) /*USART initiate*/
(0004) void uart0_init(void)
(0005) {
(0006) UBRR0H = BAUD_H;
_uart0_init:
01BE 2422 CLR R2
01BF 92200090 STS 0x90,R2
(0007) UBRR0L = BAUD_L; //Set baud rate
01C1 E283 LDI R24,0x23
01C2 B989 OUT 0x09,R24
(0008) UCSR0C = 0x0E; //Set frame format: 8data, 2stop bit
01C3 E08E LDI R24,0xE
01C4 93800095 STS 0x95,R24
(0009) UCSR0B = ((0<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0)); //Enable Receiver and Transmitter
01C6 E188 LDI R24,0x18
01C7 B98A OUT 0x0A,R24
01C8 9508 RET
(0010) //1:接受中断
(0011) //0:关闭中断
(0012) }
(0013)
(0014)
(0015) //从RS232发送一个字节
(0016) void uart0_putchar(char c)
(0017) {
(0018) while(!(UCSR0A & 0x20));
_uart0_putchar:
c --> R16
01C9 9B5D SBIS 0x0B,5
01CA CFFE RJMP _uart0_putchar
(0019) UDR0 = c;
01CB B90C OUT 0x0C,R16
01CC 9508 RET
_uart0_putstr:
str --> R20
01CD 940E044A CALL push_gset1
01CF 01A8 MOVW R20,R16
(0020) }
(0021)
(0022) //输出一个字符串
(0023) void uart0_putstr(char* str)
(0024) {
01D0 C005 RJMP 0x01D6
(0025) while(*str)
(0026) {
(0027) uart0_putchar(*str);
01D1 01FA MOVW R30,R20
01D2 8100 LDD R16,Z+0
01D3 DFF5 RCALL _uart0_putchar
(0028) str++;
01D4 5F4F SUBI R20,0xFF
01D5 4F5F SBCI R21,0xFF
01D6 01FA MOVW R30,R20
01D7 8020 LDD R2,Z+0
01D8 2022 TST R2
01D9 F7B9 BNE 0x01D1
01DA 940E044D CALL pop_gset1
01DC 9508 RET
(0029) }
(0030) }
(0031)
(0032) //从RS232接收一个字节
(0033) int uart0_getchar(void)
(0034) {
(0035) unsigned char status,res;
(0036) if(!(UCSR0A & 0x80)) return -1; //no data to be received
_uart0_getchar:
res --> R16
status --> R18
01DD 995F SBIC 0x0B,7
01DE C003 RJMP 0x01E2
01DF EF0F LDI R16,0xFF
01E0 EF1F LDI R17,0xFF
01E1 C009 RJMP 0x01EB
(0037) status = UCSR0A;
01E2 B12B IN R18,0x0B
(0038) res = UDR0;
01E3 B10C IN R16,0x0C
(0039) if (status & 0x1c) return -1; // If error, return -1
01E4 2F82 MOV R24,R18
01E5 718C ANDI R24,0x1C
01E6 F019 BEQ 0x01EA
01E7 EF0F LDI R16,0xFF
01E8 EF1F LDI R17,0xFF
01E9 C001 RJMP 0x01EB
(0040) return res;
01EA 2711 CLR R17
01EB 9508 RET
_uart0_waitchar:
c --> R20
01EC 940E044A CALL push_gset1
(0041) }
(0042)
(0043) char uart0_waitchar(void)
(0044) {
(0045) int c;
(0046) while((c=uart0_getchar())==-1);
01EE DFEE RCALL _uart0_getchar
01EF 01A8 MOVW R20,R16
01F0 3F4F CPI R20,0xFF
01F1 EFEF LDI R30,0xFF
01F2 075E CPC R21,R30
01F3 F3D1 BEQ 0x01EE
(0047) return (char)c;
01F4 940E044D CALL pop_gset1
01F6 9508 RET
FILE: E:\zhangxuehuan\uart_0\myport.c
(0001) #include "includes.h"
(0002)
(0003) /*port initiate*/
(0004) void port_init0(void)
(0005) {
(0006) PORTA = 0xFF;
_port_init0:
01F7 EF8F LDI R24,0xFF
01F8 BB8B OUT 0x1B,R24
(0007) DDRA = 0xFF;
01F9 BB8A OUT 0x1A,R24
(0008) PORTB = 0x00;
01FA 2422 CLR R2
01FB BA28 OUT 0x18,R2
(0009) DDRB = 0x00;
01FC BA27 OUT 0x17,R2
(0010) PORTC = 0x00;
01FD BA25 OUT 0x15,R2
(0011) DDRC = 0xFF;
01FE BB84 OUT 0x14,R24
(0012) PORTD = 0x00;
01FF BA22 OUT 0x12,R2
(0013) DDRD = 0x00;
0200 BA21 OUT 0x11,R2
(0014) PORTE = 0x00;
0201 B823 OUT 0x03,R2
(0015) DDRE = 0x00;
0202 B822 OUT 0x02,R2
(0016) PORTF = 0x00;
0203 92200062 STS 0x62,R2
(0017) DDRF = 0x00;
0205 92200061 STS 0x61,R2
(0018) PORTG = 0x00;
0207 92200065 STS 0x65,R2
(0019) DDRG = 0x00;
0209 92200064 STS 0x64,R2
020B 9508 RET
(0020) }
(0021)
(0022) void port_init1(void)
(0023) {
(0024) PORTA = 0x00;
_port_init1:
020C 2422 CLR R2
020D BA2B OUT 0x1B,R2
(0025) DDRA = 0xFF;
020E EF8F LDI R24,0xFF
020F BB8A OUT 0x1A,R24
(0026) PORTB = 0x00;
0210 BA28 OUT 0x18,R2
(0027) DDRB = 0x00;
0211 BA27 OUT 0x17,R2
(0028) PORTC = 0xFF;
0212 BB85 OUT 0x15,R24
(0029) DDRC = 0xFF;
0213 BB84 OUT 0x14,R24
(0030) PORTD = 0x00;
0214 BA22 OUT 0x12,R2
(0031) DDRD = 0x00;
0215 BA21 OUT 0x11,R2
(0032) PORTE = 0x00;
0216 B823 OUT 0x03,R2
(0033) DDRE = 0x00;
0217 B822 OUT 0x02,R2
(0034) PORTF = 0x00;
0218 92200062 STS 0x62,R2
(0035) DDRF = 0x00;
021A 92200061 STS 0x61,R2
(0036) PORTG = 0x00;
021C 92200065 STS 0x65,R2
(0037) DDRG = 0x00;
021E 92200064 STS 0x64,R2
0220 9508 RET
(0038) }
(0039)
(0040) void port_init2(void)
(0041) {
(0042) PORTA = 0x55;
_port_init2:
0221 E585 LDI R24,0x55
0222 BB8B OUT 0x1B,R24
(0043) DDRA = 0xFF;
0223 EF8F LDI R24,0xFF
0224 BB8A OUT 0x1A,R24
(0044) PORTB = 0x00;
0225 2422 CLR R2
0226 BA28 OUT 0x18,R2
(0045) DDRB = 0x00;
0227 BA27 OUT 0x17,R2
(0046) PORTC = 0xCC;
0228 EC8C LDI R24,0xCC
0229 BB85 OUT 0x15,R24
(0047) DDRC = 0xFF;
022A EF8F LDI R24,0xFF
022B BB84 OUT 0x14,R24
(0048) PORTD = 0x00;
022C BA22 OUT 0x12,R2
(0049) DDRD = 0x00;
022D BA21 OUT 0x11,R2
(0050) PORTE = 0x00;
022E B823 OUT 0x03,R2
(0051) DDRE = 0x00;
022F B822 OUT 0x02,R2
(0052) PORTF = 0x00;
0230 92200062 STS 0x62,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -