📄 int0.lst
字号:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E007B CALL _main
_exit:
004A CFFF RJMP _exit
FILE: E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\INT0中断测试\mian.c
(0001) /****************************************Copyright (c)**************************************************
(0002) ** ADEmbed Development Co.,LTD.
(0003) ** http://www.adembed.com
(0004) **--------------File Info-------------------------------------------------------------------------------
(0005) ** File name: main.c
(0006) ** Last modified Date: 2008-12-13
(0007) ** Last Version: 1.0
(0008) ** Descriptions: INT0 Test.
(0009) **
(0010) **------------------------------------------------------------------------------------------------------
(0011) ** Created by: junbolu
(0012) ** Created date: 2008-12-13
(0013) ** Version: 1.0
(0014) ** Descriptions:
(0015) **
(0016) **------------------------------------------------------------------------------------------------------
(0017) ** Modified by:
(0018) ** Modified date:
(0019) ** Version:
(0020) ** Descriptions:
(0021) **
(0022) **------------------------------------------------------------------------------------------------------
(0023) **ICC-AVR application builder : 2008-12-13
(0024) **Target : M16
(0025) **Crystal: 7.3728Mhz
(0026) **PD2--->K0 PD7--->Sound_EN
(0027) **描述:按下K0后会产生一个下降沿中断,中断处理程序将蜂鸣器使能1s。
(0028) ** 最简单的下降沿中断程序。
(0029) *******************************************************************************************************/
(0030) #include <iom16v.h>
(0031) #include <macros.h>
(0032)
(0033) void Delay_us(unsigned int time)
(0034) {
(0035) while(time--);
_Delay_us:
time --> R16
004B 0118 MOVW R2,R16
004C 5001 SUBI R16,1
004D 4010 SBCI R17,0
004E 2022 TST R2
004F F7D9 BNE 0x004B
0050 2033 TST R3
0051 F7C9 BNE 0x004B
0052 9508 RET
_Delay_ms:
time --> R20
0053 940E008B CALL push_gset1
0055 01A8 MOVW R20,R16
(0036) }
(0037)
(0038) void Delay_ms(unsigned int time)
(0039) {
0056 C003 RJMP 0x005A
(0040) while(time--)
(0041) {
(0042) Delay_us(1000);
0057 EE08 LDI R16,0xE8
0058 E013 LDI R17,3
0059 DFF1 RCALL _Delay_us
005A 011A MOVW R2,R20
005B 5041 SUBI R20,1
005C 4050 SBCI R21,0
005D 2022 TST R2
005E F7C1 BNE 0x0057
005F 2033 TST R3
0060 F7B1 BNE 0x0057
0061 940E008E CALL pop_gset1
0063 9508 RET
(0043) }
(0044) }
(0045)
(0046) void INT0_Init()
(0047) {
(0048) GIFR |=0X40; //清楚标志位
_INT0_Init:
0064 B78A IN R24,0x3A
0065 6480 ORI R24,0x40
0066 BF8A OUT 0x3A,R24
(0049) //MCUCR|=0X03; //上升沿触发中断
(0050) MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断
0067 B785 IN R24,0x35
0068 6082 ORI R24,2
0069 BF85 OUT 0x35,R24
006A B785 IN R24,0x35
006B 7F8E ANDI R24,0xFE
006C BF85 OUT 0x35,R24
(0051) GICR |=0X40; //使能外部中断0
006D B78B IN R24,0x3B
006E 6480 ORI R24,0x40
006F BF8B OUT 0x3B,R24
0070 9508 RET
_int0_isr:
0071 940E00A2 CALL push_lset
(0052) }
(0053)
(0054) #pragma interrupt_handler int0_isr:2
(0055) void int0_isr(void)
(0056) {
(0057) PORTD&=~0X80; //低电平驱动
0073 9897 CBI 0x12,7
(0058) Delay_ms(100); //延时0.1s
0074 E604 LDI R16,0x64
0075 E010 LDI R17,0
0076 DFDC RCALL _Delay_ms
(0059) PORTD|=0X80; //高电平暂停
0077 9A97 SBI 0x12,7
0078 940E00B9 CALL pop_lset
007A 9518 RETI
(0060) }
(0061)
(0062) void main(void)
(0063) {
(0064) //蜂鸣器端口初始化
(0065) DDRD |=0x80; //设置PD7为输出
_main:
007B 9A8F SBI 0x11,7
(0066) PORTD|=0x80; //设置PD7为高电平
007C 9A97 SBI 0x12,7
(0067)
(0068) //按键0端口初始化
(0069) DDRD &=~0x04; //设置PD2为输入
007D 988A CBI 0x11,2
(0070) PORTD|=0x04; //设置PD2为上拉
007E 9A92 SBI 0x12,2
(0071)
(0072) INT0_Init(); //TART初始化
007F DFE4 RCALL _INT0_Init
(0073) SEI(); //全局中断使能
0080 9478 BSET 7
(0074) while(1)
FILE: <library>
0081 CFFF RJMP 0x0081
0082 9508 RET
push_gset5:
0083 92FA ST R15,-Y
0084 92EA ST R14,-Y
push_gset4:
0085 92DA ST R13,-Y
0086 92CA ST R12,-Y
push_gset3:
0087 92BA ST R11,-Y
0088 92AA ST R10,-Y
push_gset2:
0089 937A ST R23,-Y
008A 936A ST R22,-Y
push_gset1:
008B 935A ST R21,-Y
008C 934A ST R20,-Y
008D 9508 RET
pop_gset1:
008E E0E1 LDI R30,1
pop:
008F 9149 LD R20,Y+
0090 9159 LD R21,Y+
0091 FDE0 SBRC R30,0
0092 9508 RET
0093 9169 LD R22,Y+
0094 9179 LD R23,Y+
0095 FDE1 SBRC R30,1
0096 9508 RET
0097 90A9 LD R10,Y+
0098 90B9 LD R11,Y+
0099 FDE2 SBRC R30,2
009A 9508 RET
009B 90C9 LD R12,Y+
009C 90D9 LD R13,Y+
009D FDE3 SBRC R30,3
009E 9508 RET
009F 90E9 LD R14,Y+
00A0 90F9 LD R15,Y+
00A1 9508 RET
push_lset:
00A2 93FA ST R31,-Y
00A3 93EA ST R30,-Y
00A4 93BA ST R27,-Y
00A5 93AA ST R26,-Y
00A6 939A ST R25,-Y
00A7 938A ST R24,-Y
00A8 933A ST R19,-Y
00A9 932A ST R18,-Y
00AA 931A ST R17,-Y
00AB 930A ST R16,-Y
00AC 929A ST R9,-Y
00AD 928A ST R8,-Y
00AE 927A ST R7,-Y
00AF 926A ST R6,-Y
00B0 925A ST R5,-Y
00B1 924A ST R4,-Y
00B2 923A ST R3,-Y
00B3 922A ST R2,-Y
00B4 921A ST R1,-Y
00B5 920A ST R0,-Y
00B6 B60F IN R0,0x3F
00B7 920A ST R0,-Y
00B8 9508 RET
pop_lset:
00B9 9009 LD R0,Y+
00BA BE0F OUT 0x3F,R0
00BB 9009 LD R0,Y+
00BC 9019 LD R1,Y+
00BD 9029 LD R2,Y+
00BE 9039 LD R3,Y+
00BF 9049 LD R4,Y+
00C0 9059 LD R5,Y+
00C1 9069 LD R6,Y+
00C2 9079 LD R7,Y+
00C3 9089 LD R8,Y+
00C4 9099 LD R9,Y+
00C5 9109 LD R16,Y+
00C6 9119 LD R17,Y+
00C7 9129 LD R18,Y+
00C8 9139 LD R19,Y+
00C9 9189 LD R24,Y+
00CA 9199 LD R25,Y+
00CB 91A9 LD R26,Y+
00CC 91B9 LD R27,Y+
00CD 91E9 LD R30,Y+
00CE 91F9 LD R31,Y+
00CF 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -