📄 usart.lst
字号:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E0062 CALL _main
_exit:
004A CFFF RJMP _exit
FILE: usart.c
(0001) /*上位机发送一个数据,下位返回相同的数据,在中断中接收数据,并发送数据*/
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) void usart_init(void)
(0005) {
(0006) UBRR=0X33;//fosc=8mhz,波特率9600
_usart_init:
004B E383 LDI R24,0x33
004C B989 OUT 0x09,R24
(0007) UCSRA=0X20;
004D E280 LDI R24,0x20
004E B98B OUT 0x0B,R24
(0008) UCSRC=0X86;
004F E886 LDI R24,0x86
0050 BD80 OUT 0x20,R24
(0009) UCSRB=0X98;
0051 E988 LDI R24,0x98
0052 B98A OUT 0x0A,R24
0053 9508 RET
_usart_receive:
d --> R16
0054 930A ST R16,-Y
0055 938A ST R24,-Y
0056 B70F IN R16,0x3F
0057 930A ST R16,-Y
(0010) }
(0011) #pragma interrupt_handler usart_receive:12
(0012) void usart_receive(void)
(0013) {
(0014) unsigned char d;
(0015) d=UDR;
0058 B10C IN R16,0x0C
(0016) UDR=0xff;
0059 EF8F LDI R24,0xFF
005A B98C OUT 0x0C,R24
(0017) while(!(UCSRA&(1<<TXC)))
005B 9B5E SBIS 0x0B,6
005C CFFE RJMP 0x005B
005D 9109 LD R16,Y+
005E BF0F OUT 0x3F,R16
005F 9189 LD R24,Y+
0060 9109 LD R16,Y+
0061 9518 RETI
(0018) ;
(0019)
(0020) }
(0021) void main(void)
(0022) {
(0023) CLI();
_main:
0062 94F8 BCLR 7
(0024) usart_init();
0063 DFE7 RCALL _usart_init
(0025) SEI();
0064 9478 BSET 7
(0026) while(1);
FILE: <library>
0065 CFFF RJMP 0x0065
0066 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -