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

📄 main.lis

📁 一个关于AVR单片机的例程
💻 LIS
字号:
                        .module main.c
                        .area lit(rom, con, rel)
 0000           _seg7_data::
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
 000A 777C              .byte 'w,124
 000C 395E              .byte 57,94
 000E 7971              .byte 'y,'q
 0010 00                .byte 0
 0011                   .dbfile E:\avr\2.1.6\main.c
 0011                   .dbsym e seg7_data _seg7_data A[17:17]kc
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avr\2.1.6\main.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 12
 0000           ; //ICC-AVR application builder : 2007-5-29 15:21:23
 0000           ; // Target : M16
 0000           ; // Crystal: 7.3728Mhz
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; const unsigned char seg7_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0~F and "shut"
 0000           ; 
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 13
 0000           ;  PORTA = 0xFF;
 0000 8FEF              ldi R24,255
 0002 8BBB              out 0x1b,R24
 0004                   .dbline 14
 0004           ;  DDRA  = 0xFF;
 0004 8ABB              out 0x1a,R24
 0006                   .dbline 15
 0006           ;  PORTB = 0x01; //PB0,是TIMER0的外部时钟输入脚(T0),需要设为输入,并且使能内部上拉
 0006 81E0              ldi R24,1
 0008 88BB              out 0x18,R24
 000A                   .dbline 16
 000A           ;  DDRB  = 0x00;
 000A 2224              clr R2
 000C 27BA              out 0x17,R2
 000E                   .dbline 17
 000E           ;  PORTC = 0x00; //m103 output only
 000E 25BA              out 0x15,R2
 0010                   .dbline 18
 0010           ;  DDRC  = 0x00;
 0010 24BA              out 0x14,R2
 0012                   .dbline 19
 0012           ;  PORTD = 0x00;
 0012 22BA              out 0x12,R2
 0014                   .dbline 20
 0014           ;  DDRD  = 0x00;
 0014 21BA              out 0x11,R2
 0016                   .dbline -2
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbend
 0018                   .dbfunc e timer0_init _timer0_init fV
                        .even
 0018           _timer0_init::
 0018                   .dbline -1
 0018                   .dbline 28
 0018           ; }
 0018           ; 
 0018           ; //TIMER0 initialize - prescale:Falling edge
 0018           ; // WGM: Normal
 0018           ; // desired value: 1KHz
 0018           ; // actual value: Out of range
 0018           ; void timer0_init(void)
 0018           ; {
 0018                   .dbline 29
 0018           ;  TCCR0 = 0x00; //stop
 0018 2224              clr R2
 001A 23BE              out 0x33,R2
 001C                   .dbline 30
 001C           ;  TCNT0 = 0x00; //set count
 001C 22BE              out 0x32,R2
 001E                   .dbline 31
 001E           ;  OCR0  = 0x0A;  //set compare十进制的十,十次按键后匹配,进入这里
 001E 8AE0              ldi R24,10
 0020 8CBF              out 0x3c,R24
 0022                   .dbline 32
 0022           ;  TCCR0 = 0x06; //start timer
 0022 86E0              ldi R24,6
 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 76
 004C 0C941400          jmp _timer0_comp_isr
                        .area text(rom, con, rel)
 0028                   .dbfile E:\avr\2.1.6\main.c
 0028                   .dbfunc e timer0_comp_isr _timer0_comp_isr fV
                        .even
 0028           _timer0_comp_isr::
 0028 2A92              st -y,R2
 002A 2FB6              in R2,0x3f
 002C 2A92              st -y,R2
 002E                   .dbline -1
 002E                   .dbline 37
 002E           ; }
 002E           ; 
 002E           ; #pragma interrupt_handler timer0_comp_isr:20
 002E           ; void timer0_comp_isr(void)
 002E           ; {
 002E                   .dbline 40
 002E           ;  //compare occured TCNT0=OCR0
 002E           ;  //按下键OCR0次后,会进入本中断
 002E           ;  TCNT0 = 0x00;
 002E 2224              clr R2
 0030 22BE              out 0x32,R2
 0032                   .dbline -2
 0032           L3:
 0032 2990              ld R2,y+
 0034 2FBE              out 0x3f,R2
 0036 2990              ld R2,y+
 0038                   .dbline 0 ; func end
 0038 1895              reti
 003A                   .dbend
 003A                   .dbfunc e init_devices _init_devices fV
                        .even
 003A           _init_devices::
 003A                   .dbline -1
 003A                   .dbline 45
 003A           ; }
 003A           ; 
 003A           ; //call this routine to initialize all peripherals
 003A           ; void init_devices(void)
 003A           ; {
 003A                   .dbline 47
 003A           ;  //stop errant interrupts until set up
 003A           ;  CLI(); //disable all interrupts
 003A F894              cli
 003C                   .dbline 48
 003C           ;  port_init();
 003C E1DF              xcall _port_init
 003E                   .dbline 49
 003E           ;  timer0_init();
 003E ECDF              xcall _timer0_init
 0040                   .dbline 51
 0040           ; 
 0040           ;  MCUCR = 0x00;
 0040 2224              clr R2
 0042 25BE              out 0x35,R2
 0044                   .dbline 52
 0044           ;  GICR  = 0x00;
 0044 2BBE              out 0x3b,R2
 0046                   .dbline 53
 0046           ;  TIMSK = 0x02; //timer interrupt sources
 0046 82E0              ldi R24,2
 0048 89BF              out 0x39,R24
 004A                   .dbline 54
 004A           ;  SEI(); //re-enable interrupts
 004A 7894              sei
 004C                   .dbline -2
 004C           L4:
 004C                   .dbline 0 ; func end
 004C 0895              ret
 004E                   .dbend
 004E                   .dbfunc e main _main fV
                        .even
 004E           _main::
 004E                   .dbline -1
 004E                   .dbline 59
 004E           ;  //all peripherals are now initialized
 004E           ; }
 004E           ; 
 004E           ; void main(void)
 004E           ; {
 004E                   .dbline 60
 004E           ;  init_devices();
 004E F5DF              xcall _init_devices
 0050 08C0              xjmp L7
 0052           L6:
 0052                   .dbline 62
 0052                   .dbline 63
 0052 80E0              ldi R24,<_seg7_data
 0054 90E0              ldi R25,>_seg7_data
 0056 E2B7              in R30,0x32
 0058 FF27              clr R31
 005A E80F              add R30,R24
 005C F91F              adc R31,R25
 005E E491              lpm R30,Z
 0060 EBBB              out 0x1b,R30
 0062                   .dbline 64
 0062           L7:
 0062                   .dbline 61
 0062 F7CF              xjmp L6
 0064           X0:
 0064                   .dbline -2
 0064           L5:
 0064                   .dbline 0 ; func end
 0064 0895              ret
 0066                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -