📄 mian.s
字号:
.module mian.c
.area text(rom, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\INT0中断测试\mian.c
.dbfunc e Delay_us _Delay_us fV
; time -> R16,R17
.even
_Delay_us::
.dbline -1
.dbline 34
; /****************************************Copyright (c)**************************************************
; ** ADEmbed Development Co.,LTD.
; ** http://www.adembed.com
; **--------------File Info-------------------------------------------------------------------------------
; ** File name: main.c
; ** Last modified Date: 2008-12-13
; ** Last Version: 1.0
; ** Descriptions: INT0 Test.
; **
; **------------------------------------------------------------------------------------------------------
; ** Created by: junbolu
; ** Created date: 2008-12-13
; ** Version: 1.0
; ** Descriptions:
; **
; **------------------------------------------------------------------------------------------------------
; ** Modified by:
; ** Modified date:
; ** Version:
; ** Descriptions:
; **
; **------------------------------------------------------------------------------------------------------
; **ICC-AVR application builder : 2008-12-13
; **Target : M16
; **Crystal: 7.3728Mhz
; **PD2--->K0 PD7--->Sound_EN
; **描述:按下K0后会产生一个下降沿中断,中断处理程序将蜂鸣器使能1s。
; ** 最简单的下降沿中断程序。
; *******************************************************************************************************/
; #include <iom16v.h>
; #include <macros.h>
;
; void Delay_us(unsigned int time)
; {
L2:
.dbline 35
L3:
.dbline 35
; while(time--);
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L2
tst R3
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e Delay_ms _Delay_ms fV
; time -> R20,R21
.even
_Delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 39
; }
;
; void Delay_ms(unsigned int time)
; {
xjmp L7
L6:
.dbline 41
.dbline 42
ldi R16,1000
ldi R17,3
xcall _Delay_us
.dbline 43
L7:
.dbline 40
; while(time--)
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L6
tst R3
brne L6
X1:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e INT0_Init _INT0_Init fV
.even
_INT0_Init::
.dbline -1
.dbline 47
; {
; Delay_us(1000);
; }
; }
;
; void INT0_Init()
; {
.dbline 48
; GIFR |=0X40; //清楚标志位
in R24,0x3a
ori R24,64
out 0x3a,R24
.dbline 50
; //MCUCR|=0X03; //上升沿触发中断
; MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断
in R24,0x35
ori R24,2
out 0x35,R24
.dbline 50
in R24,0x35
andi R24,254
out 0x35,R24
.dbline 51
; GICR |=0X40; //使能外部中断0
in R24,0x3b
ori R24,64
out 0x3b,R24
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 4
jmp _int0_isr
.area text(rom, con, rel)
.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\INT0中断测试\mian.c
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
xcall push_lset
.dbline -1
.dbline 56
; }
;
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 57
; PORTD&=~0X80; //低电平驱动
cbi 0x12,7
.dbline 58
; Delay_ms(100); //延时0.1s
ldi R16,100
ldi R17,0
xcall _Delay_ms
.dbline 59
; PORTD|=0X80; //高电平暂停
sbi 0x12,7
.dbline -2
L10:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 63
; }
;
; void main(void)
; {
.dbline 65
; //蜂鸣器端口初始化
; DDRD |=0x80; //设置PD7为输出
sbi 0x11,7
.dbline 66
; PORTD|=0x80; //设置PD7为高电平
sbi 0x12,7
.dbline 69
;
; //按键0端口初始化
; DDRD &=~0x04; //设置PD2为输入
cbi 0x11,2
.dbline 70
; PORTD|=0x04; //设置PD2为上拉
sbi 0x12,2
.dbline 72
;
; INT0_Init(); //TART初始化
xcall _INT0_Init
.dbline 73
; SEI(); //全局中断使能
sei
L12:
.dbline 75
.dbline 76
L13:
.dbline 74
xjmp L12
X2:
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -