📄 test.lis
字号:
.module test.c
.area data(ram, con, rel)
0000 _uart_inter_flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\iccavr\mega16\uart\test.c
0001 .dbsym e uart_inter_flag _uart_inter_flag c
.area text(rom, con, rel)
0000 .dbfile D:\iccavr\mega16\uart\test.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 11
0000 ; //ICC-AVR application builder : 2009-4-2 9:23:34
0000 ; // Target : M16
0000 ; // Crystal: 7.3728Mhz
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; unsigned char count,uart_inter_flag=0,uart_buf[37];
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 12
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 .dbline 13
0004 ; DDRA = 0x00;
0004 2ABA out 0x1a,R2
0006 .dbline 14
0006 ; PORTB = 0x08;
0006 88E0 ldi R24,8
0008 88BB out 0x18,R24
000A .dbline 15
000A ; DDRB = 0x08;
000A 87BB out 0x17,R24
000C .dbline 16
000C ; PORTC = 0x00; //m103 output only
000C 25BA out 0x15,R2
000E .dbline 17
000E ; DDRC = 0x00;
000E 24BA out 0x14,R2
0010 .dbline 18
0010 ; PORTD = 0x00;
0010 22BA out 0x12,R2
0012 .dbline 19
0012 ; DDRD = 0x00;
0012 21BA out 0x11,R2
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e timer0_init _timer0_init fV
.even
0016 _timer0_init::
0016 .dbline -1
0016 .dbline 27
0016 ; }
0016 ;
0016 ; //TIMER0 initialize - prescale:1024
0016 ; // WGM: Normal
0016 ; // desired value: 10mSec
0016 ; // actual value: 10.000mSec (0.0%)
0016 ; void timer0_init(void)
0016 ; {
0016 .dbline 28
0016 ; TCCR0 = 0x00; //stop
0016 2224 clr R2
0018 23BE out 0x33,R2
001A .dbline 29
001A ; TCNT0 = 0xB8; //set count
001A 88EB ldi R24,184
001C 82BF out 0x32,R24
001E .dbline 30
001E ; OCR0 = 0x48; //set compare
001E 88E4 ldi R24,72
0020 8CBF out 0x3c,R24
0022 .dbline 31
0022 ; TCCR0 = 0x05; //start timer
0022 85E0 ldi R24,5
0024 83BF out 0x33,R24
0026 .dbline -2
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
.area vector(rom, abs)
.org 36
0024 0C941400 jmp _timer0_ovf_isr
.area text(rom, con, rel)
0028 .dbfile D:\iccavr\mega16\uart\test.c
0028 .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
0028 _timer0_ovf_isr::
0028 8A93 st -y,R24
002A 9A93 st -y,R25
002C 8FB7 in R24,0x3f
002E 8A93 st -y,R24
0030 .dbline -1
0030 .dbline 36
0030 ; }
0030 ;
0030 ; #pragma interrupt_handler timer0_ovf_isr:10
0030 ; void timer0_ovf_isr(void)
0030 ; {
0030 .dbline 37
0030 ; TCNT0 = 0xB8; //reload counter value
0030 88EB ldi R24,184
0032 82BF out 0x32,R24
0034 .dbline 38
0034 ; count++;
0034 80912500 lds R24,_count
0038 8F5F subi R24,255 ; addi 1
003A 80932500 sts _count,R24
003E .dbline -2
003E L3:
003E 8991 ld R24,y+
0040 8FBF out 0x3f,R24
0042 9991 ld R25,y+
0044 8991 ld R24,y+
0046 .dbline 0 ; func end
0046 1895 reti
0048 .dbend
0048 .dbfunc e uart0_init _uart0_init fV
.even
0048 _uart0_init::
0048 .dbline -1
0048 .dbline 47
0048 ; }
0048 ;
0048 ; //UART0 initialize
0048 ; // desired baud rate: 9600
0048 ; // actual: baud rate:9600 (0.0%)
0048 ; // char size: 8 bit
0048 ; // parity: Disabled
0048 ; void uart0_init(void)
0048 ; {
0048 .dbline 48
0048 ; UCSRB = 0x00; //disable while setting baud rate
0048 2224 clr R2
004A 2AB8 out 0xa,R2
004C .dbline 49
004C ; UCSRA = 0x00;
004C 2BB8 out 0xb,R2
004E .dbline 50
004E ; UCSRC = BIT(URSEL) | 0x06;
004E 86E8 ldi R24,134
0050 80BD out 0x20,R24
0052 .dbline 51
0052 ; UBRRL = 0x2F; //set baud rate lo
0052 8FE2 ldi R24,47
0054 89B9 out 0x9,R24
0056 .dbline 52
0056 ; UBRRH = 0x00; //set baud rate hi
0056 20BC out 0x20,R2
0058 .dbline 53
0058 ; UCSRB = 0x98;
0058 88E9 ldi R24,152
005A 8AB9 out 0xa,R24
005C .dbline -2
005C L4:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbend
.area vector(rom, abs)
.org 44
002C 0C942F00 jmp _uart0_rx_isr
.area text(rom, con, rel)
005E .dbfile D:\iccavr\mega16\uart\test.c
005E .dbfunc e uart0_rx_isr _uart0_rx_isr fV
005E ; temp -> R16
005E ; i -> R18
.even
005E _uart0_rx_isr::
005E 2A92 st -y,R2
0060 0A93 st -y,R16
0062 2A93 st -y,R18
0064 8A93 st -y,R24
0066 9A93 st -y,R25
0068 EA93 st -y,R30
006A FA93 st -y,R31
006C 2FB6 in R2,0x3f
006E 2A92 st -y,R2
0070 .dbline -1
0070 .dbline 58
0070 ; }
0070 ;
0070 ; #pragma interrupt_handler uart0_rx_isr:12
0070 ; void uart0_rx_isr(void)
0070 ; {
0070 L6:
0070 .dbline 61
0070 L7:
0070 .dbline 61
0070 ; //uart has received a character in UDR
0070 ; unsigned char i,temp;
0070 ; while(!(UCSRA&0x80));
0070 5F9B sbis 0xb,7
0072 FECF rjmp L6
0074 .dbline 62
0074 ; temp = UDR;
0074 0CB1 in R16,0xc
0076 .dbline 63
0076 ; for(i=0;i<36;i++)
0076 2227 clr R18
0078 0FC0 xjmp L12
007A L9:
007A .dbline 64
007A 80E0 ldi R24,<_uart_buf+1
007C 90E0 ldi R25,>_uart_buf+1
007E E22F mov R30,R18
0080 FF27 clr R31
0082 E80F add R30,R24
0084 F91F adc R31,R25
0086 2080 ldd R2,z+0
0088 80E0 ldi R24,<_uart_buf
008A 90E0 ldi R25,>_uart_buf
008C E22F mov R30,R18
008E FF27 clr R31
0090 E80F add R30,R24
0092 F91F adc R31,R25
0094 2082 std z+0,R2
0096 L10:
0096 .dbline 63
0096 2395 inc R18
0098 L12:
0098 .dbline 63
0098 2432 cpi R18,36
009A 78F3 brlo L9
009C .dbline 65
009C ; uart_buf[i]=uart_buf[i+1];
009C ; uart_buf[36]=temp;
009C 00932400 sts _uart_buf+36,R16
00A0 .dbline 66
00A0 ; uart_inter_flag=0x01;
00A0 81E0 ldi R24,1
00A2 80930000 sts _uart_inter_flag,R24
00A6 .dbline -2
00A6 L5:
00A6 2990 ld R2,y+
00A8 2FBE out 0x3f,R2
00AA F991 ld R31,y+
00AC E991 ld R30,y+
00AE 9991 ld R25,y+
00B0 8991 ld R24,y+
00B2 2991 ld R18,y+
00B4 0991 ld R16,y+
00B6 2990 ld R2,y+
00B8 .dbline 0 ; func end
00B8 1895 reti
00BA .dbsym r temp 16 c
00BA .dbsym r i 18 c
00BA .dbend
00BA .dbfunc e init_devices _init_devices fV
.even
00BA _init_devices::
00BA .dbline -1
00BA .dbline 71
00BA ; }
00BA ;
00BA ; //call this routine to initialize all peripherals
00BA ; void init_devices(void)
00BA ; {
00BA .dbline 73
00BA ; //stop errant interrupts until set up
00BA ; CLI(); //disable all interrupts
00BA F894 cli
00BC .dbline 74
00BC ; port_init();
00BC A1DF xcall _port_init
00BE .dbline 75
00BE ; timer0_init();
00BE ABDF xcall _timer0_init
00C0 .dbline 76
00C0 ; uart0_init();
00C0 C3DF xcall _uart0_init
00C2 .dbline 78
00C2 ;
00C2 ; MCUCR = 0x00;
00C2 2224 clr R2
00C4 25BE out 0x35,R2
00C6 .dbline 79
00C6 ; GICR = 0x00;
00C6 2BBE out 0x3b,R2
00C8 .dbline 80
00C8 ; TIMSK = 0x01; //timer interrupt sources
00C8 81E0 ldi R24,1
00CA 89BF out 0x39,R24
00CC .dbline 81
00CC ; SEI(); //re-enable interrupts
00CC 7894 sei
00CE .dbline -2
00CE L15:
00CE .dbline 0 ; func end
00CE 0895 ret
00D0 .dbend
00D0 .dbfunc e main _main fV
00D0 ; i -> R20
.even
00D0 _main::
00D0 .dbline -1
00D0 .dbline 87
00D0 ; //all peripherals are now initialized
00D0 ; }
00D0 ;
00D0 ; //
00D0 ; void main(void)
00D0 ; {
00D0 .dbline 89
00D0 ; unsigned char i;
00D0 ; init_devices();
00D0 F4DF xcall _init_devices
00D2 22C0 xjmp L18
00D4 L17:
00D4 .dbline 92
00D4 ; //insert your functional code here...
00D4 ; while(1)
00D4 ; {
00D4 .dbline 93
00D4 ; if(uart_inter_flag==1)
00D4 80910000 lds R24,_uart_inter_flag
00D8 8130 cpi R24,1
00DA 91F4 brne L20
00DC .dbline 94
00DC ; {
00DC .dbline 95
00DC ; uart_inter_flag=0;
00DC 2224 clr R2
00DE 20920000 sts _uart_inter_flag,R2
00E2 .dbline 96
00E2 ; for(i=0;i<37;i++)
00E2 4427 clr R20
00E4 0BC0 xjmp L25
00E6 L22:
00E6 .dbline 97
00E6 80E0 ldi R24,<_uart_buf
00E8 90E0 ldi R25,>_uart_buf
00EA E42F mov R30,R20
00EC FF27 clr R31
00EE E80F add R30,R24
00F0 F91F adc R31,R25
00F2 0081 ldd R16,z+0
00F4 1127 clr R17
00F6 0E940000 xcall _putchar
00FA L23:
00FA .dbline 96
00FA 4395 inc R20
00FC L25:
00FC .dbline 96
00FC 4532 cpi R20,37
00FE 98F3 brlo L22
0100 .dbline 98
0100 ; putchar(uart_buf[i]);
0100 ; }
0100 L20:
0100 .dbline 99
0100 ; if(count>30)
0100 8EE1 ldi R24,30
0102 20902500 lds R2,_count
0106 8215 cp R24,R2
0108 38F4 brsh L26
010A .dbline 100
010A ; {
010A .dbline 101
010A ; count=0;
010A 2224 clr R2
010C 20922500 sts _count,R2
0110 .dbline 102
0110 ; PORTB^=(1<<3);
0110 88E0 ldi R24,8
0112 28B2 in R2,0x18
0114 2826 eor R2,R24
0116 28BA out 0x18,R2
0118 .dbline 103
0118 ; }
0118 L26:
0118 .dbline 104
0118 L18:
0118 .dbline 91
0118 DDCF xjmp L17
011A X0:
011A .dbline -2
011A L16:
011A .dbline 0 ; func end
011A 0895 ret
011C .dbsym r i 20 c
011C .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\iccavr\mega16\uart\test.c
0000 _uart_buf::
0000 .blkb 37
0025 .dbsym e uart_buf _uart_buf A[37:37]c
0025 _count::
0025 .blkb 1
0026 .dbsym e count _count c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -