📄 uart.lst
字号:
__text_start:
__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 36E1 CPI R30,0x61
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 940E0070 CALL _main
_exit:
004A CFFF RJMP _exit
FILE: F:\开发\C程序开发\AVR\usart\usart.c
(0001) //Project : USART
(0002) //Writer :youhu
(0003) //ICC-AVR application builder : 2007-4-24 16:45:33
(0004) // Target : M16
(0005) // Crystal: 8.0000Mhz
(0006) // USART initialize
(0007) // desired baud rate: 115200
(0008) // actual: baud rate:111111 (3.7%)
(0009) // char size: 8 bit
(0010) // parity: Disabled
(0011)
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014) unsigned char mes;
(0015)
(0016) void uart_init(void)
(0017) {
(0018) UCSRB = 0x00;
_uart_init:
004B 2422 CLR R2
004C B82A OUT 0x0A,R2
(0019) UCSRA = 0x03; //异步模式,禁止奇偶校验,8位数据帧
004D E083 LDI R24,3
004E B98B OUT 0x0B,R24
(0020) UCSRC = BIT(URSEL) | 0x06;
004F E886 LDI R24,0x86
0050 BD80 OUT 0x20,R24
(0021) UBRRL = 0x08; //波特率设置为115200
0051 E088 LDI R24,0x8
0052 B989 OUT 0x09,R24
(0022) UBRRH = 0x00;
0053 BC20 OUT 0x20,R2
(0023) UCSRB = 0xF8; //允许串口发送和接收,接收和发送中断使能
0054 EF88 LDI R24,0xF8
0055 B98A OUT 0x0A,R24
0056 9508 RET
(0024) }
(0025)
(0026) /*
(0027) void USART_Transmit( unsigned char data )
(0028) {
(0029) while ( !( UCSRA & (1<<UDRE)) );
(0030) UDR = data;
(0031) }
(0032) */
(0033) unsigned char USART_Receive( void ) //串口从主机接收数据
(0034) {
(0035)
(0036) while ( !(UCSRA & (1<<RXC)) ); // 等待接收数据
_USART_Receive:
0057 9B5F SBIS 0x0B,7
0058 CFFE RJMP _USART_Receive
(0037)
(0038) return UDR; // 从缓冲器中获取并返回数据
0059 B10C IN R16,0x0C
005A 9508 RET
_uart0_tx_isr:
005B 940E0072 CALL push_lset
(0039) }
(0040)
(0041) /*
(0042) #pragma interrupt_handler uart0_rx_isr:12 //接收中断函数
(0043) void uart0_rx_isr(void)
(0044) {
(0045) //wait a task;
(0046) }
(0047) */
(0048) #pragma interrupt_handler uart0_tx_isr:14 //发送中断函数
(0049) void uart0_tx_isr(void)
(0050) {
(0051) mes = USART_Receive();
005D DFF9 RCALL _USART_Receive
005E 93000060 STS mes,R16
(0052) while ( !( UCSRA & (1<<UDRE)) ); // 等待发送缓冲器为空
0060 9B5D SBIS 0x0B,5
0061 CFFE RJMP 0x0060
(0053) UDR = mes; // 将数据放入缓冲器,发送数据
0062 90200060 LDS R2,mes
0064 B82C OUT 0x0C,R2
0065 940E0089 CALL pop_lset
0067 9518 RETI
(0054) }
(0055)
(0056) void init_devices(void) //初始化各中断
(0057) {
(0058) CLI();
_init_devices:
0068 94F8 BCLR 7
(0059) uart_init();
0069 DFE1 RCALL _uart_init
(0060) MCUCR = 0x00;
006A 2422 CLR R2
006B BE25 OUT 0x35,R2
(0061) GICR = 0x00;
006C BE2B OUT 0x3B,R2
(0062) TIMSK = 0x00;
006D BE29 OUT 0x39,R2
(0063) SEI();
006E 9478 BSET 7
006F 9508 RET
(0064) }
(0065)
(0066)
(0067) void main(void)
(0068) {
(0069) init_devices();
FILE: <library>
_main:
0070 DFF7 RCALL _init_devices
0071 9508 RET
push_lset:
0072 93FA ST R31,-Y
0073 93EA ST R30,-Y
0074 93BA ST R27,-Y
0075 93AA ST R26,-Y
0076 939A ST R25,-Y
0077 938A ST R24,-Y
0078 933A ST R19,-Y
0079 932A ST R18,-Y
007A 931A ST R17,-Y
007B 930A ST R16,-Y
007C 929A ST R9,-Y
007D 928A ST R8,-Y
007E 927A ST R7,-Y
007F 926A ST R6,-Y
0080 925A ST R5,-Y
0081 924A ST R4,-Y
0082 923A ST R3,-Y
0083 922A ST R2,-Y
0084 921A ST R1,-Y
0085 920A ST R0,-Y
0086 B60F IN R0,0x3F
0087 920A ST R0,-Y
0088 9508 RET
pop_lset:
0089 9009 LD R0,Y+
008A BE0F OUT 0x3F,R0
008B 9009 LD R0,Y+
008C 9019 LD R1,Y+
008D 9029 LD R2,Y+
008E 9039 LD R3,Y+
008F 9049 LD R4,Y+
0090 9059 LD R5,Y+
0091 9069 LD R6,Y+
0092 9079 LD R7,Y+
0093 9089 LD R8,Y+
0094 9099 LD R9,Y+
0095 9109 LD R16,Y+
0096 9119 LD R17,Y+
0097 9129 LD R18,Y+
0098 9139 LD R19,Y+
0099 9189 LD R24,Y+
009A 9199 LD R25,Y+
009B 91A9 LD R26,Y+
009C 91B9 LD R27,Y+
009D 91E9 LD R30,Y+
009E 91F9 LD R31,Y+
009F 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -