📄 uart.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 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 940E007B CALL _main
_exit:
004A CFFF RJMP _exit
FILE: uart.c
(0001) //ICC-AVR application builder : 2005-5-1 15:44:13
(0002) // Target : M16
(0003) // Crystal: 6.0000Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007)
(0008) #define b19200 ox19
(0009) #define b9600 0x26
(0010) #define baud b9600
(0011)
(0012) unsigned char com_in_buf[1];
(0013)
(0014) void port_init(void)
(0015) {
(0016) PORTA = 0xFF;
_port_init:
004B EF8F LDI R24,0xFF
004C BB8B OUT 0x1B,R24
(0017) DDRA = 0xFF;
004D BB8A OUT 0x1A,R24
(0018) PORTB = 0x00;
004E 2422 CLR R2
004F BA28 OUT 0x18,R2
(0019) DDRB = 0x00;
0050 BA27 OUT 0x17,R2
(0020) PORTC = 0x00; //m103 output only
0051 BA25 OUT 0x15,R2
(0021) DDRC = 0x00;
0052 BA24 OUT 0x14,R2
(0022) PORTD = 0x00;
0053 BA22 OUT 0x12,R2
(0023) DDRD = 0x00;
0054 BA21 OUT 0x11,R2
0055 9508 RET
(0024) }
(0025)
(0026) //UART0 initialize
(0027) // desired baud rate: 9600
(0028) // actual: baud rate:9615 (0.2%)
(0029) // char size: 8 bit
(0030) // parity: Disabled
(0031) void uart0_init(void)
(0032) {
(0033) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
0056 2422 CLR R2
0057 B82A OUT 0x0A,R2
(0034) UCSRA = 0x00;
0058 B82B OUT 0x0B,R2
(0035) UCSRC = BIT(URSEL) | 0x06;
0059 E886 LDI R24,0x86
005A BD80 OUT 0x20,R24
(0036) UBRRL = baud; //set baud rate lo
005B E286 LDI R24,0x26
005C B989 OUT 0x09,R24
(0037) UBRRH = 0x00; //set baud rate hi
005D BC20 OUT 0x20,R2
(0038) UCSRB = 0x98;
005E E988 LDI R24,0x98
005F B98A OUT 0x0A,R24
0060 9508 RET
(0039) }
(0040)
(0041) void send_data(unsigned char back)
(0042) {
(0043) while( !( UCSRA & (1<<UDRE)) ) ;
_send_data:
back --> R16
0061 9B5D SBIS 0x0B,5
0062 CFFE RJMP _send_data
(0044) UDR=back;
0063 B90C OUT 0x0C,R16
0064 9508 RET
_uart0_rx_isr:
0065 940E0084 CALL push_lset
(0045) }
(0046)
(0047) #pragma interrupt_handler uart0_rx_isr:12
(0048) void uart0_rx_isr(void)
(0049) {
(0050) //uart has received a character in UDR
(0051) com_in_buf[0]=UDR;
0067 B02C IN R2,0x0C
0068 92200060 STS com_in_buf,R2
(0052) PORTA =~com_in_buf[0];
006A 9420 COM R2
006B BA2B OUT 0x1B,R2
(0053) send_data(com_in_buf[0]);
006C 91000060 LDS R16,com_in_buf
006E DFF2 RCALL _send_data
006F 940E009B CALL pop_lset
0071 9518 RETI
(0054) }
(0055)
(0056) //call this routine to initialize all peripherals
(0057) void init_devices(void)
(0058) {
(0059) //stop errant interrupts until set up
(0060) CLI(); //disable all interrupts
_init_devices:
0072 94F8 BCLR 7
(0061) port_init();
0073 DFD7 RCALL _port_init
(0062) uart0_init();
0074 DFE1 RCALL _uart0_init
(0063)
(0064) MCUCR = 0x00;
0075 2422 CLR R2
0076 BE25 OUT 0x35,R2
(0065) GICR = 0x00;
0077 BE2B OUT 0x3B,R2
(0066) TIMSK = 0x00; //timer interrupt sources
0078 BE29 OUT 0x39,R2
(0067) SEI(); //re-enable interrupts
0079 9478 BSET 7
007A 9508 RET
(0068) //all peripherals are now initialized
(0069) }
(0070)
(0071) void main(void)
(0072) {
(0073) char j;
(0074) init_devices();
_main:
j --> R20
007B DFF6 RCALL _init_devices
007C C005 RJMP 0x0082
(0075) while(1)
(0076) {
(0077) for(j=1;j<100;j++)
FILE: <library>
007D E041 LDI R20,1
007E C001 RJMP 0x0080
007F 9543 INC R20
0080 3644 CPI R20,0x64
0081 F3E8 BCS 0x007F
0082 CFFA RJMP 0x007D
0083 9508 RET
push_lset:
0084 93FA ST R31,-Y
0085 93EA ST R30,-Y
0086 93BA ST R27,-Y
0087 93AA ST R26,-Y
0088 939A ST R25,-Y
0089 938A ST R24,-Y
008A 933A ST R19,-Y
008B 932A ST R18,-Y
008C 931A ST R17,-Y
008D 930A ST R16,-Y
008E 929A ST R9,-Y
008F 928A ST R8,-Y
0090 927A ST R7,-Y
0091 926A ST R6,-Y
0092 925A ST R5,-Y
0093 924A ST R4,-Y
0094 923A ST R3,-Y
0095 922A ST R2,-Y
0096 921A ST R1,-Y
0097 920A ST R0,-Y
0098 B60F IN R0,0x3F
0099 920A ST R0,-Y
009A 9508 RET
pop_lset:
009B 9009 LD R0,Y+
009C BE0F OUT 0x3F,R0
009D 9009 LD R0,Y+
009E 9019 LD R1,Y+
009F 9029 LD R2,Y+
00A0 9039 LD R3,Y+
00A1 9049 LD R4,Y+
00A2 9059 LD R5,Y+
00A3 9069 LD R6,Y+
00A4 9079 LD R7,Y+
00A5 9089 LD R8,Y+
00A6 9099 LD R9,Y+
00A7 9109 LD R16,Y+
00A8 9119 LD R17,Y+
00A9 9129 LD R18,Y+
00AA 9139 LD R19,Y+
00AB 9189 LD R24,Y+
00AC 9199 LD R25,Y+
00AD 91A9 LD R26,Y+
00AE 91B9 LD R27,Y+
00AF 91E9 LD R30,Y+
00B0 91F9 LD R31,Y+
00B1 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -