📄 int0.lst
字号:
__start:
__text_start:
0018 E5CF LDI R28,0x5F
0019 E0D4 LDI R29,4
001A BFCD OUT 0x3D,R28
001B BFDE OUT 0x3E,R29
001C 51C0 SUBI R28,0x10
001D 40D0 SBCI R29,0
001E EA0A LDI R16,0xAA
001F 8308 STD Y+0,R16
0020 2400 CLR R0
0021 E6E0 LDI R30,0x60
0022 E0F0 LDI R31,0
0023 E010 LDI R17,0
0024 36E1 CPI R30,0x61
0025 07F1 CPC R31,R17
0026 F011 BEQ 0x0029
0027 9201 ST R0,Z+
0028 CFFB RJMP 0x0024
0029 8300 STD Z+0,R16
002A E3E0 LDI R30,0x30
002B E0F0 LDI R31,0
002C E6A0 LDI R26,0x60
002D E0B0 LDI R27,0
002E E010 LDI R17,0
002F 33E0 CPI R30,0x30
0030 07F1 CPC R31,R17
0031 F021 BEQ 0x0036
0032 95C8 LPM
0033 9631 ADIW R30,1
0034 920D ST R0,X+
0035 CFF9 RJMP 0x002F
0036 D02E RCALL _main
_exit:
0037 CFFF RJMP _exit
FILE: F:\Learn\AVR\Pro_Mega8\中断\Int0\Delay.h
(0001) //延时1MS
(0002) void delay_1ms(void)
(0003) {
(0004) unsigned int i;
(0005) for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
i --> R16
0038 E001 LDI R16,1
0039 E010 LDI R17,0
003A C002 RJMP 0x003D
003B 5F0F SUBI R16,0xFF
003C 4F1F SBCI R17,0xFF
003D 3706 CPI R16,0x76
003E E0E4 LDI R30,4
003F 071E CPC R17,R30
0040 F3D0 BCS 0x003B
(0006) ;
(0007) }
0041 9508 RET
_delay_ms:
i --> R20
n --> R22
0042 D0A2 RCALL push_gset2
0043 01B8 MOVW R22,R16
(0008)
(0009) //延时nMS
(0010) void delay_ms(unsigned int n)
(0011) {
(0012) unsigned int i=0;
0044 2744 CLR R20
0045 2755 CLR R21
0046 C003 RJMP 0x004A
(0013) while(i<n)
(0014) {
(0015) delay_1ms();
0047 DFF0 RCALL _delay_1ms
(0016) i++;
0048 5F4F SUBI R20,0xFF
0049 4F5F SBCI R21,0xFF
004A 1746 CP R20,R22
004B 0757 CPC R21,R23
004C F3D0 BCS 0x0047
(0017) }
(0018) }
004D D07E RCALL pop_gset2
004E 9508 RET
_int_fun:
004F 922A ST R2,-Y
0050 938A ST R24,-Y
0051 939A ST R25,-Y
0052 B62F IN R2,0x3F
0053 922A ST R2,-Y
FILE: F:\Learn\AVR\Pro_Mega8\中断\Int0\Int0.C
(0001) /******************************************/
(0002) //文件名:Int0.c
(0003) //功能: 外部中断的应用
(0004) //作者: young
(0005) //时间: 2006.10.1
(0006) //目标MCU:ATmega8
(0007) //晶振: 8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010) #include <macros.h>
(0011) #include "Delay.h"
(0012)
(0013) unsigned char CountNum; //全局变量,用来计数
(0014)
(0015) #pragma interrupt_handler int_fun:2
(0016) #pragma interrupt_handler int_fun:3
(0017) void int_fun(void)
(0018) {
(0019) if(++CountNum>=100)
0054 91800060 LDS R24,_CountNum
0056 5F8F SUBI R24,0xFF
0057 2E28 MOV R2,R24
0058 92200060 STS _CountNum,R2
005A 3684 CPI R24,0x64
005B F018 BCS 0x005F
(0020) CountNum=0;
005C 2422 CLR R2
005D 92200060 STS _CountNum,R2
(0021) }
005F 9029 LD R2,Y+
0060 BE2F OUT 0x3F,R2
0061 9199 LD R25,Y+
0062 9189 LD R24,Y+
0063 9029 LD R2,Y+
0064 9518 RETI
_main:
temp2 --> Y+1
num --> Y+0
temp --> R20
0065 972A SBIW R28,0xA
(0022)
(0023) //主函数,依次显示数字0~9
(0024) void main()
(0025) {
(0026) unsigned char temp,temp2;
(0027) unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66,
0066 E286 LDI R24,0x26
0067 E090 LDI R25,0
0068 01FE MOVW R30,R28
0069 E00A LDI R16,0xA
006A E010 LDI R17,0
006B 93FA ST R31,-Y
006C 93EA ST R30,-Y
006D 939A ST R25,-Y
006E 938A ST R24,-Y
006F D078 RCALL asgncblk
(0028) 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
(0029) //初始化端口
(0030) DDRB=0xFF; //设置B口为输出模式
0070 EF8F LDI R24,0xFF
0071 BB87 OUT 0x17,R24
(0031) PORTB=0xFF; //置高电平
0072 BB88 OUT 0x18,R24
(0032) DDRC=0x03;
0073 E083 LDI R24,3
0074 BB84 OUT 0x14,R24
(0033) PORTC=0xFF;
0075 EF8F LDI R24,0xFF
0076 BB85 OUT 0x15,R24
(0034) DDRD=0xFF;
0077 BB81 OUT 0x11,R24
(0035) PORTD=0xFF;
0078 BB82 OUT 0x12,R24
(0036)
(0037) MCUCR=0x02; //INT0下降沿触发,INT1低电平有效
0079 E082 LDI R24,2
007A BF85 OUT 0x35,R24
(0038) GICR|=0xC0; //打开INT0,INT1中断
007B B78B IN R24,0x3B
007C 6C80 ORI R24,0xC0
007D BF8B OUT 0x3B,R24
(0039) GIFR=0xC0; //清除INT0、INT1中断标志位
007E EC80 LDI R24,0xC0
007F BF8A OUT 0x3A,R24
(0040)
(0041) CountNum=0; //初始化全局变量
0080 2422 CLR R2
0081 92200060 STS _CountNum,R2
(0042) SEI(); //打开全局中断
0083 9478 BSET 7
0084 C02C RJMP 0x00B1
(0043) while (1)
(0044) {
(0045) CLI();
0085 94F8 BCLR 7
(0046) temp=CountNum/10;
0086 E01A LDI R17,0xA
0087 91000060 LDS R16,_CountNum
0089 D02C RCALL div8u
008A 2F40 MOV R20,R16
(0047) PORTC&=~(1);
008B 98A8 CBI 0x15,0
(0048) PORTB=num[temp];
008C 01CE MOVW R24,R28
008D 2FE4 MOV R30,R20
008E 27FF CLR R31
008F 0FE8 ADD R30,R24
0090 1FF9 ADC R31,R25
0091 8020 LDD R2,Z+0
0092 BA28 OUT 0x18,R2
(0049) delay_ms(1);
0093 E001 LDI R16,1
0094 E010 LDI R17,0
0095 DFAC RCALL _delay_ms
(0050) PORTC|=0xFF;
0096 B385 IN R24,0x15
0097 6F8F ORI R24,0xFF
0098 BB85 OUT 0x15,R24
(0051) temp=CountNum%10;
0099 E01A LDI R17,0xA
009A 91000060 LDS R16,_CountNum
009C D017 RCALL mod8u
009D 2F40 MOV R20,R16
(0052) SEI();
009E 9478 BSET 7
(0053) PORTC&=~(2);
009F 98A9 CBI 0x15,1
(0054) PORTB=num[temp];
00A0 01CE MOVW R24,R28
00A1 2FE4 MOV R30,R20
00A2 27FF CLR R31
00A3 0FE8 ADD R30,R24
00A4 1FF9 ADC R31,R25
00A5 8020 LDD R2,Z+0
00A6 BA28 OUT 0x18,R2
(0055) delay_ms(1);
00A7 E001 LDI R16,1
00A8 E010 LDI R17,0
00A9 DF98 RCALL _delay_ms
(0056) PORTC|=0xFF;
00AA B385 IN R24,0x15
00AB 6F8F ORI R24,0xFF
00AC BB85 OUT 0x15,R24
(0057) SEI();
00AD 9478 BSET 7
(0058) delay_ms(1);
00AE E001 LDI R16,1
00AF E010 LDI R17,0
00B0 DF91 RCALL _delay_ms
00B1 CFD3 RJMP 0x0085
(0059) }
(0060) }
FILE: <library>
00B2 962A ADIW R28,0xA
00B3 9508 RET
mod8u:
00B4 9468 BSET 6
00B5 C001 RJMP xdiv8u
div8u:
00B6 94E8 BCLR 6
xdiv8u:
00B7 932A ST R18,-Y
00B8 92FA ST R15,-Y
00B9 92EA ST R14,-Y
00BA 24FF CLR R15
00BB 24EE CLR R14
00BC E120 LDI R18,0x10
00BD 0F00 LSL R16
00BE 1CFF ROL R15
00BF 1CEE ROL R14
00C0 16E1 CP R14,R17
00C1 F010 BCS 0x00C4
00C2 1AE1 SUB R14,R17
00C3 9503 INC R16
00C4 952A DEC R18
00C5 F7B9 BNE 0x00BD
00C6 F40E BRTC 0x00C8
00C7 2D0E MOV R16,R14
00C8 90E9 LD R14,Y+
00C9 90F9 LD R15,Y+
00CA 9129 LD R18,Y+
00CB 9508 RET
pop_gset2:
00CC E0E2 LDI R30,2
00CD C004 RJMP pop
push_gset1:
00CE 935A ST R21,-Y
00CF 934A ST R20,-Y
00D0 9508 RET
pop_gset1:
00D1 E0E1 LDI R30,1
pop:
00D2 9149 LD R20,Y+
00D3 9159 LD R21,Y+
00D4 FDE0 SBRC R30,0
00D5 9508 RET
00D6 9169 LD R22,Y+
00D7 9179 LD R23,Y+
00D8 FDE1 SBRC R30,1
00D9 9508 RET
00DA 90A9 LD R10,Y+
00DB 90B9 LD R11,Y+
00DC FDE2 SBRC R30,2
00DD 9508 RET
00DE 90C9 LD R12,Y+
00DF 90D9 LD R13,Y+
00E0 FDE3 SBRC R30,3
00E1 9508 RET
00E2 90E9 LD R14,Y+
00E3 90F9 LD R15,Y+
00E4 9508 RET
push_gset2:
00E5 937A ST R23,-Y
00E6 936A ST R22,-Y
00E7 CFE6 RJMP push_gset1
asgncblk:
00E8 93AA ST R26,-Y
00E9 93BA ST R27,-Y
00EA 93EA ST R30,-Y
00EB 93FA ST R31,-Y
00EC 920A ST R0,-Y
00ED 81AF LDD R26,Y+7
00EE 85B8 LDD R27,Y+8
00EF 81ED LDD R30,Y+5
00F0 81FE LDD R31,Y+6
00F1 3000 CPI R16,0
00F2 0701 CPC R16,R17
00F3 F031 BEQ 0x00FA
00F4 95C8 LPM
00F5 920D ST R0,X+
00F6 9631 ADIW R30,1
00F7 5001 SUBI R16,1
00F8 4010 SBCI R17,0
00F9 CFF7 RJMP 0x00F1
00FA 9009 LD R0,Y+
00FB 91F9 LD R31,Y+
00FC 91E9 LD R30,Y+
00FD 91B9 LD R27,Y+
00FE 91A9 LD R26,Y+
00FF 9624 ADIW R28,4
0100 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -