📄 int.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 940E009C CALL _main
_exit:
004A CFFF RJMP _exit
_delay_ms:
i --> R20
time --> R16
004B 940E00AA CALL push_gset1
FILE: D:\AVR\我的程序\外部中断0实验\cfg.h
(0001) /****************************
(0002) *程序名称:功能函数集
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-23
(0005) ********************************/
(0006) #include <iom16v.h>
(0007)
(0008) /*延时子程序*/
(0009) void delay_ms(int time)
(0010) {
(0011) int i;
(0012) for(;time>0;time--)
004D C00A RJMP 0x0058
(0013) for(i=0;i<1000;i++);
004E 2744 CLR R20
004F 2755 CLR R21
0050 5F4F SUBI R20,0xFF
0051 4F5F SBCI R21,0xFF
0052 3E48 CPI R20,0xE8
0053 E0E3 LDI R30,3
0054 075E CPC R21,R30
0055 F3D4 BLT 0x0050
0056 5001 SUBI R16,1
0057 4010 SBCI R17,0
0058 2422 CLR R2
0059 2433 CLR R3
005A 1620 CP R2,R16
005B 0631 CPC R3,R17
005C F38C BLT 0x004E
005D 940E00AD CALL pop_gset1
005F 9508 RET
(0014) }
(0015)
(0016) /*端口初始化*/
(0017) void port_init()
(0018) {
(0019) DDRB=0xFF; //配置PB口为输出
_port_init:
0060 EF8F LDI R24,0xFF
0061 BB87 OUT 0x17,R24
(0020) PORTB=0xFF; //PB口的初始值为"1"
0062 BB88 OUT 0x18,R24
(0021)
(0022) DDRD&=~(1<<DDD2);
0063 988A CBI 0x11,2
(0023) PORTD|=(1<<PD2);
0064 9A92 SBI 0x12,2
0065 9508 RET
_display:
i --> R20
0066 940E00AA CALL push_gset1
(0024) }
(0025)
(0026) /*流水灯显示*/
(0027) void display()
(0028) {
(0029) unsigned char i;
(0030) for(i=0;i<8;i++) //去
0068 2744 CLR R20
0069 C00B RJMP 0x0075
(0031) {
(0032) PORTB=~(1<<i);
006A E001 LDI R16,1
006B 2F14 MOV R17,R20
006C 940E00EF CALL lsl8
006E 2E20 MOV R2,R16
006F 9420 COM R2
0070 BA28 OUT 0x18,R2
(0033) delay_ms(100);
0071 E604 LDI R16,0x64
0072 E010 LDI R17,0
0073 DFD7 RCALL _delay_ms
0074 9543 INC R20
0075 3048 CPI R20,0x8
0076 F398 BCS 0x006A
0077 940E00AD CALL pop_gset1
0079 9508 RET
(0034) }
(0035) }
(0036)
(0037) /*中断初始化*/
(0038) void INT0_init()
(0039) {
(0040) SREG=0x80; /*使能全局中断*/
_INT0_init:
007A E880 LDI R24,0x80
007B BF8F OUT 0x3F,R24
(0041) MCUCR&=~((1<<ISC01)|(1<<ISC00)); /*低电平触发中断*/
007C B785 IN R24,0x35
007D 7F8C ANDI R24,0xFC
007E BF85 OUT 0x35,R24
(0042) GICR=(1<<INT0); /*使能外部中断0请求*/
007F E480 LDI R24,0x40
0080 BF8B OUT 0x3B,R24
0081 9508 RET
_int0:
i --> R20
0082 940E00C1 CALL push_lset
0084 940E00AA CALL push_gset1
(0043) }
(0044)
(0045) /*中断服务程序*/
(0046) #pragma interrupt_handler int0:2
(0047) void int0()
(0048) {
(0049) unsigned char i;
(0050) for(i=8;i>0;i--) //回
0086 E048 LDI R20,0x8
0087 C00C RJMP 0x0094
(0051) {
(0052) PORTB=~(1<<i-1);
0088 2F14 MOV R17,R20
0089 5011 SUBI R17,1
008A E001 LDI R16,1
008B 940E00EF CALL lsl8
008D 2E20 MOV R2,R16
008E 9420 COM R2
008F BA28 OUT 0x18,R2
(0053) delay_ms(100);
0090 E604 LDI R16,0x64
0091 E010 LDI R17,0
0092 DFB8 RCALL _delay_ms
0093 954A DEC R20
0094 2422 CLR R2
0095 1624 CP R2,R20
0096 F388 BCS 0x0088
0097 940E00AD CALL pop_gset1
0099 940E00D8 CALL pop_lset
009B 9518 RETI
FILE: D:\AVR\我的程序\外部中断0实验\main.c
(0001) /***********************************
(0002) *实验目的:熟悉外部中断编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-23
(0005) ************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008)
(0009) void main()
(0010) {
(0011) port_init();
_main:
009C DFC3 RCALL _port_init
(0012) INT0_init(); /*外部中断初始化*/
009D DFDC RCALL _INT0_init
009E C001 RJMP 0x00A0
(0013)
(0014) while(1)
(0015) {
(0016) display();
FILE: <library>
009F DFC6 RCALL _display
00A0 CFFE RJMP 0x009F
00A1 9508 RET
push_gset5:
00A2 92FA ST R15,-Y
00A3 92EA ST R14,-Y
push_gset4:
00A4 92DA ST R13,-Y
00A5 92CA ST R12,-Y
push_gset3:
00A6 92BA ST R11,-Y
00A7 92AA ST R10,-Y
push_gset2:
00A8 937A ST R23,-Y
00A9 936A ST R22,-Y
push_gset1:
00AA 935A ST R21,-Y
00AB 934A ST R20,-Y
00AC 9508 RET
pop_gset1:
00AD E0E1 LDI R30,1
pop:
00AE 9149 LD R20,Y+
00AF 9159 LD R21,Y+
00B0 FDE0 SBRC R30,0
00B1 9508 RET
00B2 9169 LD R22,Y+
00B3 9179 LD R23,Y+
00B4 FDE1 SBRC R30,1
00B5 9508 RET
00B6 90A9 LD R10,Y+
00B7 90B9 LD R11,Y+
00B8 FDE2 SBRC R30,2
00B9 9508 RET
00BA 90C9 LD R12,Y+
00BB 90D9 LD R13,Y+
00BC FDE3 SBRC R30,3
00BD 9508 RET
00BE 90E9 LD R14,Y+
00BF 90F9 LD R15,Y+
00C0 9508 RET
push_lset:
00C1 93FA ST R31,-Y
00C2 93EA ST R30,-Y
00C3 93BA ST R27,-Y
00C4 93AA ST R26,-Y
00C5 939A ST R25,-Y
00C6 938A ST R24,-Y
00C7 933A ST R19,-Y
00C8 932A ST R18,-Y
00C9 931A ST R17,-Y
00CA 930A ST R16,-Y
00CB 929A ST R9,-Y
00CC 928A ST R8,-Y
00CD 927A ST R7,-Y
00CE 926A ST R6,-Y
00CF 925A ST R5,-Y
00D0 924A ST R4,-Y
00D1 923A ST R3,-Y
00D2 922A ST R2,-Y
00D3 921A ST R1,-Y
00D4 920A ST R0,-Y
00D5 B60F IN R0,0x3F
00D6 920A ST R0,-Y
00D7 9508 RET
pop_lset:
00D8 9009 LD R0,Y+
00D9 BE0F OUT 0x3F,R0
00DA 9009 LD R0,Y+
00DB 9019 LD R1,Y+
00DC 9029 LD R2,Y+
00DD 9039 LD R3,Y+
00DE 9049 LD R4,Y+
00DF 9059 LD R5,Y+
00E0 9069 LD R6,Y+
00E1 9079 LD R7,Y+
00E2 9089 LD R8,Y+
00E3 9099 LD R9,Y+
00E4 9109 LD R16,Y+
00E5 9119 LD R17,Y+
00E6 9129 LD R18,Y+
00E7 9139 LD R19,Y+
00E8 9189 LD R24,Y+
00E9 9199 LD R25,Y+
00EA 91A9 LD R26,Y+
00EB 91B9 LD R27,Y+
00EC 91E9 LD R30,Y+
00ED 91F9 LD R31,Y+
00EE 9508 RET
lsl8:
00EF 2311 TST R17
00F0 F019 BEQ 0x00F4
00F1 0F00 LSL R16
00F2 951A DEC R17
00F3 CFFB RJMP lsl8
00F4 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -