📄 mian.lis
字号:
.module mian.c
.area text(rom, con, rel)
0000 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\INT0中断测试\mian.c
0000 .dbfunc e Delay_us _Delay_us fV
0000 ; time -> R16,R17
.even
0000 _Delay_us::
0000 .dbline -1
0000 .dbline 34
0000 ; /****************************************Copyright (c)**************************************************
0000 ; ** ADEmbed Development Co.,LTD.
0000 ; ** http://www.adembed.com
0000 ; **--------------File Info-------------------------------------------------------------------------------
0000 ; ** File name: main.c
0000 ; ** Last modified Date: 2008-12-13
0000 ; ** Last Version: 1.0
0000 ; ** Descriptions: INT0 Test.
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; ** Created by: junbolu
0000 ; ** Created date: 2008-12-13
0000 ; ** Version: 1.0
0000 ; ** Descriptions:
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; ** Modified by:
0000 ; ** Modified date:
0000 ; ** Version:
0000 ; ** Descriptions:
0000 ; **
0000 ; **------------------------------------------------------------------------------------------------------
0000 ; **ICC-AVR application builder : 2008-12-13
0000 ; **Target : M16
0000 ; **Crystal: 7.3728Mhz
0000 ; **PD2--->K0 PD7--->Sound_EN
0000 ; **描述:按下K0后会产生一个下降沿中断,中断处理程序将蜂鸣器使能1s。
0000 ; ** 最简单的下降沿中断程序。
0000 ; *******************************************************************************************************/
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; void Delay_us(unsigned int time)
0000 ; {
0000 L2:
0000 .dbline 35
0000 L3:
0000 .dbline 35
0000 ; while(time--);
0000 1801 movw R2,R16
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 2220 tst R2
0008 D9F7 brne L2
000A 3320 tst R3
000C C9F7 brne L2
000E X0:
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r time 16 i
0010 .dbend
0010 .dbfunc e Delay_ms _Delay_ms fV
0010 ; time -> R20,R21
.even
0010 _Delay_ms::
0010 0E940000 xcall push_gset1
0014 A801 movw R20,R16
0016 .dbline -1
0016 .dbline 39
0016 ; }
0016 ;
0016 ; void Delay_ms(unsigned int time)
0016 ; {
0016 03C0 xjmp L7
0018 L6:
0018 .dbline 41
0018 .dbline 42
0018 08EE ldi R16,1000
001A 13E0 ldi R17,3
001C F1DF xcall _Delay_us
001E .dbline 43
001E L7:
001E .dbline 40
001E ; while(time--)
001E 1A01 movw R2,R20
0020 4150 subi R20,1
0022 5040 sbci R21,0
0024 2220 tst R2
0026 C1F7 brne L6
0028 3320 tst R3
002A B1F7 brne L6
002C X1:
002C .dbline -2
002C L5:
002C 0E940000 xcall pop_gset1
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r time 20 i
0032 .dbend
0032 .dbfunc e INT0_Init _INT0_Init fV
.even
0032 _INT0_Init::
0032 .dbline -1
0032 .dbline 47
0032 ; {
0032 ; Delay_us(1000);
0032 ; }
0032 ; }
0032 ;
0032 ; void INT0_Init()
0032 ; {
0032 .dbline 48
0032 ; GIFR |=0X40; //清楚标志位
0032 8AB7 in R24,0x3a
0034 8064 ori R24,64
0036 8ABF out 0x3a,R24
0038 .dbline 50
0038 ; //MCUCR|=0X03; //上升沿触发中断
0038 ; MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断
0038 85B7 in R24,0x35
003A 8260 ori R24,2
003C 85BF out 0x35,R24
003E .dbline 50
003E 85B7 in R24,0x35
0040 8E7F andi R24,254
0042 85BF out 0x35,R24
0044 .dbline 51
0044 ; GICR |=0X40; //使能外部中断0
0044 8BB7 in R24,0x3b
0046 8064 ori R24,64
0048 8BBF out 0x3b,R24
004A .dbline -2
004A L9:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbend
.area vector(rom, abs)
.org 4
0004 0C942600 jmp _int0_isr
.area text(rom, con, rel)
004C .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\INT0中断测试\mian.c
004C .dbfunc e int0_isr _int0_isr fV
.even
004C _int0_isr::
004C 0E940000 xcall push_lset
0050 .dbline -1
0050 .dbline 56
0050 ; }
0050 ;
0050 ; #pragma interrupt_handler int0_isr:2
0050 ; void int0_isr(void)
0050 ; {
0050 .dbline 57
0050 ; PORTD&=~0X80; //低电平驱动
0050 9798 cbi 0x12,7
0052 .dbline 58
0052 ; Delay_ms(100); //延时0.1s
0052 04E6 ldi R16,100
0054 10E0 ldi R17,0
0056 DCDF xcall _Delay_ms
0058 .dbline 59
0058 ; PORTD|=0X80; //高电平暂停
0058 979A sbi 0x12,7
005A .dbline -2
005A L10:
005A 0E940000 xcall pop_lset
005E .dbline 0 ; func end
005E 1895 reti
0060 .dbend
0060 .dbfunc e main _main fV
.even
0060 _main::
0060 .dbline -1
0060 .dbline 63
0060 ; }
0060 ;
0060 ; void main(void)
0060 ; {
0060 .dbline 65
0060 ; //蜂鸣器端口初始化
0060 ; DDRD |=0x80; //设置PD7为输出
0060 8F9A sbi 0x11,7
0062 .dbline 66
0062 ; PORTD|=0x80; //设置PD7为高电平
0062 979A sbi 0x12,7
0064 .dbline 69
0064 ;
0064 ; //按键0端口初始化
0064 ; DDRD &=~0x04; //设置PD2为输入
0064 8A98 cbi 0x11,2
0066 .dbline 70
0066 ; PORTD|=0x04; //设置PD2为上拉
0066 929A sbi 0x12,2
0068 .dbline 72
0068 ;
0068 ; INT0_Init(); //TART初始化
0068 E4DF xcall _INT0_Init
006A .dbline 73
006A ; SEI(); //全局中断使能
006A 7894 sei
006C L12:
006C .dbline 75
006C .dbline 76
006C L13:
006C .dbline 74
006C FFCF xjmp L12
006E X2:
006E .dbline -2
006E L11:
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -