📄 asmpro.lst
字号:
0184 C3 =1 394 CLR C
0185 C2B6 =1 395 TLBL206: CLR TBC_CLK_6311 ;PT6311 CLK
0187 13 =1 396 RRC A
0188 92A6 =1 397 MOV TBC_DIN_6311,C ;send data to pt6311
018A 00 =1 398 NOP
018B 00 =1 399 NOP
018C 00 =1 400 NOP
018D 00 =1 401 NOP
018E 00 =1 402 NOP
018F D2B6 =1 403 SETB TBC_CLK_6311 ;CLK
0191 00 =1 404 NOP
A51 MACRO ASSEMBLER ASMPRO DATE 21/06/03 PAGE 8
LOC OBJ LINE SOURCE
0192 00 =1 405 NOP
0193 00 =1 406 NOP
0194 00 =1 407 NOP
0195 D8EE =1 408 DJNZ R0, TLBL206
0197 D2A6 =1 409 SETB TBC_DIN_6311
0199 D2B6 =1 410 SETB TBC_CLK_6311 ;BC_CLK_6311 normal high
019B 22 =1 411 RET
=1 412 ;******************************************
=1 413
414
415 $INCLUDE (REMOTE.ASM)
=1 416 ;******************************* 遥控信号接收子程序集 ****************************
=1 417 ;占用: ACC, R0, R1, R2, R3, TIME0中断
=1 418 ;遥控发送以4个字节为一组, 长按按键时, 4个--4个字节连发, 每组(4字节为一组)之间只有3.5ms的间隙
=1 419 ;第1与2字节为用户码, 固定不变(用于区别其它的遥控器)
=1 420 ;第3字节为键码, 第4字节为键码的取反码(用于校验)
=1 421 ;注:键码不等同于需要的键值
=1 422
=1 423
=1 424 ;************* 外部变量说明 ********************************
00B3 =1 425 BC_REMOTE BIT P3.3 ;***** 遥控信号读入脚 *****
=1 426
=1 427
=1 428 EXTRN DATA(RKEY_NUM) ;现键值寄存
=1 429 EXTRN BIT(B_RKEY) ;有remote key时置1, 注:主程序检测该位后清0
=1 430
=1 431 EXTRN DATA(RKEY_SPEED) ;连发灵敏度计数, 开机时初始化
=1 432 EXTRN DATA(RKEY_KEEP) ;连发的监控计时数
=1 433
=1 434
=1 435 ;遥控完整读入的4个字节存放数组 uchar rmbyte_in[4]
=1 436 EXTRN DATA(RMBYTE_IN) ;第1字节 -- 用户码1存放 ,RMBYTE_IN
=1 437 ;第2字节 -- 用户码2存放 ,RMBYTE_IN+01H
=1 438 ;第3字节 -- 键码存放 ,RMBYTE_IN+02H
=1 439 ;第4字节 -- 键码的反码存放 ,RMBYTE_IN+03H
=1 440
=1 441
=1 442 ;************ 公共变量定义 ****************
=1 443 PUBLIC GET_REMOTE
=1 444
=1 445
=1 446
=1 447 ;************** 常数定义 ******************
0020 =1 448 USER_CODE1 EQU 20H ;remote user_code low 8bit(用户码1)
00DF =1 449 USER_CODE2 EQU 0DFH ;remote user_code high 8bit(用户码2)
=1 450
00AE =1 451 CANT_FIND EQU 0AEH ;remote key not find(无键标识)
0002 =1 452 N_RKEY_KEEP EQU 02H ;允许连发的停顿时间 0.2ms
=1 453
=1 454
=1 455 ;=============================== 公共子程序 (可被C调用) ===============================
=1 456 ;*************** 遥控信号检测, 键值读入 ***************
=1 457 ;******************************************************
=1 458 ;注!!!: 只当主程序中检测到BC_REMOTE脚有低电平时才调用该字程序, 然后再进入键功能程序.
=1 459 ;返回: RKEY_NUM(键值)代表的功能参考-- 表RKEY_TABLE, 值=#CANT_FIND (#0AEH)即为无按键
=1 460 ; B_RKEY 有remote key时置1, 注:主程序检测该位后清0
=1 461 ;子程序调用分辨率要在1ms之内
=1 462
A51 MACRO ASSEMBLER ASMPRO DATE 21/06/03 PAGE 9
LOC OBJ LINE SOURCE
=1 463
019C =1 464 GET_REMOTE:
019C D2B3 =1 465 SETB BC_REMOTE
019E 00 =1 466 NOP
019F 00 =1 467 NOP
01A0 00 =1 468 NOP
01A1 30B301 =1 469 JNB BC_REMOTE, GET_REMOTE_P0
01A4 22 =1 470 RET
=1 471
01A5 =1 472 GET_REMOTE_P0:
01A5 758C00 =1 473 MOV TH0,#000H
01A8 758A00 =1 474 MOV TL0,#000H
01AB E589 =1 475 MOV A,TMOD
01AD 54F0 =1 476 ANL A,#0F0H
01AF D2E0 =1 477 SETB ACC.0
01B1 F589 =1 478 MOV TMOD,A ;timer/counter0 16bit timer/counter
=1 479
01B3 74FF =1 480 MOV A, #0FFH
01B5 =1 481 LBL_P25:
01B5 30B304 =1 482 JNB BC_REMOTE,LBL_P256 ;get remote key
01B8 D5E0FA =1 483 DJNZ ACC, LBL_P25
01BB 22 =1 484 RET
=1 485
01BC =1 486 LBL_P256:
01BC D28C =1 487 SETB TR0
01BE =1 488 LBL_P28:
01BE E58C =1 489 MOV A,TH0
01C0 B41400 =1 490 CJNE A,#014H,LBL_P26 ;10ms
01C3 =1 491 LBL_P26:
01C3 501F =1 492 JNC LBL_P27 ;if >10ms,regard this is a nosie
01C5 30B3F6 =1 493 JNB BC_REMOTE,LBL_P28 ;get remote key
01C8 B40500 =1 494 CJNE A,#005H,LBL_P29 ;2.5ms
01CB =1 495 LBL_P29:
01CB 4017 =1 496 JC LBL_P27 ;if <2.5ms,regard this is a nosie
01CD 758C00 =1 497 MOV TH0,#000H
01D0 758A00 =1 498 MOV TL0,#000H
01D3 =1 499 LBL_P31:
01D3 E58C =1 500 MOV A,TH0
01D5 B40A00 =1 501 CJNE A,#00AH,LBL_P30
01D8 =1 502 LBL_P30:
01D8 500A =1 503 JNC LBL_P27 ;if >5ms,regard this is a nosie
01DA 20B3F6 =1 504 JB BC_REMOTE,LBL_P31 ;get remote key
01DD B40700 =1 505 CJNE A,#007H,LBL_P32
01E0 =1 506 LBL_P32:
01E0 404D =1 507 JC LBL_P33 ;if<3.5ms, 当是连发时
01E2 8001 =1 508 SJMP LBL_P34 ;above is the start flag, 当是起始信号时
01E4 =1 509 LBL_P27:
01E4 22 =1 510 RET
=1 511
=1 512
01E5 =1 513 LBL_P34: ;****** 是新按下的******
01E5 E4 =1 514 CLR A ;>3.5ms and <5ms
01E6 7A04 =1 515 MOV R2,#004H ;4 BYTE
01E8 7800 F =1 516 MOV R0,#RMBYTE_IN ;用户码存放地址1
01EA =1 517 LBL_P41:
01EA 7908 =1 518 MOV R1,#008H ;8bit
01EC =1 519 LBL_P40:
01EC 758C00 =1 520 MOV TH0,#000H
01EF 758A00 =1 521 MOV TL0,#000H
A51 MACRO ASSEMBLER ASMPRO DATE 21/06/03 PAGE 10
LOC OBJ LINE SOURCE
01F2 =1 522 LBL_P36:
01F2 AB8C =1 523 MOV R3,TH0
01F4 BB0200 =1 524 CJNE R3,#002H,LBL_P35
01F7 =1 525 LBL_P35:
01F7 50EB =1 526 JNC LBL_P27 ;>1ms
01F9 30B3F6 =1 527 JNB BC_REMOTE,LBL_P36 ;get remote key
01FC 758C00 =1 528 MOV TH0,#000H
01FF 758A00 =1 529 MOV TL0,#000H
0202 =1 530 LBL_P38:
0202 AB8C =1 531 MOV R3,TH0
0204 BB0400 =1 532 CJNE R3,#004H,LBL_P37
0207 =1 533 LBL_P37:
0207 50DB =1 534 JNC LBL_P27 ;>2ms
0209 20B3F6 =1 535 JB BC_REMOTE,LBL_P38 ;get remote key
020C BB0200 =1 536 CJNE R3,#002H,LBL_P39 ;>1ms is bit 0,<1ms is bit 1
020F =1 537 LBL_P39:
020F B3 =1 538 CPL C
0210 13 =1 539 RRC A ;the data is low bit first
0211 D9D9 =1 540 DJNZ R1,LBL_P40
0213 F6 =1 541 MOV @R0,A
0214 08 =1 542 INC R0
0215 DAD3 =1 543 DJNZ R2,LBL_P41 ;32 bit
=1 544
0217 E500 F =1 545 MOV A,RMBYTE_IN
0219 B42012 =1 546 CJNE A,#USER_CODE1,LBL_P42
021C E500 F =1 547 MOV A,RMBYTE_IN+01H
021E B4DF0D =1 548 CJNE A,#USER_CODE2,LBL_P42
0221 E500 F =1 549 MOV A,RMBYTE_IN+02H
0223 2500 F =1 550 ADD A,RMBYTE_IN+03H
0225 B4FF06 =1 551 CJNE A,#0FFH,LBL_P42 ;后两字节是互补编码,若不是即是出错
=1 552 ; MOV R0,#48D ;******键值表为0-38 ******
=1 553 ; MOV DPTR,#RKEY_TABLE
=1 554 ; MOV RKEY_SPEED, #00H ;remote 连发速度, 先设置为最慢
=1 555 ;LBL_P46:
=1 556 ; MOV A,R0
=1 557 ; MOVC A,@A+DPTR
=1 558 ; CJNE A,RMBYTE_IN+02H,LBL_P43 ;get the low code byte from the table
=1 559 ; MOV RKEY_NUM,R0 ;save the offset
0228 850000 F =1 560 MOV RKEY_NUM,RMBYTE_IN+02H
022B 02023B =1 561 LJMP LBL_P44 ;get it
=1 562 ;LBL_P43:
=1 563 ; MOV A,R0
=1 564 ; JZ LBL_P45
=1 565 ; DEC R0
=1 566 ; SJMP LBL_P46
=1 567 ;LBL_P45:
=1 568 ; MOV RKEY_NUM,#CANT_FIND ;can't find the code
022E =1 569 LBL_P42:
022E 22 =1 570 RET
=1 571
=1 572
=1 573
=1 574
022F =1 575 LBL_P33: ;<3.5ms CONTINUES ****** 连发的 *******
022F 750002 F =1 576 MOV RKEY_KEEP, #N_RKEY_KEEP ;允许连发的停顿时间 0.2ms
0232 D50005 F =1 577 DJNZ RKEY_SPEED, LBL_P50 ;remote 灵敏度
0235 =1 578 LBL_P51:
0235 E500 F =1 579 MOV A,RKEY_NUM
0237 B4AE07 =1 580 CJNE A,#CANT_FIND,LBL_P48
A51 MACRO ASSEMBLER ASMPRO DATE 21/06/03 PAGE 11
LOC OBJ LINE SOURCE
023A =1 581 LBL_P50:
023A 22 =1 582 RET
023B =1 583 LBL_P44:
023B E500 F =1 584 MOV A,RKEY_NUM
023D B4AE01 =1 585 CJNE A,#CANT_FIND,LBL_P48
0240 22 =1 586 RET ;can't find the code
0241 =1 587 LBL_P48:
0241 =1 588 LBL_P49:
0241 750002 F =1 589 MOV RKEY_KEEP, #N_RKEY_KEEP ;允许连发的停顿时间 0.2s
0244 D200 F =1 590 SETB B_RKEY ;有按键
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -