📄 int_2.lis
字号:
.area vector(rom, abs)
.org 72
0048 0C940900 jmp _ext_int2_isr
.module int_2.c
.area text(rom, con, rel)
0000 .dbfile D:\16实验程序\外部中断\int_2.c
.area vector(rom, abs)
.area text(rom, con, rel)
0000 .dbfile D:\16实验程序\外部中断\int_2.c
0000 .dbfunc e s_ms _s_ms fI
0000 ; ms -> R16,R17
.even
0000 _s_ms::
0000 .dbline -1
0000 .dbline 12
0000 ; //外部中断程序
0000 ; //使用外部中断INT2
0000 ; //按键9,0,a,b输入,led显示
0000 ; #include <iom16v.h>
0000 ; #pragma interrupt_handler ext_int2_isr:19
0000 ; //指定外部中断函数
0000 ; #define uint unsigned int
0000 ; #define uchar unsigned char
0000 ;
0000 ;
0000 ; s_ms(uint ms)
0000 ; {
0000 .dbline 13
0000 ; for(;ms>1;ms--);
0000 02C0 xjmp L5
0002 L2:
0002 .dbline 13
0002 L3:
0002 .dbline 13
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 L5:
0006 .dbline 13
0006 81E0 ldi R24,1
0008 90E0 ldi R25,0
000A 8017 cp R24,R16
000C 9107 cpc R25,R17
000E C8F3 brlo L2
0010 X0:
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r ms 16 i
0012 .dbend
.area data(ram, con, rel)
0000 .dbfile D:\16实验程序\外部中断\int_2.c
0000 _i::
0000 .blkb 1
.area idata
0000 01 .byte 1
.area data(ram, con, rel)
0001 .dbfile D:\16实验程序\外部中断\int_2.c
0001 .dbsym e i _i c
.area text(rom, con, rel)
0012 .dbfile D:\16实验程序\外部中断\int_2.c
0012 .dbfunc e ext_int2_isr _ext_int2_isr fV
0012 ; aa -> R20
.even
0012 _ext_int2_isr::
0012 0A92 st -y,R0
0014 1A92 st -y,R1
0016 2A92 st -y,R2
0018 3A92 st -y,R3
001A 4A92 st -y,R4
001C 5A92 st -y,R5
001E 6A92 st -y,R6
0020 7A92 st -y,R7
0022 8A92 st -y,R8
0024 9A92 st -y,R9
0026 0A93 st -y,R16
0028 1A93 st -y,R17
002A 2A93 st -y,R18
002C 3A93 st -y,R19
002E 8A93 st -y,R24
0030 9A93 st -y,R25
0032 AA93 st -y,R26
0034 BA93 st -y,R27
0036 EA93 st -y,R30
0038 FA93 st -y,R31
003A 0FB6 in R0,0x3f
003C 0A92 st -y,R0
003E 0E940000 xcall push_xgsetF000
0042 .dbline -1
0042 .dbline 19
0042 ; }
0042 ;
0042 ; unsigned char i=1;
0042 ; // External Interrupt 0 service routine
0042 ; void ext_int2_isr(void)
0042 ; {
0042 .dbline 20
0042 ; uchar aa=1;
0042 41E0 ldi R20,1
0044 .dbline 21
0044 ; PORTD=~i++;
0044 20900000 lds R2,_i
0048 3324 clr R3
004A 822D mov R24,R2
004C 8F5F subi R24,255 ; addi 1
004E 80930000 sts _i,R24
0052 2094 com R2
0054 22BA out 0x12,R2
0056 15C0 xjmp L8
0058 L7:
0058 .dbline 23
0058 ; while(aa) //判断端口是否恢复高电平,有延时抗干扰
0058 ; {
0058 .dbline 24
0058 ; aa=!(PINB&(1<<2));
0058 B299 sbic 0x16,2
005A 03C0 rjmp L10
005C X1:
005C 61E0 ldi R22,1
005E 70E0 ldi R23,0
0060 02C0 xjmp L11
0062 L10:
0062 6627 clr R22
0064 7727 clr R23
0066 L11:
0066 462F mov R20,R22
0068 .dbline 25
0068 ; if(aa==0)
0068 6623 tst R22
006A 59F4 brne L12
006C X2:
006C .dbline 26
006C ; {
006C .dbline 27
006C ; s_ms(15000);
006C 08E9 ldi R16,15000
006E 1AE3 ldi R17,58
0070 C7DF xcall _s_ms
0072 .dbline 28
0072 ; aa=!(PINB&(1<<2));
0072 B299 sbic 0x16,2
0074 03C0 rjmp L14
0076 X3:
0076 61E0 ldi R22,1
0078 70E0 ldi R23,0
007A 02C0 xjmp L15
007C L14:
007C 6627 clr R22
007E 7727 clr R23
0080 L15:
0080 462F mov R20,R22
0082 .dbline 29
0082 ; }
0082 L12:
0082 .dbline 30
0082 ; }
0082 L8:
0082 .dbline 22
0082 4423 tst R20
0084 49F7 brne L7
0086 X4:
0086 .dbline -2
0086 L6:
0086 .dbline 0 ; func end
0086 0E940000 xcall pop_xgsetF000
008A 0990 ld R0,y+
008C 0FBE out 0x3f,R0
008E F991 ld R31,y+
0090 E991 ld R30,y+
0092 B991 ld R27,y+
0094 A991 ld R26,y+
0096 9991 ld R25,y+
0098 8991 ld R24,y+
009A 3991 ld R19,y+
009C 2991 ld R18,y+
009E 1991 ld R17,y+
00A0 0991 ld R16,y+
00A2 9990 ld R9,y+
00A4 8990 ld R8,y+
00A6 7990 ld R7,y+
00A8 6990 ld R6,y+
00AA 5990 ld R5,y+
00AC 4990 ld R4,y+
00AE 3990 ld R3,y+
00B0 2990 ld R2,y+
00B2 1990 ld R1,y+
00B4 0990 ld R0,y+
00B6 1895 reti
00B8 .dbsym r aa 20 c
00B8 .dbend
00B8 .dbfunc e main _main fV
.even
00B8 _main::
00B8 .dbline -1
00B8 .dbline 35
00B8 ; }
00B8 ;
00B8 ;
00B8 ; void main(void)
00B8 ; {
00B8 .dbline 36
00B8 ; DDRD=0xff;
00B8 8FEF ldi R24,255
00BA 81BB out 0x11,R24
00BC .dbline 37
00BC ; PORTD=0XFF;
00BC 82BB out 0x12,R24
00BE .dbline 38
00BE ; DDRB=0xf0;
00BE 80EF ldi R24,240
00C0 87BB out 0x17,R24
00C2 .dbline 39
00C2 ; PORTB=0x0f;
00C2 8FE0 ldi R24,15
00C4 88BB out 0x18,R24
00C6 .dbline 41
00C6 ;
00C6 ; SREG=0x80; //开全局中断
00C6 80E8 ldi R24,128
00C8 8FBF out 0x3f,R24
00CA .dbline 43
00CA ;
00CA ; GICR=0x20; //开外部中断int_2,对应按键K9,K0,KA,KB
00CA 80E2 ldi R24,32
00CC 8BBF out 0x3b,R24
00CE L17:
00CE .dbline 44
00CE ; while (1);
00CE L18:
00CE .dbline 44
00CE FFCF xjmp L17
00D0 X5:
00D0 .dbline -2
00D0 L16:
00D0 .dbline 0 ; func end
00D0 0895 ret
00D2 .dbend
00D2 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -