?? int_2.lst
字號:
__text_start:
__start:
73 EFCF LDI R28,0xFF
74 E2D1 LDI R29,0x21
75 BFCD OUT 0x3D,R28
76 BFDE OUT 0x3E,R29
77 51CE SUBI R28,0x1E
78 40D0 SBCI R29,0
79 EA0A LDI R16,0xAA
7A 8308 STD Y+0,R16
7B 2400 CLR R0
7C E0E1 LDI R30,1
7D E0F2 LDI R31,2
7E E012 LDI R17,2
7F 30E1 CPI R30,1
80 07F1 CPC R31,R17
81 F011 BEQ 0x0084
82 9201 ST R0,Z+
83 CFFB RJMP 0x007F
84 8300 STD Z+0,R16
85 EEE4 LDI R30,0xE4
86 E0F0 LDI R31,0
87 E0A0 LDI R26,0
88 E0B2 LDI R27,2
89 E010 LDI R17,0
8A E000 LDI R16,0
8B BF0B OUT 0x3B,R16
8C 3EE5 CPI R30,0xE5
8D 07F1 CPC R31,R17
8E F021 BEQ 0x0093
8F 95C8 LPM
90 9631 ADIW R30,1
91 920D ST R0,X+
92 CFF9 RJMP 0x008C
93 940E 00F2 CALL _main
_exit:
95 CFFF RJMP _exit
FILE: D:\16實驗程序\外部中斷\int_2.c
(0001) //外部中斷程序
(0002) //使用外部中斷INT2
(0003) //按鍵9,0,a,b輸入,led顯示
(0004) #include <iom16v.h>
(0005) #pragma interrupt_handler ext_int2_isr:19
(0006) //指定外部中斷函數
(0007) #define uint unsigned int
(0008) #define uchar unsigned char
(0009)
(0010)
(0011) s_ms(uint ms)
(0012) {
(0013) for(;ms>1;ms--);
_s_ms:
ms --> R16
96 C002 RJMP 0x0099
97 5001 SUBI R16,1
98 4010 SBCI R17,0
99 E081 LDI R24,1
9A E090 LDI R25,0
9B 1780 CP R24,R16
9C 0791 CPC R25,R17
9D F3C8 BCS 0x0097
9E 9508 RET
_ext_int2_isr:
aa --> R20
9F 920A ST R0,-Y
A0 921A ST R1,-Y
A1 922A ST R2,-Y
A2 923A ST R3,-Y
A3 924A ST R4,-Y
A4 925A ST R5,-Y
A5 926A ST R6,-Y
A6 927A ST R7,-Y
A7 928A ST R8,-Y
A8 929A ST R9,-Y
A9 930A ST R16,-Y
AA 931A ST R17,-Y
AB 932A ST R18,-Y
AC 933A ST R19,-Y
AD 938A ST R24,-Y
AE 939A ST R25,-Y
AF 93AA ST R26,-Y
B0 93BA ST R27,-Y
B1 93EA ST R30,-Y
B2 93FA ST R31,-Y
B3 B60F IN R0,0x3F
B4 920A ST R0,-Y
B5 940E 00FF CALL push_xgsetF000
(0014) }
(0015)
(0016) unsigned char i=1;
(0017) // External Interrupt 0 service routine
(0018) void ext_int2_isr(void)
(0019) {
(0020) uchar aa=1;
B7 E041 LDI R20,1
(0021) PORTD=~i++;
B8 9020 0200 LDS R2,i
BA 2433 CLR R3
BB 2D82 MOV R24,R2
BC 5F8F SUBI R24,0xFF
BD 9380 0200 STS i,R24
BF 9420 COM R2
C0 BA22 OUT 0x12,R2
C1 C015 RJMP 0x00D7
(0022) while(aa) //判斷端口是否恢復高電平,有延時抗干擾
(0023) {
(0024) aa=!(PINB&(1<<2));
C2 99B2 SBIC 0x16,2
C3 C003 RJMP 0x00C7
C4 E061 LDI R22,1
C5 E070 LDI R23,0
C6 C002 RJMP 0x00C9
C7 2766 CLR R22
C8 2777 CLR R23
C9 2F46 MOV R20,R22
(0025) if(aa==0)
CA 2366 TST R22
CB F459 BNE 0x00D7
(0026) {
(0027) s_ms(15000);
CC E908 LDI R16,0x98
CD E31A LDI R17,0x3A
CE DFC7 RCALL _s_ms
(0028) aa=!(PINB&(1<<2));
CF 99B2 SBIC 0x16,2
D0 C003 RJMP 0x00D4
D1 E061 LDI R22,1
D2 E070 LDI R23,0
D3 C002 RJMP 0x00D6
D4 2766 CLR R22
D5 2777 CLR R23
D6 2F46 MOV R20,R22
D7 2344 TST R20
D8 F749 BNE 0x00C2
D9 940E 0104 CALL pop_xgsetF000
DB 9009 LD R0,Y+
DC BE0F OUT 0x3F,R0
DD 91F9 LD R31,Y+
DE 91E9 LD R30,Y+
DF 91B9 LD R27,Y+
E0 91A9 LD R26,Y+
E1 9199 LD R25,Y+
E2 9189 LD R24,Y+
E3 9139 LD R19,Y+
E4 9129 LD R18,Y+
E5 9119 LD R17,Y+
E6 9109 LD R16,Y+
E7 9099 LD R9,Y+
E8 9089 LD R8,Y+
E9 9079 LD R7,Y+
EA 9069 LD R6,Y+
EB 9059 LD R5,Y+
EC 9049 LD R4,Y+
ED 9039 LD R3,Y+
EE 9029 LD R2,Y+
EF 9019 LD R1,Y+
F0 9009 LD R0,Y+
F1 9518 RETI
(0029) }
(0030) }
(0031) }
(0032)
(0033)
(0034) void main(void)
(0035) {
(0036) DDRD=0xff;
_main:
F2 EF8F LDI R24,0xFF
F3 BB81 OUT 0x11,R24
(0037) PORTD=0XFF;
F4 BB82 OUT 0x12,R24
(0038) DDRB=0xf0;
F5 EF80 LDI R24,0xF0
F6 BB87 OUT 0x17,R24
(0039) PORTB=0x0f;
F7 E08F LDI R24,0xF
F8 BB88 OUT 0x18,R24
(0040)
(0041) SREG=0x80; //開全局中斷
F9 E880 LDI R24,0x80
FA BF8F OUT 0x3F,R24
(0042)
(0043) GICR=0x20; //開外部中斷int_2,對應按鍵K9,K0,KA,KB
FB E280 LDI R24,0x20
FC BF8B OUT 0x3B,R24
(0044) while (1);
FILE: <library>
FD CFFF RJMP 0x00FD
FE 9508 RET
push_xgsetF000:
FF 937A ST R23,-Y
100 936A ST R22,-Y
101 935A ST R21,-Y
102 934A ST R20,-Y
103 9508 RET
pop_xgsetF000:
104 9149 LD R20,Y+
105 9159 LD R21,Y+
106 9169 LD R22,Y+
107 9179 LD R23,Y+
108 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -