⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 中断按键.s

📁 AVR之ATMega16
💻 S
字号:
	.module _中断按键.c
	.area data(ram, con, rel)
_LED_data::
	.blkb 2
	.area idata
	.byte 192,249
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 164,176
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 153,146
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 130,248
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 128,144
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键/数码管.h
	.dbsym e LED_data _LED_data A[10:10]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键/数码管.h
	.dbfunc e LED_init _LED_init fV
	.even
_LED_init::
	.dbline -1
	.dbline 18
; //内部晶振 8M
; //包含所需头文件
; #include <ioM16v.h>
; #include <macros.h>
; #include"数码管.h"
; #include"delay.h"
; 
; 
; 
; /*------宏定义------*/
; #define uchar	unsigned char
; #define uint	unsigned int
; 
; /*********标志位************************************************/
; #define start 0x0;
; #define stop  0x1;
; //----------函数申明-------------------------
; /***************************************************************/
	.dbline 19
; //void LED_init(void);                                                  //LED初始化
	ldi R24,255
	out 0x1a,R24
	.dbline 20
; //void show_LED(uchar data1,uchar data2,uchar data3,uchar data4);   //LED显示
	in R24,0x17
	ori R24,255
	out 0x17,R24
	.dbline 21
; //void LED_run(void)	;						 
	clr R2
	out 0x1b,R2
	.dbline 22
; /****************************************************************/
	in R2,0x18
	out 0x18,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e show_LED _show_LED fV
;          data4 -> y+6
;          data3 -> y+4
;          data2 -> R20
;          data1 -> R22
	.even
_show_LED::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 25
; /*********标志位************************************************/
; uchar LED_ret;
; 
	.dbline 26
; uchar a,b, c,d;//全局变量定义
	ldi R24,<_LED_data
	ldi R25,>_LED_data
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 27
; 
	ldi R24,247
	out 0x18,R24
	.dbline 28
; //端口初始化
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline 30
; void port_init(void)
; {
	ldi R24,<_LED_data
	ldi R25,>_LED_data
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 31
;  PORTA = 0x00;//设置A口置1
	ldi R24,251
	out 0x18,R24
	.dbline 32
;  DDRA  = 0x00;//设置A口输入
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline 34
;  PORTB = 0x00;
;  DDRB  = 0x00;
	ldi R24,<_LED_data
	ldi R25,>_LED_data
	ldd R30,y+4
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 35
;  PORTC = 0x00;
	ldi R24,253
	out 0x18,R24
	.dbline 36
;  DDRC  = 0x00;
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline 38
;  PORTD = 0x0c;
;  DDRD  = 0x00;
	ldi R24,<_LED_data
	ldi R25,>_LED_data
	ldd R30,y+6
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 39
; }
	ldi R24,254
	out 0x18,R24
	.dbline 40
; 
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline -2
L2:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data4 6 c
	.dbsym l data3 4 c
	.dbsym r data2 20 c
	.dbsym r data1 22 c
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键/delay.h
	.dbfunc e DelayUS _DelayUS fV
;           time -> R16,R17
	.even
_DelayUS::
	.dbline -1
	.dbline 9
	xjmp L5
L4:
	.dbline 11
	subi R16,1
	sbci R17,0
L5:
	.dbline 10
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlo L4
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e DelayMS _DelayMS fV
;              i -> R20,R21
;           time -> R16,R17
	.even
_DelayMS::
	xcall push_gset1
	.dbline -1
	.dbline 20
	xjmp L9
L8:
	.dbline 23
	.dbline 24
	ldi R20,1
	ldi R21,0
	xjmp L14
L11:
	.dbline 25
L12:
	.dbline 24
	subi R20,255  ; offset = 1
	sbci R21,255
L14:
	.dbline 24
	cpi R20,118
	ldi R30,4
	cpc R21,R30
	brlo L11
	.dbline 26
L9:
	.dbline 22
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L8
	tst R3
	brne L8
X0:
	.dbline -2
L7:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r time 16 i
	.dbend
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键\中断按键.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 30
	.dbline 31
	clr R2
	out 0x1b,R2
	.dbline 32
	out 0x1a,R2
	.dbline 33
	out 0x18,R2
	.dbline 34
	out 0x17,R2
	.dbline 35
	out 0x15,R2
	.dbline 36
	out 0x14,R2
	.dbline 37
	ldi R24,12
	out 0x12,R24
	.dbline 38
	out 0x11,R2
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e int_init _int_init fV
	.even
_int_init::
	.dbline -1
	.dbline 44
; 
; //外中断初始化
; void int_init(void)
; {
	.dbline 45
;  MCUCR |= 0x0a;//INT0、INT1下降沿触发中断
	in R24,0x35
	ori R24,10
	out 0x35,R24
	.dbline 46
;  MCUCSR|= 0x00;//关闭INT2
	in R2,0x34
	out 0x34,R2
	.dbline 47
;  GICR  |= 0xC0;//INT0、INT1中断使能
	in R24,0x3b
	ori R24,192
	out 0x3b,R24
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _int0_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键\中断按键.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	st -y,R24
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 56
; }
; 
; 
; 
; 
; //外中断0服务程序
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 58
;  //外中断0
; LED_ret=stop;
	ldi R24,1
	sts _LED_ret,R24
	.dbline 58
	.dbline -2
L17:
	ld R24,y+
	out 0x3f,R24
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 8
	jmp _int1_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键\中断按键.c
	.dbfunc e int1_isr _int1_isr fV
	.even
_int1_isr::
	st -y,R2
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 65
; }
; 
; 
; //外中断1服务程序
; #pragma interrupt_handler int1_isr:3
; void int1_isr(void)
; {
	.dbline 67
;  //外中断1
; LED_ret=start;
	clr R2
	sts _LED_ret,R2
	.dbline 67
	.dbline -2
L18:
	ld R2,y+
	out 0x3f,R2
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e LED_run _LED_run fV
	.even
_LED_run::
	.dbline -1
	.dbline 70
; }
; void LED_run(void)
; {
	.dbline 71
;  	 d++;//个位相加
	lds R24,_d
	subi R24,255    ; addi 1
	sts _d,R24
	.dbline 72
; 	 DelayMS(1);
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline 73
; 	 if(d==10)
	lds R24,_d
	cpi R24,10
	brne L20
	.dbline 74
; 	 {
	.dbline 75
; 	  d=0;
	clr R2
	sts _d,R2
	.dbline 76
; 	  c++;//十位相加
	lds R24,_c
	subi R24,255    ; addi 1
	sts _c,R24
	.dbline 77
; 	  DelayMS(1);
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline 78
; 	  if(c==10)
	lds R24,_c
	cpi R24,10
	brne L22
	.dbline 79
; 	  {
	.dbline 80
; 	   c=0;
	clr R2
	sts _c,R2
	.dbline 81
; 	   b++;//百位相加
	lds R24,_b
	subi R24,255    ; addi 1
	sts _b,R24
	.dbline 82
; 	   DelayMS(1);
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline 83
; 	   if(b==10)
	lds R24,_b
	cpi R24,10
	brne L24
	.dbline 84
; 	   {
	.dbline 85
; 	   b=0;
	clr R2
	sts _b,R2
	.dbline 86
; 	   a++;//千位相加
	lds R24,_a
	subi R24,255    ; addi 1
	sts _a,R24
	.dbline 87
; 	   DelayMS(1);
	ldi R16,1
	ldi R17,0
	xcall _DelayMS
	.dbline 88
; 	   if(a==10)
	lds R24,_a
	cpi R24,10
	brne L26
	.dbline 89
; 	   a=0;
	clr R2
	sts _a,R2
L26:
	.dbline 90
; 	   }
L24:
	.dbline 91
; 	  }
L22:
	.dbline 92
L20:
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 96
; 	 }
; }
; 
; void init_devices(void)
; {
	.dbline 97
;  CLI(); //禁止所有中断
	cli
	.dbline 98
;  MCUCR  = 0x00;///触发中断方式
	clr R2
	out 0x35,R2
	.dbline 99
;  MCUCSR = 0x80;//禁止JTAG
	ldi R24,128
	out 0x34,R24
	.dbline 100
;  GICR   = 0x00;//中断使能
	out 0x3b,R2
	.dbline 101
;  port_init();
	xcall _port_init
	.dbline 102
;  int_init();
	xcall _int_init
	.dbline 103
;  LED_init();
	xcall _LED_init
	.dbline 104
;  SEI();//开全局中断
	sei
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	sbiw R28,3
	.dbline -1
	.dbline 108
; }
; //主函数
; void main(void)
; {
	.dbline 109
;  init_devices();//初始化端口、中断
	xcall _init_devices
	xjmp L31
L30:
	.dbline 112
;  //在这继续添加你的代码
;  while(1)
;  {
	.dbline 113
; show_LED(d,c,b,a);//显示数字
	lds R2,_a
	std y+2,R2
	lds R2,_b
	std y+0,R2
	lds R18,_c
	lds R16,_d
	xcall _show_LED
	.dbline 114
; if(LED_ret==0)//判断中断按键
	lds R2,_LED_ret
	tst R2
	brne L33
	.dbline 115
; LED_run();//数字累加
	xcall _LED_run
L33:
	.dbline 116
L31:
	.dbline 111
	xjmp L30
X1:
	.dbline -2
L29:
	adiw R28,3
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键\中断按键.c
_d::
	.blkb 1
	.dbsym e d _d c
_c::
	.blkb 1
	.dbsym e c _c c
_b::
	.blkb 1
	.dbsym e b _b c
_a::
	.blkb 1
	.dbsym e a _a c
_LED_ret::
	.blkb 1
	.dbsym e LED_ret _LED_ret c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -