📄 中断按键.lis
字号:
00E6 24BE out 0x34,R2
00E8 .dbline 47
00E8 ; GICR |= 0xC0;//INT0、INT1中断使能
00E8 8BB7 in R24,0x3b
00EA 806C ori R24,192
00EC 8BBF out 0x3b,R24
00EE .dbline -2
00EE L16:
00EE .dbline 0 ; func end
00EE 0895 ret
00F0 .dbend
.area vector(rom, abs)
.org 4
0004 0C947800 jmp _int0_isr
.area text(rom, con, rel)
00F0 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键\中断按键.c
00F0 .dbfunc e int0_isr _int0_isr fV
.even
00F0 _int0_isr::
00F0 8A93 st -y,R24
00F2 8FB7 in R24,0x3f
00F4 8A93 st -y,R24
00F6 .dbline -1
00F6 .dbline 56
00F6 ; }
00F6 ;
00F6 ;
00F6 ;
00F6 ;
00F6 ; //外中断0服务程序
00F6 ; #pragma interrupt_handler int0_isr:2
00F6 ; void int0_isr(void)
00F6 ; {
00F6 .dbline 58
00F6 ; //外中断0
00F6 ; LED_ret=stop;
00F6 81E0 ldi R24,1
00F8 80930400 sts _LED_ret,R24
00FC .dbline 58
00FC .dbline -2
00FC L17:
00FC 8991 ld R24,y+
00FE 8FBF out 0x3f,R24
0100 8991 ld R24,y+
0102 .dbline 0 ; func end
0102 1895 reti
0104 .dbend
.area vector(rom, abs)
.org 8
0008 0C948200 jmp _int1_isr
.area text(rom, con, rel)
0104 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键\中断按键.c
0104 .dbfunc e int1_isr _int1_isr fV
.even
0104 _int1_isr::
0104 2A92 st -y,R2
0106 2FB6 in R2,0x3f
0108 2A92 st -y,R2
010A .dbline -1
010A .dbline 65
010A ; }
010A ;
010A ;
010A ; //外中断1服务程序
010A ; #pragma interrupt_handler int1_isr:3
010A ; void int1_isr(void)
010A ; {
010A .dbline 67
010A ; //外中断1
010A ; LED_ret=start;
010A 2224 clr R2
010C 20920400 sts _LED_ret,R2
0110 .dbline 67
0110 .dbline -2
0110 L18:
0110 2990 ld R2,y+
0112 2FBE out 0x3f,R2
0114 2990 ld R2,y+
0116 .dbline 0 ; func end
0116 1895 reti
0118 .dbend
0118 .dbfunc e LED_run _LED_run fV
.even
0118 _LED_run::
0118 .dbline -1
0118 .dbline 70
0118 ; }
0118 ; void LED_run(void)
0118 ; {
0118 .dbline 71
0118 ; d++;//个位相加
0118 80910000 lds R24,_d
011C 8F5F subi R24,255 ; addi 1
011E 80930000 sts _d,R24
0122 .dbline 72
0122 ; DelayMS(1);
0122 01E0 ldi R16,1
0124 10E0 ldi R17,0
0126 BADF xcall _DelayMS
0128 .dbline 73
0128 ; if(d==10)
0128 80910000 lds R24,_d
012C 8A30 cpi R24,10
012E 81F5 brne L20
0130 .dbline 74
0130 ; {
0130 .dbline 75
0130 ; d=0;
0130 2224 clr R2
0132 20920000 sts _d,R2
0136 .dbline 76
0136 ; c++;//十位相加
0136 80910100 lds R24,_c
013A 8F5F subi R24,255 ; addi 1
013C 80930100 sts _c,R24
0140 .dbline 77
0140 ; DelayMS(1);
0140 01E0 ldi R16,1
0142 10E0 ldi R17,0
0144 ABDF xcall _DelayMS
0146 .dbline 78
0146 ; if(c==10)
0146 80910100 lds R24,_c
014A 8A30 cpi R24,10
014C 09F5 brne L22
014E .dbline 79
014E ; {
014E .dbline 80
014E ; c=0;
014E 2224 clr R2
0150 20920100 sts _c,R2
0154 .dbline 81
0154 ; b++;//百位相加
0154 80910200 lds R24,_b
0158 8F5F subi R24,255 ; addi 1
015A 80930200 sts _b,R24
015E .dbline 82
015E ; DelayMS(1);
015E 01E0 ldi R16,1
0160 10E0 ldi R17,0
0162 9CDF xcall _DelayMS
0164 .dbline 83
0164 ; if(b==10)
0164 80910200 lds R24,_b
0168 8A30 cpi R24,10
016A 91F4 brne L24
016C .dbline 84
016C ; {
016C .dbline 85
016C ; b=0;
016C 2224 clr R2
016E 20920200 sts _b,R2
0172 .dbline 86
0172 ; a++;//千位相加
0172 80910300 lds R24,_a
0176 8F5F subi R24,255 ; addi 1
0178 80930300 sts _a,R24
017C .dbline 87
017C ; DelayMS(1);
017C 01E0 ldi R16,1
017E 10E0 ldi R17,0
0180 8DDF xcall _DelayMS
0182 .dbline 88
0182 ; if(a==10)
0182 80910300 lds R24,_a
0186 8A30 cpi R24,10
0188 19F4 brne L26
018A .dbline 89
018A ; a=0;
018A 2224 clr R2
018C 20920300 sts _a,R2
0190 L26:
0190 .dbline 90
0190 ; }
0190 L24:
0190 .dbline 91
0190 ; }
0190 L22:
0190 .dbline 92
0190 L20:
0190 .dbline -2
0190 L19:
0190 .dbline 0 ; func end
0190 0895 ret
0192 .dbend
0192 .dbfunc e init_devices _init_devices fV
.even
0192 _init_devices::
0192 .dbline -1
0192 .dbline 96
0192 ; }
0192 ; }
0192 ;
0192 ; void init_devices(void)
0192 ; {
0192 .dbline 97
0192 ; CLI(); //禁止所有中断
0192 F894 cli
0194 .dbline 98
0194 ; MCUCR = 0x00;///触发中断方式
0194 2224 clr R2
0196 25BE out 0x35,R2
0198 .dbline 99
0198 ; MCUCSR = 0x80;//禁止JTAG
0198 80E8 ldi R24,128
019A 84BF out 0x34,R24
019C .dbline 100
019C ; GICR = 0x00;//中断使能
019C 2BBE out 0x3b,R2
019E .dbline 101
019E ; port_init();
019E 94DF xcall _port_init
01A0 .dbline 102
01A0 ; int_init();
01A0 9EDF xcall _int_init
01A2 .dbline 103
01A2 ; LED_init();
01A2 2EDF xcall _LED_init
01A4 .dbline 104
01A4 ; SEI();//开全局中断
01A4 7894 sei
01A6 .dbline -2
01A6 L28:
01A6 .dbline 0 ; func end
01A6 0895 ret
01A8 .dbend
01A8 .dbfunc e main _main fV
.even
01A8 _main::
01A8 2397 sbiw R28,3
01AA .dbline -1
01AA .dbline 108
01AA ; }
01AA ; //主函数
01AA ; void main(void)
01AA ; {
01AA .dbline 109
01AA ; init_devices();//初始化端口、中断
01AA F3DF xcall _init_devices
01AC 10C0 xjmp L31
01AE L30:
01AE .dbline 112
01AE ; //在这继续添加你的代码
01AE ; while(1)
01AE ; {
01AE .dbline 113
01AE ; show_LED(d,c,b,a);//显示数字
01AE 20900300 lds R2,_a
01B2 2A82 std y+2,R2
01B4 20900200 lds R2,_b
01B8 2882 std y+0,R2
01BA 20910100 lds R18,_c
01BE 00910000 lds R16,_d
01C2 28DF xcall _show_LED
01C4 .dbline 114
01C4 ; if(LED_ret==0)//判断中断按键
01C4 20900400 lds R2,_LED_ret
01C8 2220 tst R2
01CA 09F4 brne L33
01CC .dbline 115
01CC ; LED_run();//数字累加
01CC A5DF xcall _LED_run
01CE L33:
01CE .dbline 116
01CE L31:
01CE .dbline 111
01CE EFCF xjmp L30
01D0 X1:
01D0 .dbline -2
01D0 L29:
01D0 2396 adiw R28,3
01D2 .dbline 0 ; func end
01D2 0895 ret
01D4 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\中断按键\中断按键.c
0000 _d::
0000 .blkb 1
0001 .dbsym e d _d c
0001 _c::
0001 .blkb 1
0002 .dbsym e c _c c
0002 _b::
0002 .blkb 1
0003 .dbsym e b _b c
0003 _a::
0003 .blkb 1
0004 .dbsym e a _a c
0004 _LED_ret::
0004 .blkb 1
0005 .dbsym e LED_ret _LED_ret c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -