📄 wbzdjpsm.lst
字号:
__start:
__text_start:
3B E5CF LDI R28,0x5F
3C E0D4 LDI R29,4
3D BFCD OUT 0x3D,R28
3E BFDE OUT 0x3E,R29
3F 51C0 SUBI R28,0x10
40 40D0 SBCI R29,0
41 EA0A LDI R16,0xAA
42 8308 STD Y+0,R16
43 2400 CLR R0
44 E6E2 LDI R30,0x62
45 E0F0 LDI R31,0
46 E010 LDI R17,0
47 36E2 CPI R30,0x62
48 07F1 CPC R31,R17
49 F011 BEQ 0x004C
4A 9201 ST R0,Z+
4B CFFB RJMP 0x0047
4C 8300 STD Z+0,R16
4D E7E4 LDI R30,0x74
4E E0F0 LDI R31,0
4F E6A0 LDI R26,0x60
50 E0B0 LDI R27,0
51 E010 LDI R17,0
52 E000 LDI R16,0
53 BF0B OUT 0x3B,R16
54 37E6 CPI R30,0x76
55 07F1 CPC R31,R17
56 F021 BEQ 0x005B
57 95C8 LPM
58 9631 ADIW R30,1
59 920D ST R0,X+
5A CFF9 RJMP 0x0054
5B 940E 017C CALL _main
_exit:
5D CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
5E 940E 0189 CALL push_xgsetF000
FILE: G:\学习\avr\天祥电子AVR视频教程\chengxu\外部中断键盘扫描\wbzdjpsm.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) uchar l=0,num=0;
(0006) #pragma interrupt_handler jpsm:3
(0007) #pragma data:code
(0008) const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0009) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0010)
(0011) void delay(uint ms)
(0012) {
(0013) uint i,j;
(0014) for(i=0;i<ms;i++)
60 2744 CLR R20
61 2755 CLR R21
62 C00B RJMP 0x006E
(0015) {
(0016) for(j=0;j<1141;j++);
63 2766 CLR R22
64 2777 CLR R23
65 C002 RJMP 0x0068
66 5F6F SUBI R22,0xFF
67 4F7F SBCI R23,0xFF
68 3765 CPI R22,0x75
69 E0E4 LDI R30,4
6A 077E CPC R23,R30
6B F3D0 BCS 0x0066
6C 5F4F SUBI R20,0xFF
6D 4F5F SBCI R21,0xFF
6E 1740 CP R20,R16
6F 0751 CPC R21,R17
70 F390 BCS 0x0063
71 940C 018E JMP pop_xgsetF000
_show:
k --> R10
j --> R12
73 92AA ST R10,-Y
74 92CA ST R12,-Y
75 2EA2 MOV R10,R18
76 2EC0 MOV R12,R16
(0017) }
(0018) }
(0019) void show(uchar j,uchar k)
(0020) {
(0021) PORTA|=BIT(3);
77 9ADB SBI 0x1B,3
(0022) PORTB=table[j];
78 E584 LDI R24,0x54
79 E090 LDI R25,0
7A 2DEC MOV R30,R12
7B 27FF CLR R31
7C 0FEE LSL R30
7D 1FFF ROL R31
7E 0FE8 ADD R30,R24
7F 1FF9 ADC R31,R25
80 9025 LPM R2,Z+
81 9034 LPM R3,0(Z)
82 BA28 OUT 0x18,R2
(0023) PORTA&=~BIT(3);
83 98DB CBI 0x1B,3
(0024)
(0025) PORTB=0XFF;
84 EF8F LDI R24,0xFF
85 BB88 OUT 0x18,R24
(0026) PORTB&=~BIT(k);
86 E001 LDI R16,1
87 2D1A MOV R17,R10
88 940E 01A1 CALL lsl8
8A 2E20 MOV R2,R16
8B 9420 COM R2
8C B238 IN R3,0x18
8D 2032 AND R3,R2
8E BA38 OUT 0x18,R3
(0027) PORTA|=BIT(4);
8F 9ADC SBI 0x1B,4
(0028) PORTA&=~BIT(4);
90 98DC CBI 0x1B,4
(0029) delay(80);//delay(1);
91 E500 LDI R16,0x50
92 E010 LDI R17,0
93 DFCA RCALL _delay
94 90C9 LD R12,Y+
95 90A9 LD R10,Y+
96 9508 RET
(0030) }
(0031) uchar key_press()
(0032) {
(0033) uchar i;
(0034) DDRC=0XFF;
_key_press:
i --> R16
97 EF8F LDI R24,0xFF
98 BB84 OUT 0x14,R24
(0035) PORTC=0XF0;
99 EF80 LDI R24,0xF0
9A BB85 OUT 0x15,R24
(0036)
(0037) DDRC=0X0F;
9B E08F LDI R24,0xF
9C BB84 OUT 0x14,R24
(0038)
(0039) i=PINC;
9D B303 IN R16,0x13
(0040) if(i==0XF0)
9E 3F00 CPI R16,0xF0
9F F421 BNE 0x00A4
(0041) {
(0042) DDRC=0XFF;
A0 EF8F LDI R24,0xFF
A1 BB84 OUT 0x14,R24
(0043) return 0;
A2 2700 CLR R16
A3 C003 RJMP 0x00A7
(0044) }
(0045) else
(0046) {
(0047) DDRC=0XFF;
A4 EF8F LDI R24,0xFF
A5 BB84 OUT 0x14,R24
(0048) return 1;
A6 E001 LDI R16,1
A7 9508 RET
_key_scan:
j --> R10
key --> R20
i --> R22
A8 940E 0193 CALL push_xgsetF00C
(0049) }
(0050) }
(0051)
(0052) uchar key_scan()
(0053) {
(0054) uchar key,i=0X7F,j;
AA E76F LDI R22,0x7F
(0055) delay(10);
AB E00A LDI R16,0xA
AC E010 LDI R17,0
AD DFB0 RCALL _delay
(0056) if(key_press())
AE DFE8 RCALL _key_press
AF 2300 TST R16
B0 F409 BNE 0x00B2
B1 C091 RJMP 0x0143
(0057) {
(0058) do
(0059) {
(0060) i=(i<<1|i>>7);
B2 2E26 MOV R2,R22
B3 9426 LSR R2
B4 9426 LSR R2
B5 9426 LSR R2
B6 9426 LSR R2
B7 9426 LSR R2
B8 9426 LSR R2
B9 9426 LSR R2
BA 2E36 MOV R3,R22
BB 0C33 LSL R3
BC 2832 OR R3,R2
BD 2D63 MOV R22,R3
(0061) PORTC=i;
BE BA35 OUT 0x15,R3
(0062) DDRC=0X0F;
BF E08F LDI R24,0xF
C0 BB84 OUT 0x14,R24
(0063)
(0064) key=PINC;
C1 B343 IN R20,0x13
(0065) j=key&0XF0;
C2 2F84 MOV R24,R20
C3 7F80 ANDI R24,0xF0
C4 2EA8 MOV R10,R24
(0066)
(0067) }while(j==0XF0);
C5 2D8A MOV R24,R10
C6 3F80 CPI R24,0xF0
C7 F351 BEQ 0x00B2
(0068)
(0069) while(key_press());
C8 DFCE RCALL _key_press
C9 2300 TST R16
CA F7E9 BNE 0x00C8
(0070) switch(key)
CB 2F64 MOV R22,R20
CC 2777 CLR R23
CD 3B67 CPI R22,0xB7
CE E0E0 LDI R30,0
CF 077E CPC R23,R30
D0 F409 BNE 0x00D2
D1 C06B RJMP 0x013D
D2 3B6B CPI R22,0xBB
D3 E0E0 LDI R30,0
D4 077E CPC R23,R30
D5 F409 BNE 0x00D7
D6 C05E RJMP 0x0135
D7 3B6D CPI R22,0xBD
D8 E0E0 LDI R30,0
D9 077E CPC R23,R30
DA F409 BNE 0x00DC
DB C051 RJMP 0x012D
DC 3B6E CPI R22,0xBE
DD E0E0 LDI R30,0
DE 077E CPC R23,R30
DF F409 BNE 0x00E1
E0 C044 RJMP 0x0125
E1 EB8E LDI R24,0xBE
E2 E090 LDI R25,0
E3 1786 CP R24,R22
E4 0797 CPC R25,R23
E5 F0A4 BLT 0x00FA
E6 3767 CPI R22,0x77
E7 E0E0 LDI R30,0
E8 077E CPC R23,R30
E9 F409 BNE 0x00EB
EA C054 RJMP 0x013F
EB 376B CPI R22,0x7B
EC E0E0 LDI R30,0
ED 077E CPC R23,R30
EE F409 BNE 0x00F0
EF C047 RJMP 0x0137
F0 376D CPI R22,0x7D
F1 E0E0 LDI R30,0
F2 077E CPC R23,R30
F3 F409 BNE 0x00F5
F4 C03A RJMP 0x012F
F5 376E CPI R22,0x7E
F6 E0E0 LDI R30,0
F7 077E CPC R23,R30
F8 F171 BEQ 0x0127
F9 C047 RJMP 0x0141
FA 3D67 CPI R22,0xD7
FB E0E0 LDI R30,0
FC 077E CPC R23,R30
FD F409 BNE 0x00FF
FE C03C RJMP 0x013B
FF 3D6B CPI R22,0xDB
100 E0E0 LDI R30,0
101 077E CPC R23,R30
102 F181 BEQ 0x0133
103 3D6D CPI R22,0xDD
104 E0E0 LDI R30,0
105 077E CPC R23,R30
106 F121 BEQ 0x012B
107 3D6E CPI R22,0xDE
108 E0E0 LDI R30,0
109 077E CPC R23,R30
10A F0C1 BEQ 0x0123
10B 3D67 CPI R22,0xD7
10C E0E0 LDI R30,0
10D 077E CPC R23,R30
10E F40C BGE 0x0110
10F C031 RJMP 0x0141
110 3E67 CPI R22,0xE7
111 E0E0 LDI R30,0
112 077E CPC R23,R30
113 F129 BEQ 0x0139
114 3E6B CPI R22,0xEB
115 E0E0 LDI R30,0
116 077E CPC R23,R30
117 F0C9 BEQ 0x0131
118 3E6D CPI R22,0xED
119 E0E0 LDI R30,0
11A 077E CPC R23,R30
11B F069 BEQ 0x0129
11C 3E6E CPI R22,0xEE
11D E0E0 LDI R30,0
11E 077E CPC R23,R30
11F F009 BEQ 0x0121
120 C020 RJMP 0x0141
(0071) {
(0072) case 0xEE:
(0073) key=0x0;
121 2744 CLR R20
(0074) break;
122 C021 RJMP 0x0144
(0075) case 0xDE:
(0076) key=0x1;
123 E041 LDI R20,1
(0077) break;
124 C01F RJMP 0x0144
(0078) case 0xBE:
(0079) key=0x2;
125 E042 LDI R20,2
(0080) break;
126 C01D RJMP 0x0144
(0081) case 0x7E:
(0082) key=0x3;
127 E043 LDI R20,3
(0083) break;
128 C01B RJMP 0x0144
(0084) case 0xED:
(0085) key=0x4;
129 E044 LDI R20,4
(0086) break;
12A C019 RJMP 0x0144
(0087) case 0xDD:
(0088) key=0x5;
12B E045 LDI R20,5
(0089) break;
12C C017 RJMP 0x0144
(0090) case 0xBD:
(0091) key=0x6;
12D E046 LDI R20,6
(0092) break;
12E C015 RJMP 0x0144
(0093) case 0x7D:
(0094) key=0x7;
12F E047 LDI R20,7
(0095) break;
130 C013 RJMP 0x0144
(0096) case 0xEB:
(0097) key=0x8;
131 E048 LDI R20,0x8
(0098) break;
132 C011 RJMP 0x0144
(0099) case 0xDB:
(0100) key=0x9;
133 E049 LDI R20,0x9
(0101) break;
134 C00F RJMP 0x0144
(0102) case 0xBB:
(0103) key=0xA;
135 E04A LDI R20,0xA
(0104) break;
136 C00D RJMP 0x0144
(0105) case 0x7B:
(0106) key=0xB;
137 E04B LDI R20,0xB
(0107) break;
138 C00B RJMP 0x0144
(0108) case 0xE7:
(0109) key=0xC;
139 E04C LDI R20,0xC
(0110) break;
13A C009 RJMP 0x0144
(0111) case 0xD7:
(0112) key=0xD;
13B E04D LDI R20,0xD
(0113) break;
13C C007 RJMP 0x0144
(0114) case 0xB7:
(0115) key=0xE;
13D E04E LDI R20,0xE
(0116) break;
13E C005 RJMP 0x0144
(0117) case 0x77:
(0118) key=0xF;
13F E04F LDI R20,0xF
(0119) break;
140 C003 RJMP 0x0144
(0120) default:
(0121) key=16;
141 E140 LDI R20,0x10
(0122) }
(0123) }
142 C001 RJMP 0x0144
(0124) else
(0125) {
(0126) key=16;
143 E140 LDI R20,0x10
(0127) }
(0128) return key;
144 2F04 MOV R16,R20
145 940C 019A JMP pop_xgsetF00C
_jpsm:
147 920A ST R0,-Y
148 921A ST R1,-Y
149 922A ST R2,-Y
14A 923A ST R3,-Y
14B 924A ST R4,-Y
14C 925A ST R5,-Y
14D 926A ST R6,-Y
14E 927A ST R7,-Y
14F 928A ST R8,-Y
150 929A ST R9,-Y
151 930A ST R16,-Y
152 931A ST R17,-Y
153 932A ST R18,-Y
154 933A ST R19,-Y
155 938A ST R24,-Y
156 939A ST R25,-Y
157 93AA ST R26,-Y
158 93BA ST R27,-Y
159 93EA ST R30,-Y
15A 93FA ST R31,-Y
15B B60F IN R0,0x3F
15C 920A ST R0,-Y
(0129) }
(0130) void jpsm()
(0131) { if(key_press())
15D DF39 RCALL _key_press
15E 2300 TST R16
15F F029 BEQ 0x0165
(0132) {
(0133) l=key_scan();
160 DF47 RCALL _key_scan
161 9300 0060 STS l,R16
(0134) show(l,0);
163 2722 CLR R18
164 DF0E RCALL _show
(0135) }
165 9009 LD R0,Y+
166 BE0F OUT 0x3F,R0
167 91F9 LD R31,Y+
168 91E9 LD R30,Y+
169 91B9 LD R27,Y+
16A 91A9 LD R26,Y+
16B 9199 LD R25,Y+
16C 9189 LD R24,Y+
16D 9139 LD R19,Y+
16E 9129 LD R18,Y+
16F 9119 LD R17,Y+
170 9109 LD R16,Y+
171 9099 LD R9,Y+
172 9089 LD R8,Y+
173 9079 LD R7,Y+
174 9069 LD R6,Y+
175 9059 LD R5,Y+
176 9049 LD R4,Y+
177 9039 LD R3,Y+
178 9029 LD R2,Y+
179 9019 LD R1,Y+
17A 9009 LD R0,Y+
17B 9518 RETI
(0136)
(0137) }
(0138)
(0139) void main()
(0140) {
(0141) DDRB=0XFF;
_main:
17C EF8F LDI R24,0xFF
17D BB87 OUT 0x17,R24
(0142) DDRA|=0X18;//573锁存端
17E B38A IN R24,0x1A
17F 6188 ORI R24,0x18
180 BB8A OUT 0x1A,R24
(0143) DDRD|=BIT(3);//外部中断1的触发管脚
181 9A8B SBI 0x11,3
(0144) PORTD&=~BIT(3);
182 9893 CBI 0x12,3
(0145) GICR|=BIT(7);
183 B78B IN R24,0x3B
184 6880 ORI R24,0x80
185 BF8B OUT 0x3B,R24
(0146) SREG|=BIT(7);//总中断
186 9478 BSET 7
(0147) while(1){ ;}
FILE: <library>
187 CFFF RJMP 0x0187
188 9508 RET
push_xgsetF000:
189 937A ST R23,-Y
18A 936A ST R22,-Y
18B 935A ST R21,-Y
18C 934A ST R20,-Y
18D 9508 RET
pop_xgsetF000:
18E 9149 LD R20,Y+
18F 9159 LD R21,Y+
190 9169 LD R22,Y+
191 9179 LD R23,Y+
192 9508 RET
push_xgsetF00C:
193 937A ST R23,-Y
194 936A ST R22,-Y
195 935A ST R21,-Y
196 934A ST R20,-Y
197 92BA ST R11,-Y
198 92AA ST R10,-Y
199 9508 RET
pop_xgsetF00C:
19A 90A9 LD R10,Y+
19B 90B9 LD R11,Y+
19C 9149 LD R20,Y+
19D 9159 LD R21,Y+
19E 9169 LD R22,Y+
19F 9179 LD R23,Y+
1A0 9508 RET
lsl8:
1A1 2311 TST R17
1A2 F019 BEQ 0x01A6
1A3 0F00 LSL R16
1A4 951A DEC R17
1A5 CFFB RJMP lsl8
1A6 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -