⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.lis

📁 avr单片机串口先进先出实例程序
💻 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 + -