external_int.lst
来自「AVR单片机ATMEGA128实习之—外部中断(附带Proteus仿真例子)」· LST 代码 · 共 155 行
LST
155 行
__start:
__text_start:
0048 EFCF LDI R28,0xFF
0049 E1D0 LDI R29,0x10
004A BFCD OUT P3D,R28
004B BFDE OUT P3E,R29
004C 51C0 SUBI R28,0x10
004D 40D0 SBCI R29,0
004E EA0A LDI R16,0xAA
004F 8308 STD R16,0+Y
0050 2400 CLR R0
0051 E0E3 LDI R30,3
0052 E0F1 LDI R31,1
0053 E011 LDI R17,1
0054 30E3 CPI R30,3
0055 07F1 CPC R31,R17
0056 F011 BEQ 0x0059
0057 9201 ST R0,Z+
0058 CFFB RJMP 0x0054
0059 8300 STD R16,0+Z
005A E8EC LDI R30,0x8C
005B E0F0 LDI R31,0
005C E0A0 LDI R26,0
005D E0B1 LDI R27,1
005E E010 LDI R17,0
005F 38EF CPI R30,0x8F
0060 07F1 CPC R31,R17
0061 F021 BEQ 0x0066
0062 95C8 LPM
0063 9631 ADIW R30,1
0064 920D ST R0,X+
0065 CFF9 RJMP 0x005F
0066 940E0069 CALL _main
_exit:
0068 CFFF RJMP _exit
FILE: G:\猛\avr实践\外部中断\External_int.c
(0001) #include <iom128.h>
(0002) #include <macros.h>
(0003)
(0004)
(0005) #define Red_LED_on PORTB&~BIT(0)
(0006) #define Red_LED_off PORTB|(1<<0)
(0007) #define Green_LED_on PORTB&(~(1<<1))
(0008) #define Green_LED_off PORTB|(1<<1)
(0009) #define Yellow_LED_on PORTB&(~(1<<2))
(0010) #define Yellow_LED_off PORTB|(1<<2)
(0011)
(0012)
(0013) unsigned char INT0_flag = 0;
(0014) unsigned char INT1_flag = 0;
(0015) unsigned char INT2_flag = 0;
(0016)
(0017) #pragma interrupt_handler External_INT_0:2 //外部中断0
(0018) #pragma interrupt_handler External_INT_1:3 //外部中断1
(0019) #pragma interrupt_handler External_INT_2:4 //外部中断2
(0020)
(0021) void Port_initilaze(void);
(0022) void INT_initialize(void);
(0023)
(0024) void main(void)
(0025) {
(0026) Port_initialize();
_main:
0069 D001 RCALL _Port_initialize
(0027) INT_initialize();
(0028)
(0029) }
006A C007 RJMP _INT_initialize
(0030) void Port_initialize(void)
(0031) {
(0032) DDRB = 0xFF;
_Port_initialize:
006B EF8F LDI R24,0xFF
006C BB87 OUT P17,R24
(0033) DDRD = 0xf0;
006D EF80 LDI R24,0xF0
006E BB81 OUT P11,R24
(0034) PORTB = 0xff;
006F EF8F LDI R24,0xFF
0070 BB88 OUT P18,R24
(0035) }
0071 9508 RET
(0036) void INT_initialize(void)
(0037) {
(0038) EICRA = 0xaa; //fall edge trigger
_INT_initialize:
0072 EA8A LDI R24,0xAA
0073 9380006A STS 0x6A,R24
(0039) EICRB = 0x00; //no influence
0075 2422 CLR R2
0076 BE2A OUT P3A,R2
(0040) EIMSK = 0x0f;
0077 E08F LDI R24,0xF
0078 BF89 OUT P39,R24
(0041)
(0042) SEI();
0079 9478 BSET 7
(0043)
(0044) }
007A 9508 RET
_External_INT_0:
007B 920A ST R0,-Y
007C B60F IN R0,P3F
007D 920A ST R0,-Y
(0045) void External_INT_0(void)
(0046) {
(0047) PORTB = Green_LED_off;
007E 9AC1 SBI P18,1
(0048) PORTB = Yellow_LED_off;
007F 9AC2 SBI P18,2
(0049) PORTB = Red_LED_on;
0080 98C0 CBI P18,0
(0050) }
0081 9009 LD R0,Y+
0082 BE0F OUT P3F,R0
0083 9009 LD R0,Y+
0084 9518 RETI
_External_INT_1:
0085 920A ST R0,-Y
0086 B60F IN R0,P3F
0087 920A ST R0,-Y
(0051) void External_INT_1(void)
(0052) {
(0053)
(0054) PORTB = Green_LED_on;
0088 98C1 CBI P18,1
(0055) PORTB = Yellow_LED_off;
0089 9AC2 SBI P18,2
(0056) PORTB = Red_LED_off;
008A 9AC0 SBI P18,0
(0057) }
008B 9009 LD R0,Y+
008C BE0F OUT P3F,R0
008D 9009 LD R0,Y+
008E 9518 RETI
_External_INT_2:
008F 920A ST R0,-Y
0090 B60F IN R0,P3F
0091 920A ST R0,-Y
(0058) void External_INT_2(void)
(0059) {
(0060)
(0061) PORTB = Green_LED_off;
0092 9AC1 SBI P18,1
(0062) PORTB = Yellow_LED_on;
0093 98C2 CBI P18,2
(0063) PORTB = Red_LED_off;
0094 9AC0 SBI P18,0
(0064) }
FILE: <library>
0095 9009 LD R0,Y+
0096 BE0F OUT P3F,R0
0097 9009 LD R0,Y+
0098 9518 RETI
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?