📄 main.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 + -