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

📄 main.lis

📁 一个关于AVR单片机的例程
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\教程\外部中断\main.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 20
 0000           ; //ICC-AVR application builder : 2007-2-17 7:56:49
 0000           ; // Target : M16
 0000           ; // Crystal: 7.3728Mhz
 0000           ; // www.avrvi.com AVR与虚拟仪器
 0000           ; 
 0000           ; // 硬件连接:
 0000           ; // PA0—————LED0
 0000           ; // PA1—————LED1
 0000           ; // PD2—————独立按键A
 0000           ; // PD3—————独立按键B
 0000           ; 
 0000           ; // 实验效果:
 0000           ; // 按A时,LED0亮与灭交替变换
 0000           ; // 按B时,LED1亮与灭交替变换
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 21
 0000           ;  PORTA = 0x00;
 0000 2224              clr R2
 0002 2BBA              out 0x1b,R2
 0004                   .dbline 22
 0004           ;  DDRA  = 0x03; //PORTA.0 PORTA.1 输出,LED指示
 0004 83E0              ldi R24,3
 0006 8ABB              out 0x1a,R24
 0008                   .dbline 23
 0008           ;  PORTB = 0x00;
 0008 28BA              out 0x18,R2
 000A                   .dbline 24
 000A           ;  DDRB  = 0x00;
 000A 27BA              out 0x17,R2
 000C                   .dbline 25
 000C           ;  PORTC = 0x00; //m103 output only
 000C 25BA              out 0x15,R2
 000E                   .dbline 26
 000E           ;  DDRC  = 0x00;
 000E 24BA              out 0x14,R2
 0010                   .dbline 27
 0010           ;  PORTD |= (1<<2)|(1<<3); //使能内部上拉
 0010 82B3              in R24,0x12
 0012 8C60              ori R24,12
 0014 82BB              out 0x12,R24
 0016                   .dbline 28
 0016           ;  DDRD = 0x00; //PD2,PD3 对应INT0,INT1 一定要设置为输入
 0016 21BA              out 0x11,R2
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C940D00          jmp _int0_isr
                        .area text(rom, con, rel)
 001A                   .dbfile D:\桌面\教程\外部中断\main.c
 001A                   .dbfunc e int0_isr _int0_isr fV
                        .even
 001A           _int0_isr::
 001A 2A92              st -y,R2
 001C 8A93              st -y,R24
 001E 2FB6              in R2,0x3f
 0020 2A92              st -y,R2
 0022                   .dbline -1
 0022                   .dbline 33
 0022           ; }
 0022           ; 
 0022           ; #pragma interrupt_handler int0_isr:2
 0022           ; void int0_isr(void)
 0022           ; {
 0022                   .dbline 35
 0022           ;  //external interupt on INT0
 0022           ;  PORTA ^= 0x01;  //PA0取反
 0022 81E0              ldi R24,1
 0024 2BB2              in R2,0x1b
 0026 2826              eor R2,R24
 0028 2BBA              out 0x1b,R2
 002A                   .dbline -2
 002A           L2:
 002A 2990              ld R2,y+
 002C 2FBE              out 0x3f,R2
 002E 8991              ld R24,y+
 0030 2990              ld R2,y+
 0032                   .dbline 0 ; func end
 0032 1895              reti
 0034                   .dbend
                        .area vector(rom, abs)
                        .org 8
 0008 0C941A00          jmp _int1_isr
                        .area text(rom, con, rel)
 0034                   .dbfile D:\桌面\教程\外部中断\main.c
 0034                   .dbfunc e int1_isr _int1_isr fV
                        .even
 0034           _int1_isr::
 0034 2A92              st -y,R2
 0036 8A93              st -y,R24
 0038 2FB6              in R2,0x3f
 003A 2A92              st -y,R2
 003C                   .dbline -1
 003C                   .dbline 40
 003C           ; }
 003C           ; 
 003C           ; #pragma interrupt_handler int1_isr:3
 003C           ; void int1_isr(void)
 003C           ; {
 003C                   .dbline 42
 003C           ;  //external interupt on INT1
 003C           ;  PORTA ^= 0x02;  //PA1取反
 003C 82E0              ldi R24,2
 003E 2BB2              in R2,0x1b
 0040 2826              eor R2,R24
 0042 2BBA              out 0x1b,R2
 0044                   .dbline -2
 0044           L3:
 0044 2990              ld R2,y+
 0046 2FBE              out 0x3f,R2
 0048 8991              ld R24,y+
 004A 2990              ld R2,y+
 004C                   .dbline 0 ; func end
 004C 1895              reti
 004E                   .dbend
 004E                   .dbfunc e init_devices _init_devices fV
                        .even
 004E           _init_devices::
 004E                   .dbline -1
 004E                   .dbline 47
 004E           ; }
 004E           ; 
 004E           ; //call this routine to initialize all peripherals
 004E           ; void init_devices(void)
 004E           ; {
 004E                   .dbline 49
 004E           ;  //stop errant interrupts until set up
 004E           ;  CLI(); //disable all interrupts
 004E F894              cli
 0050                   .dbline 50
 0050           ;  port_init();
 0050 D7DF              xcall _port_init
 0052                   .dbline 52
 0052           ; 
 0052           ;  MCUCR = 0x0A; //允许INT0和INT1外部中断
 0052 8AE0              ldi R24,10
 0054 85BF              out 0x35,R24
 0056                   .dbline 53
 0056           ;  GICR  = 0xC0;
 0056 80EC              ldi R24,192
 0058 8BBF              out 0x3b,R24
 005A                   .dbline 54
 005A           ;  TIMSK = 0x00; //timer interrupt sources
 005A 2224              clr R2
 005C 29BE              out 0x39,R2
 005E                   .dbline 55
 005E           ;  SEI(); //re-enable interrupts
 005E 7894              sei
 0060                   .dbline -2
 0060           L4:
 0060                   .dbline 0 ; func end
 0060 0895              ret
 0062                   .dbend
 0062                   .dbfunc e main _main fV
                        .even
 0062           _main::
 0062                   .dbline -1
 0062                   .dbline 60
 0062           ;  //all peripherals are now initialized
 0062           ; }
 0062           ; 
 0062           ; void main(void)
 0062           ; {
 0062                   .dbline 61
 0062           ;  init_devices();
 0062 F5DF              xcall _init_devices
 0064           L6:
 0064                   .dbline 63
 0064           L7:
 0064                   .dbline 62
 0064 FFCF              xjmp L6
 0066           X0:
 0066                   .dbline -2
 0066           L5:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbend

⌨️ 快捷键说明

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