📄 int4.lst
字号:
__start:
__text_start:
0047 EFCF LDI R28,0xFF
0048 E1D0 LDI R29,0x10
0049 BFCD OUT 0x3D,R28
004A BFDE OUT 0x3E,R29
004B 51CE SUBI R28,0x1E
004C 40D0 SBCI R29,0
004D EA0A LDI R16,0xAA
004E 8308 STD Y+0,R16
004F 2400 CLR R0
0050 E0E1 LDI R30,1
0051 E0F1 LDI R31,1
0052 E011 LDI R17,1
0053 30E1 CPI R30,1
0054 07F1 CPC R31,R17
0055 F011 BEQ 0x0058
0056 9201 ST R0,Z+
0057 CFFB RJMP 0x0053
0058 8300 STD Z+0,R16
0059 E8EC LDI R30,0x8C
005A E0F0 LDI R31,0
005B E0A0 LDI R26,0
005C E0B1 LDI R27,1
005D E010 LDI R17,0
005E 38ED CPI R30,0x8D
005F 07F1 CPC R31,R17
0060 F021 BEQ 0x0065
0061 95C8 LPM
0062 9631 ADIW R30,1
0063 920D ST R0,X+
0064 CFF9 RJMP 0x005E
0065 940E00CA CALL _main
_exit:
0067 CFFF RJMP _exit
FILE: F:\AVR学习板\复件实~1\int_4\int4.c
(0001) #include<iom128v.h>
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004)
(0005) uchar key=0;
(0006) void ext_int0_isr(void)
(0007) {
(0008) uchar aa=1;
_ext_int0_isr:
aa --> R16
0068 E001 LDI R16,1
0069 C017 RJMP 0x0081
(0009) while(aa) //判断端口是否恢复高电平,有延时抗干扰
(0010) {
(0011) aa=!(PINE&(1<<4));
006A 990C SBIC 0x01,4
006B C003 RJMP 0x006F
006C E021 LDI R18,1
006D E030 LDI R19,0
006E C002 RJMP 0x0071
006F 2722 CLR R18
0070 2733 CLR R19
0071 2F02 MOV R16,R18
(0012) if(aa==0)
0072 2322 TST R18
0073 F469 BNE 0x0081
(0013) {
(0014) key+=1;
0074 91800100 LDS R24,0x100
0076 5F8F SUBI R24,0xFF
0077 93800100 STS 0x100,R24
(0015) aa=!(PINE&(1<<4));
0079 990C SBIC 0x01,4
007A C003 RJMP 0x007E
007B E021 LDI R18,1
007C E030 LDI R19,0
007D C002 RJMP 0x0080
007E 2722 CLR R18
007F 2733 CLR R19
0080 2F02 MOV R16,R18
0081 2300 TST R16
0082 F739 BNE 0x006A
(0016) }
(0017) }
(0018) }
0083 9508 RET
_encoder:
num --> R20
key --> R16
0084 940E00E2 CALL push_gset1
(0019)
(0020) //数码管译码函数
(0021) uchar encoder(uchar key)
(0022) {
(0023) uchar num;
(0024) switch(key)
0086 2F40 MOV R20,R16
0087 2755 CLR R21
0088 3240 CPI R20,0x20
0089 E0E0 LDI R30,0
008A 075E CPC R21,R30
008B F1A9 BEQ 0x00C1
008C E280 LDI R24,0x20
008D E090 LDI R25,0
008E 1784 CP R24,R20
008F 0795 CPC R25,R21
0090 F0CC BLT 0x00AA
0091 3041 CPI R20,1
0092 E0E0 LDI R30,0
0093 075E CPC R21,R30
0094 F111 BEQ 0x00B7
0095 3042 CPI R20,2
0096 E0E0 LDI R30,0
0097 075E CPC R21,R30
0098 F101 BEQ 0x00B9
0099 3044 CPI R20,4
009A E0E0 LDI R30,0
009B 075E CPC R21,R30
009C F0F1 BEQ 0x00BB
009D 3048 CPI R20,0x8
009E E0E0 LDI R30,0
009F 075E CPC R21,R30
00A0 F0E1 BEQ 0x00BD
00A1 3041 CPI R20,1
00A2 E0E0 LDI R30,0
00A3 075E CPC R21,R30
00A4 F10C BLT 0x00C6
00A5 3140 CPI R20,0x10
00A6 E0E0 LDI R30,0
00A7 075E CPC R21,R30
00A8 F0B1 BEQ 0x00BF
00A9 C01C RJMP 0x00C6
00AA 3440 CPI R20,0x40
00AB E0E0 LDI R30,0
00AC 075E CPC R21,R30
00AD F0A9 BEQ 0x00C3
00AE 3440 CPI R20,0x40
00AF E0E0 LDI R30,0
00B0 075E CPC R21,R30
00B1 F0A4 BLT 0x00C6
00B2 3840 CPI R20,0x80
00B3 E0E0 LDI R30,0
00B4 075E CPC R21,R30
00B5 F079 BEQ 0x00C5
00B6 C00F RJMP 0x00C6
(0025) {
(0026) case 1:
(0027) num=0x79;break;
00B7 E749 LDI R20,0x79
00B8 C00D RJMP 0x00C6
(0028) case 2:
(0029) num=0x24;break;
00B9 E244 LDI R20,0x24
00BA C00B RJMP 0x00C6
(0030) case 4:
(0031) num=0x30;break;
00BB E340 LDI R20,0x30
00BC C009 RJMP 0x00C6
(0032) case 8:
(0033) num=0x19;break;
00BD E149 LDI R20,0x19
00BE C007 RJMP 0x00C6
(0034) case 16:
(0035) num=0x12;break;
00BF E142 LDI R20,0x12
00C0 C005 RJMP 0x00C6
(0036) case 32:
(0037) num=0x02;break;
00C1 E042 LDI R20,2
00C2 C003 RJMP 0x00C6
(0038) case 64:
(0039) num=0x78;break;
00C3 E748 LDI R20,0x78
00C4 C001 RJMP 0x00C6
(0040) case 128:
(0041) num=0x00;break;
00C5 2744 CLR R20
(0042) }
(0043) return(num);
00C6 2F04 MOV R16,R20
00C7 940E00E5 CALL pop_gset1
00C9 9508 RET
(0044) }
(0045)
(0046) //主函数
(0047) main()
(0048) {uchar key=0;
_main:
key --> R16
00CA 2700 CLR R16
(0049) DDRA=0xff;
00CB EF8F LDI R24,0xFF
00CC BB8A OUT 0x1A,R24
(0050) DDRE=0x00;
00CD 2422 CLR R2
00CE B822 OUT 0x02,R2
(0051) PORTE=0xff;
00CF B983 OUT 0x03,R24
(0052) SREG=0x80; //开全局中断
00D0 E880 LDI R24,0x80
00D1 BF8F OUT 0x3F,R24
(0053) EIMSK=0x10; //开外部中断int_4,对应按键K5
00D2 E180 LDI R24,0x10
00D3 BF89 OUT 0x39,R24
(0054) EICRB=0xf0;
00D4 EF80 LDI R24,0xF0
00D5 BF8A OUT 0x3A,R24
(0055)
(0056)
(0057) DDRA=0xff;
00D6 EF8F LDI R24,0xFF
00D7 BB8A OUT 0x1A,R24
(0058) PORTA=0xff;
00D8 BB8B OUT 0x1B,R24
(0059) DDRC=0xff;
00D9 BB84 OUT 0x14,R24
(0060) PORTC=0xff;
00DA BB85 OUT 0x15,R24
(0061) DDRE=0x00;
00DB B822 OUT 0x02,R2
(0062) PORTE=0xff;
00DC B983 OUT 0x03,R24
(0063) DDRF=0xf8;
00DD EF88 LDI R24,0xF8
00DE 93800061 STS 0x61,R24
(0064) while(1);
00E0 CFFF RJMP 0x00E0
(0065)
(0066) }
FILE: <library>
00E1 9508 RET
push_gset1:
00E2 935A ST R21,-Y
00E3 934A ST R20,-Y
00E4 9508 RET
pop_gset1:
00E5 E0E1 LDI R30,1
pop:
00E6 9149 LD R20,Y+
00E7 9159 LD R21,Y+
00E8 FDE0 SBRC R30,0
00E9 9508 RET
00EA 9169 LD R22,Y+
00EB 9179 LD R23,Y+
00EC FDE1 SBRC R30,1
00ED 9508 RET
00EE 90A9 LD R10,Y+
00EF 90B9 LD R11,Y+
00F0 FDE2 SBRC R30,2
00F1 9508 RET
00F2 90C9 LD R12,Y+
00F3 90D9 LD R13,Y+
00F4 FDE3 SBRC R30,3
00F5 9508 RET
00F6 90E9 LD R14,Y+
00F7 90F9 LD R15,Y+
00F8 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -