📄 main.lst
字号:
__text_start:
__start:
002B E5CF LDI R28,0x5F
002C E0D4 LDI R29,4
002D BFCD OUT 0x3D,R28
002E BFDE OUT 0x3E,R29
002F 51C0 SUBI R28,0x10
0030 40D0 SBCI R29,0
0031 EA0A LDI R16,0xAA
0032 8308 STD Y+0,R16
0033 2400 CLR R0
0034 E6E1 LDI R30,0x61
0035 E0F0 LDI R31,0
0036 E010 LDI R17,0
0037 36E1 CPI R30,0x61
0038 07F1 CPC R31,R17
0039 F011 BEQ 0x003C
003A 9201 ST R0,Z+
003B CFFB RJMP 0x0037
003C 8300 STD Z+0,R16
003D E5E4 LDI R30,0x54
003E E0F0 LDI R31,0
003F E6A0 LDI R26,0x60
0040 E0B0 LDI R27,0
0041 E010 LDI R17,0
0042 35E5 CPI R30,0x55
0043 07F1 CPC R31,R17
0044 F021 BEQ 0x0049
0045 95C8 LPM
0046 9631 ADIW R30,1
0047 920D ST R0,X+
0048 CFF9 RJMP 0x0042
0049 940E0081 CALL _main
_exit:
004B CFFF RJMP _exit
FILE: E:\avr\2.5.2\main.c
(0001) //ICC-AVR application builder : 2007-5-30 15:23:23
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007)
(0008) volatile unsigned char tmp=0;
(0009)
(0010) void port_init(void)
(0011) {
(0012) PORTA = 0x00;
_port_init:
004C 2422 CLR R2
004D BA2B OUT 0x1B,R2
(0013) DDRA = 0x00;
004E BA2A OUT 0x1A,R2
(0014) PORTB = 0x00;
004F BA28 OUT 0x18,R2
(0015) DDRB = 0x00;
0050 BA27 OUT 0x17,R2
(0016) PORTC = 0x00; //m103 output only
0051 BA25 OUT 0x15,R2
(0017) DDRC = 0x00;
0052 BA24 OUT 0x14,R2
(0018) PORTD = 0x00;
0053 BA22 OUT 0x12,R2
(0019) DDRD = 0x00;
0054 BA21 OUT 0x11,R2
0055 9508 RET
(0020) }
(0021)
(0022) //UART0 initialize
(0023) // desired baud rate: 9600
(0024) // actual: baud rate:9600 (0.0%)
(0025) // char size: 8 bit
(0026) // parity: Disabled
(0027) void uart0_init(void)
(0028) {
(0029) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
0056 2422 CLR R2
0057 B82A OUT 0x0A,R2
(0030) UCSRA = 0x00;
0058 B82B OUT 0x0B,R2
(0031) UCSRC = BIT(URSEL) | 0x06;
0059 E886 LDI R24,0x86
005A BD80 OUT 0x20,R24
(0032) UBRRL = 0x2F; //set baud rate lo
005B E28F LDI R24,0x2F
005C B989 OUT 0x09,R24
(0033) UBRRH = 0x00; //set baud rate hi
005D BC20 OUT 0x20,R2
(0034) UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
005E ED88 LDI R24,0xD8
005F B98A OUT 0x0A,R24
0060 9508 RET
_uart0_rx_isr:
0061 922A ST R2,-Y
0062 B62F IN R2,0x3F
0063 922A ST R2,-Y
(0035) }
(0036)
(0037) #pragma interrupt_handler uart0_rx_isr:12
(0038) void uart0_rx_isr(void)
(0039) {
(0040) //uart has received a character in UDR
(0041) tmp=UDR; //读取接收到的数
0064 B02C IN R2,0x0C
0065 92200060 STS tmp,R2
(0042) UDR=tmp; //启动发送
0067 90200060 LDS R2,tmp
0069 B82C OUT 0x0C,R2
006A 9029 LD R2,Y+
006B BE2F OUT 0x3F,R2
006C 9029 LD R2,Y+
006D 9518 RETI
_uart0_tx_isr:
006E 922A ST R2,-Y
006F B62F IN R2,0x3F
0070 922A ST R2,-Y
(0043) }
(0044)
(0045) /*
(0046) #pragma interrupt_handler uart0_udre_isr:13
(0047) void uart0_udre_isr(void)
(0048) {
(0049) //character transferred to shift register so UDR is now empty
(0050) UDR='x'; //是空就让,传输完成接着就会进入本中断。
(0051) }
(0052) */
(0053)
(0054) #pragma interrupt_handler uart0_tx_isr:14
(0055) void uart0_tx_isr(void)
(0056) {
(0057) //character has been transmitted
(0058) UDR=tmp;
0071 90200060 LDS R2,tmp
0073 B82C OUT 0x0C,R2
0074 9029 LD R2,Y+
0075 BE2F OUT 0x3F,R2
0076 9029 LD R2,Y+
0077 9518 RETI
(0059) }
(0060)
(0061) //call this routine to initialize all peripherals
(0062) void init_devices(void)
(0063) {
(0064) //stop errant interrupts until set up
(0065) CLI(); //disable all interrupts
_init_devices:
0078 94F8 BCLR 7
(0066) port_init();
0079 DFD2 RCALL _port_init
(0067) uart0_init();
007A DFDB RCALL _uart0_init
(0068)
(0069) MCUCR = 0x00;
007B 2422 CLR R2
007C BE25 OUT 0x35,R2
(0070) GICR = 0x00;
007D BE2B OUT 0x3B,R2
(0071) TIMSK = 0x00; //timer interrupt sources
007E BE29 OUT 0x39,R2
(0072) SEI(); //re-enable interrupts
007F 9478 BSET 7
0080 9508 RET
(0073) //all peripherals are now initialized
(0074) }
(0075)
(0076) void main(void)
(0077) {
(0078) init_devices(); //主程序里面只初始化
_main:
0081 DFF6 RCALL _init_devices
(0079) UDR=tmp;
0082 90200060 LDS R2,tmp
0084 B82C OUT 0x0C,R2
(0080) while(1)
FILE: <library>
0085 CFFF RJMP 0x0085
0086 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -