📄 dkaj.lst
字号:
Interrupt Vectors
00000 940C 0037 JMP __text_start|__start
Program Code (text area)
__text_start|__start:
00037 E5CF LDI R28,0x5F
00038 E0D4 LDI R29,4
00039 BFCD OUT 0x3D,R28
0003A BFDE OUT 0x3E,R29
0003B 51CE SUBI R28,0x1E
0003C 40D0 SBCI R29,0
0003D EA0A LDI R16,0xAA
0003E 8308 ST Y,R16
0003F 2400 CLR R0
00040 E7EA LDI R30,0x7A
00041 E0F0 LDI R31,0
00042 E010 LDI R17,0
00043 37EA CPI R30,0x7A
00044 07F1 CPC R31,R17
00045 F011 BEQ 0x0048
00046 9201 ST Z+,R0
00047 CFFB RJMP 0x0043
00048 8300 ST Z,R16
00049 E5E4 LDI R30,0x54
0004A E0F0 LDI R31,0
0004B E6A0 LDI R26,0x60
0004C E0B0 LDI R27,0
0004D E010 LDI R17,0
0004E E000 LDI R16,0
0004F BF0B OUT 0x3B,R16
00050 36EE CPI R30,0x6E
00051 07F1 CPC R31,R17
00052 F021 BEQ 0x0057
00053 95C8 LPM
00054 9631 ADIW R30,1
00055 920D ST X+,R0
00056 CFF9 RJMP 0x0050
00057 940E 00DD CALL _main
_exit:
00059 CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
0005A 940E 0106 CALL push_xgsetF000
FILE: E:\AVR自编程序\11实验板\9独立按键\独立按键.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0007) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
(0008) uchar const LED_W[8] = {0,1,2,3,4,5,6,7};
(0009) uchar key_valu=0;
(0010) void delay(uint ms)
(0011) {
(0012) uint i,j;
(0013) for(i=0;i<ms;i++)
0005C 2744 CLR R20
0005D 2755 CLR R21
0005E C00B RJMP 0x006A
(0014) {
(0015) for(j=0;j<1141;j++);
0005F 2766 CLR R22
00060 2777 CLR R23
00061 C002 RJMP 0x0064
00062 5F6F SUBI R22,0xFF
00063 4F7F SBCI R23,0xFF
00064 3765 CPI R22,0x75
00065 E0E4 LDI R30,4
00066 077E CPC R23,R30
00067 F3D0 BCS 0x0062
00068 5F4F SUBI R20,0xFF
00069 4F5F SBCI R21,0xFF
0006A 1740 CP R20,R16
0006B 0751 CPC R21,R17
0006C F390 BCS 0x005F
0006D 940C 010B JMP pop_xgsetF000
_show:
k --> R10
j --> R12
0006F 92AA ST -Y,R10
00070 92CA ST -Y,R12
00071 2EA2 MOV R10,R18
00072 2EC0 MOV R12,R16
(0016) }
(0017) }
(0018) void show(uchar j,uchar k)
(0019) {
(0020) PORTA = table[j]; // i 值的 个位数
00073 E680 LDI R24,0x60
00074 E090 LDI R25,0
00075 2DEC MOV R30,R12
00076 27FF CLR R31
00077 0FE8 ADD R30,R24
00078 1FF9 ADC R31,R25
00079 8020 LD R2,Z
0007A BA2B OUT 0x1B,R2
(0021) PORTC = LED_W[k]; //点亮第一位数码管
0007B E781 LDI R24,0x71
0007C E090 LDI R25,0
0007D 2DEA MOV R30,R10
0007E 27FF CLR R31
0007F 0FE8 ADD R30,R24
00080 1FF9 ADC R31,R25
00081 8020 LD R2,Z
00082 BA25 OUT 0x15,R2
(0022)
(0023) delay(2);
00083 E002 LDI R16,2
00084 E010 LDI R17,0
00085 DFD4 RCALL _delay
00086 90C9 LD R12,Y+
00087 90A9 LD R10,Y+
00088 9508 RET
(0024)
(0025) }
(0026)
(0027) uchar key_press()
(0028) {
(0029) uchar j;
(0030) DDRD|=0X1c;
_key_press:
j --> R16
00089 B381 IN R24,0x11
0008A 618C ORI R24,0x1C
0008B BB81 OUT 0x11,R24
(0031) PORTD|=0X1c;
0008C B382 IN R24,0x12
0008D 618C ORI R24,0x1C
0008E BB82 OUT 0x12,R24
(0032)
(0033) DDRD&=0Xe3;
0008F B381 IN R24,0x11
00090 7E83 ANDI R24,0xE3
00091 BB81 OUT 0x11,R24
(0034)
(0035) j=PIND;
00092 B300 IN R16,0x10
(0036) j=j&0X1c;//00001111
00093 710C ANDI R16,0x1C
(0037) if(j==0X1c)
00094 310C CPI R16,0x1C
00095 F411 BNE 0x0098
(0038) {
(0039) return 0;
00096 2700 CLR R16
00097 C001 RJMP 0x0099
(0040) }
(0041) else
(0042) {
(0043) return 1;
00098 E001 LDI R16,1
00099 9508 RET
_key_scan:
key --> R20
0009A 940E 0106 CALL push_xgsetF000
(0044) }
(0045)
(0046) }
(0047)
(0048) uchar key_scan()
(0049) {
(0050) uchar key;
(0051) delay(10);
0009C E00A LDI R16,0xA
0009D E010 LDI R17,0
0009E DFBB RCALL _delay
(0052) if(key_press())
0009F DFE9 RCALL _key_press
000A0 2300 TST R16
000A1 F1B1 BEQ 0x00D8
(0053) {
(0054) key=PIND;
000A2 B340 IN R20,0x10
(0055) key&=0X1c;
000A3 714C ANDI R20,0x1C
(0056) switch(key)
000A4 2F64 MOV R22,R20
000A5 2777 CLR R23
000A6 3164 CPI R22,0x14
000A7 E0E0 LDI R30,0
000A8 077E CPC R23,R30
000A9 F119 BEQ 0x00CD
000AA E184 LDI R24,0x14
000AB E090 LDI R25,0
000AC 1786 CP R24,R22
000AD 0797 CPC R25,R23
000AE F02C BLT 0x00B4
000AF 306C CPI R22,0xC
000B0 E0E0 LDI R30,0
000B1 077E CPC R23,R30
000B2 F079 BEQ 0x00C2
000B3 C01D RJMP 0x00D1
000B4 3168 CPI R22,0x18
000B5 E0E0 LDI R30,0
000B6 077E CPC R23,R30
000B7 F009 BEQ 0x00B9
000B8 C018 RJMP 0x00D1
(0057) {
(0058)
(0059) case 0X18:
(0060) key_valu++;
000B9 9180 0079 LDS R24,key_valu
000BB 5F8F SUBI R24,0xFF
000BC 9380 0079 STS key_valu,R24
(0061) if(key_valu==16)
000BE 3180 CPI R24,0x10
000BF F4A1 BNE 0x00D4
(0062) key=0;
000C0 2744 CLR R20
(0063) break;
000C1 C012 RJMP 0x00D4
(0064) case 0X0c:
(0065) key_valu--;
000C2 9180 0079 LDS R24,key_valu
000C4 5081 SUBI R24,1
000C5 9380 0079 STS key_valu,R24
(0066) if(key_valu<0)
000C7 3080 CPI R24,0
000C8 F458 BCC 0x00D4
(0067) key_valu=0;
000C9 2422 CLR R2
000CA 9220 0079 STS key_valu,R2
(0068) break;
000CC C007 RJMP 0x00D4
(0069) case 0X14:
(0070) key_valu=0;
000CD 2422 CLR R2
000CE 9220 0079 STS key_valu,R2
(0071)
(0072) break;
000D0 C003 RJMP 0x00D4
(0073) default:
(0074) key_valu=0;
000D1 2422 CLR R2
000D2 9220 0079 STS key_valu,R2
(0075) }
(0076) while(key_press());
000D4 DFB4 RCALL _key_press
000D5 2300 TST R16
000D6 F7E9 BNE 0x00D4
(0077) }
000D7 C001 RJMP 0x00D9
(0078) else
(0079) {
(0080) key=16;
000D8 E140 LDI R20,0x10
(0081) }
(0082) return key_valu;
000D9 9100 0079 LDS R16,key_valu
000DB 940C 010B JMP pop_xgsetF000
(0083) }
(0084) void main()
(0085) {
(0086) uchar i,l;
(0087) DDRA=0xff;
_main:
l --> R10
i --> R10
000DD EF8F LDI R24,0xFF
000DE BB8A OUT 0x1A,R24
(0088) DDRB=0XFF;
000DF BB87 OUT 0x17,R24
000E0 C00B RJMP 0x00EC
(0089) while(1)
(0090) {
(0091) i=key_press();
000E1 DFA7 RCALL _key_press
000E2 2EA0 MOV R10,R16
(0092) if(i)
000E3 2300 TST R16
000E4 F039 BEQ 0x00EC
(0093) {
(0094) l=key_scan();
000E5 DFB4 RCALL _key_scan
000E6 2EA0 MOV R10,R16
(0095) //show(l/10,1);
(0096) show(l%10,0);
FILE: <library>
000E7 2722 CLR R18
000E8 E01A LDI R17,0xA
000E9 940E 00EE CALL mod8u
000EB DF83 RCALL _show
000EC CFF4 RJMP 0x00E1
000ED 9508 RET
mod8u:
000EE 9468 BSET 6
000EF C001 RJMP xdiv8u
div8u:
000F0 94E8 BCLR 6
xdiv8u:
000F1 932A ST -Y,R18
000F2 92FA ST -Y,R15
000F3 92EA ST -Y,R14
000F4 24FF CLR R15
000F5 24EE CLR R14
000F6 E120 LDI R18,0x10
000F7 0F00 LSL R16
000F8 1CFF ROL R15
000F9 1CEE ROL R14
000FA 16E1 CP R14,R17
000FB F010 BCS 0x00FE
000FC 1AE1 SUB R14,R17
000FD 9503 INC R16
000FE 952A DEC R18
000FF F7B9 BNE 0x00F7
00100 F40E BRTC 0x0102
00101 2D0E MOV R16,R14
00102 90E9 LD R14,Y+
00103 90F9 LD R15,Y+
00104 9129 LD R18,Y+
00105 9508 RET
push_xgsetF000:
00106 937A ST -Y,R23
00107 936A ST -Y,R22
00108 935A ST -Y,R21
00109 934A ST -Y,R20
0010A 9508 RET
pop_xgsetF000:
0010B 9149 LD R20,Y+
0010C 9159 LD R21,Y+
0010D 9169 LD R22,Y+
0010E 9179 LD R23,Y+
0010F 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -