📄 test.lst
字号:
(0246) return 0;
021A 2700 CLR R16
021B 2711 CLR R17
021C 9508 RET
_write7279:
dta --> R20
cmd --> R22
021D 940E02B6 CALL push_gset2
021F 2F42 MOV R20,R18
0220 2F60 MOV R22,R16
(0247) }
(0248)
(0249) void write7279(unsigned char cmd, unsigned char dta)
(0250) {
(0251) send_byte (cmd);
0221 2F06 MOV R16,R22
0222 D00E RCALL _send_byte
(0252) send_byte (dta);
0223 2F04 MOV R16,R20
0224 D00C RCALL _send_byte
(0253) }
0225 940E029C CALL pop_gset2
0227 9508 RET
_read7279:
command --> R20
0228 940E029F CALL push_gset1
022A 2F40 MOV R20,R16
(0254)
(0255) unsigned char read7279(unsigned char command)
(0256) {
(0257) send_byte(command);
022B 2F04 MOV R16,R20
022C D004 RCALL _send_byte
(0258) return(receive_byte());
022D D01D RCALL _receive_byte
022E 940E02A2 CALL pop_gset1
0230 9508 RET
_send_byte:
i --> R20
out_byte --> R22
0231 940E02B6 CALL push_gset2
0233 2F60 MOV R22,R16
(0259) }
(0260)
(0261) void send_byte( unsigned char out_byte)
(0262) {
(0263) unsigned char i;
(0264) HD7279_CS_L;
0234 98C2 CBI 0x18,2
(0265) long_delay();
0235 D02F RCALL _long_delay
(0266) for (i=0;i<8;i++)
0236 2744 CLR R20
0237 C00D RJMP 0x0245
(0267) {
(0268) if (out_byte&0x80)
0238 FF67 SBRS R22,7
0239 C002 RJMP 0x023C
(0269) {
(0270) HD7279_DATA_H;
023A 9AC0 SBI 0x18,0
(0271) }
023B C001 RJMP 0x023D
(0272) else
(0273) {
(0274) HD7279_DATA_L;
023C 98C0 CBI 0x18,0
(0275) }
(0276) HD7279_CLK_H;
023D 9AC1 SBI 0x18,1
(0277) short_delay();
023E D02C RCALL _short_delay
(0278) HD7279_CLK_L;
023F 98C1 CBI 0x18,1
(0279) short_delay();
0240 D02A RCALL _short_delay
(0280) out_byte=out_byte*2;
0241 E082 LDI R24,2
0242 9F86 MUL R24,R22
0243 2D60 MOV R22,R0
0244 9543 INC R20
0245 3048 CPI R20,0x8
0246 F388 BCS 0x0238
(0281) }
(0282) HD7279_DATA_L;
0247 98C0 CBI 0x18,0
(0283) }
0248 940E029C CALL pop_gset2
024A 9508 RET
_receive_byte:
i --> R20
in_byte --> R22
024B 940E02B6 CALL push_gset2
(0284)
(0285)
(0286) unsigned char receive_byte(void)
(0287) {
(0288) unsigned char i, in_byte;
(0289) HD7279_DDR_L;
024D 98B8 CBI 0x17,0
(0290) HD7279_DATA_H;
024E 9AC0 SBI 0x18,0
(0291) long_delay();
024F D015 RCALL _long_delay
(0292) for (i=0;i<8;i++)
0250 2744 CLR R20
0251 C00B RJMP 0x025D
(0293) {
(0294) HD7279_CLK_H;
0252 9AC1 SBI 0x18,1
(0295) short_delay();
0253 D017 RCALL _short_delay
(0296) in_byte=in_byte*2;
0254 E082 LDI R24,2
0255 9F86 MUL R24,R22
0256 2D60 MOV R22,R0
(0297)
(0298) if (HD7279_DATA&1==1)
0257 9BB0 SBIS 0x16,0
0258 C001 RJMP 0x025A
(0299) {
(0300) in_byte=in_byte|0x01;
0259 6061 ORI R22,1
(0301) }
(0302) HD7279_CLK_L;
025A 98C1 CBI 0x18,1
(0303) short_delay();
025B D00F RCALL _short_delay
025C 9543 INC R20
025D 3048 CPI R20,0x8
025E F398 BCS 0x0252
(0304) }
(0305) HD7279_DATA_L;
025F 98C0 CBI 0x18,0
(0306) HD7279_DDR_H;
0260 9AB8 SBI 0x17,0
(0307) return (in_byte);
0261 2F06 MOV R16,R22
0262 940E029C CALL pop_gset2
0264 9508 RET
(0308) }
(0309)
(0310)
(0311)
(0312) void long_delay(void)
(0313) {
(0314) unsigned char i;
(0315) for (i=0;i<0x30;i++);
_long_delay:
i --> R16
0265 2700 CLR R16
0266 C001 RJMP 0x0268
0267 9503 INC R16
0268 3300 CPI R16,0x30
0269 F3E8 BCS 0x0267
(0316) }
026A 9508 RET
(0317)
(0318) void short_delay(void)
(0319) {
(0320) unsigned char i;
(0321) for (i=0;i<8;i++);
_short_delay:
i --> R16
026B 2700 CLR R16
026C C001 RJMP 0x026E
026D 9503 INC R16
026E 3008 CPI R16,0x8
026F F3E8 BCS 0x026D
(0322) }
0270 9508 RET
_int0_isr:
dd --> R20
0271 940E02BA CALL push_lset
0273 940E029F CALL push_gset1
(0323) #pragma interrupt_handler int0_isr:2
(0324) void int0_isr(void)
(0325) {unsigned char dd;
(0326) dd=receive_byte();
0275 DFD5 RCALL _receive_byte
0276 2F40 MOV R20,R16
(0327) write7279(DECODE1+1,dd/16); // 在第2位显示键码高8位
0277 2F24 MOV R18,R20
0278 9522 SWAP R18
0279 702F ANDI R18,0xF
027A EC09 LDI R16,0xC9
027B DFA1 RCALL _write7279
(0328) write7279(DECODE1,dd&0x0f); // 在第1位显示键码低8位
027C 2F24 MOV R18,R20
027D 702F ANDI R18,0xF
027E EC08 LDI R16,0xC8
027F DF9D RCALL _write7279
(0329) }
0280 940E02A2 CALL pop_gset1
0282 940E02D1 CALL pop_lset
0284 9518 RETI
(0330) // ************************* 延时 n*ms *************************
(0331)
(0332) void delay_us(int time) //微秒级延时
(0333) {
(0334) do
(0335) time--;
_delay_us:
time --> R16
0285 5001 SUBI R16,1
0286 4010 SBCI R17,0
(0336) while(time>1);
0287 E081 LDI R24,1
0288 E090 LDI R25,0
0289 1780 CP R24,R16
028A 0791 CPC R25,R17
028B F3CC BLT 0x0285
(0337) }
028C 9508 RET
_dely_ms:
time --> R20
028D 940E029F CALL push_gset1
028F 01A8 MOVW R20,R16
(0338)
(0339) void dely_ms(unsigned int time)
(0340) {
0290 C005 RJMP 0x0296
(0341) while(time!=0)
(0342) {
(0343) delay_us(1000);
0291 EE08 LDI R16,0xE8
0292 E013 LDI R17,3
0293 DFF1 RCALL _delay_us
(0344) time--;
0294 5041 SUBI R20,1
0295 4050 SBCI R21,0
0296 3040 CPI R20,0
0297 0745 CPC R20,R21
0298 F7C1 BNE 0x0291
(0345) }
(0346) }
FILE: <library>
0299 940E02A2 CALL pop_gset1
029B 9508 RET
pop_gset2:
029C E0E2 LDI R30,2
029D 940C02A3 JMP pop
push_gset1:
029F 935A ST R21,-Y
02A0 934A ST R20,-Y
02A1 9508 RET
pop_gset1:
02A2 E0E1 LDI R30,1
pop:
02A3 9149 LD R20,Y+
02A4 9159 LD R21,Y+
02A5 FDE0 SBRC R30,0
02A6 9508 RET
02A7 9169 LD R22,Y+
02A8 9179 LD R23,Y+
02A9 FDE1 SBRC R30,1
02AA 9508 RET
02AB 90A9 LD R10,Y+
02AC 90B9 LD R11,Y+
02AD FDE2 SBRC R30,2
02AE 9508 RET
02AF 90C9 LD R12,Y+
02B0 90D9 LD R13,Y+
02B1 FDE3 SBRC R30,3
02B2 9508 RET
02B3 90E9 LD R14,Y+
02B4 90F9 LD R15,Y+
02B5 9508 RET
push_gset2:
02B6 937A ST R23,-Y
02B7 936A ST R22,-Y
02B8 940C029F JMP push_gset1
push_lset:
02BA 93FA ST R31,-Y
02BB 93EA ST R30,-Y
02BC 93BA ST R27,-Y
02BD 93AA ST R26,-Y
02BE 939A ST R25,-Y
02BF 938A ST R24,-Y
02C0 933A ST R19,-Y
02C1 932A ST R18,-Y
02C2 931A ST R17,-Y
02C3 930A ST R16,-Y
02C4 929A ST R9,-Y
02C5 928A ST R8,-Y
02C6 927A ST R7,-Y
02C7 926A ST R6,-Y
02C8 925A ST R5,-Y
02C9 924A ST R4,-Y
02CA 923A ST R3,-Y
02CB 922A ST R2,-Y
02CC 921A ST R1,-Y
02CD 920A ST R0,-Y
02CE B60F IN R0,0x3F
02CF 920A ST R0,-Y
02D0 9508 RET
pop_lset:
02D1 9009 LD R0,Y+
02D2 BE0F OUT 0x3F,R0
02D3 9009 LD R0,Y+
02D4 9019 LD R1,Y+
02D5 9029 LD R2,Y+
02D6 9039 LD R3,Y+
02D7 9049 LD R4,Y+
02D8 9059 LD R5,Y+
02D9 9069 LD R6,Y+
02DA 9079 LD R7,Y+
02DB 9089 LD R8,Y+
02DC 9099 LD R9,Y+
02DD 9109 LD R16,Y+
02DE 9119 LD R17,Y+
02DF 9129 LD R18,Y+
02E0 9139 LD R19,Y+
02E1 9189 LD R24,Y+
02E2 9199 LD R25,Y+
02E3 91A9 LD R26,Y+
02E4 91B9 LD R27,Y+
02E5 91E9 LD R30,Y+
02E6 91F9 LD R31,Y+
02E7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -