📄 p676_koq.lst
字号:
00523 ;
00524 ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
00525 ;
00526 ;===========================================================================
00527
00C5 00528 LOAD_CNT_VALS
00C5 082A 00529 MOVFW CNTR_HI ; LOAD MSB OF COUNTER
00C6 00B1 00530 MOVWF TMP1
00C7 0829 00531 MOVFW CNTR_LW ; LOAD LSB OF COUNTER
00C8 00B2 00532 MOVWF TMP2
00C9 3400 00533 RETLW 0
00534
00535 ;===========================================================================
00536 ;
00537 ; FUNCTION : RECEIVE()
00538 ;
00539 ; DESCRIPTION : RECEPTION ROUTINE FOR PWM TRANSMISSIONS
00540 ;
00541 ; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
00542 ;
00543 ;===========================================================================
00544
00CA 00545 RECEIVE
00546
00547 ;******** WAIT FOR HEADER AND CALIBRATE *******************
00548
00CA 1C85 00549 BTFSS PORTA,RFIN ; INPUT LOW?
00CB 292B 00550 GOTO RMT_0 ; YES; RECEIVE ERROR
00551
00CC 300A 00552 MOVLW 10 ; 10 ms TIMER
00CD 00A5 00553 MOVWF CNT1
MPASM 03.60 Released P676_KOQ.ASM 3-4-2005 17:50:49 PAGE 12
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00CE 00554 RCV0
00CE 30C8 00555 MOVLW 200
00CF 00A4 00556 MOVWF CNT0
00D0 00557 RCV1
00D0 1C85 00558 BTFSS PORTA,RFIN ; [2] INPUT HIGH?
00D1 28D6 00559 GOTO RCV2 ; [0] NO, JUMP OUT OF LOOP
00D2 0BA4 00560 DECFSZ CNT0,1 ; [1] YES, CONTINUE WITH TIMING LOOP
00D3 28D0 00561 GOTO RCV1 ; [2] 5 us X CNT0
00D4 0BA5 00562 DECFSZ CNT1,1 ; [0] DO 1 ms LOOP CNT1 TIMES
00D5 28CE 00563 GOTO RCV0 ; [0]
00564
00D6 00565 RCV2
00D6 01A4 00566 CLRF CNT0 ; [1] CLEAR CALIB COUNTER LOW BYTE
00D7 01A5 00567 CLRF CNT1 ; [1] CLEAR CALIB COUNTER HIGH BYTE
00568
00569 ;*************************************************************************
00570 ; 2.5 IS AVERAGE FOR DETECTING FALLING EDGE IN RCV1
00571 ; 2 INSTRUCTIONS FOR JUMP OUT RCV1 TO RCV2
00572 ; 2 INSTRUCTIONS FOR RCV2 - CLEAR CALIBRATION COUNTER
00573 ; TOTAL 6.5 INSTRUCTIONS < 1 CALIBRATION LOOP SO DISCARD
00574 ;*************************************************************************
00575
00D8 00576 RCV3
00D8 1885 00577 BTFSC PORTA,RFIN ; [2][2] INPUT HIGH?
00D9 28E2 00578 GOTO RCV6 ; [0][0] YES--END CALIBRATION
00DA 0AA4 00579 INCF CNT0,1 ; [1] INCREMENT 16BIT COUNTER
00DB 1903 00580 SKPNZ ; [2]
00DC 0AA5 00581 INCF CNT1,1 ; [0]
00DD 0064 00582 CLRWDT ; [1] RESET WATCH DOG TIMER
00DE 0000 00583 NOP ; [1]
00DF 1DA5 00584 BTFSS CNT1,3 ; [1]
00E0 28D8 00585 GOTO RCV3 ; [2]
00E1 292B 00586 GOTO RMT_0 ; [0]
00587 ; TOTAL = 10
00588
00E2 00589 RCV6
00E2 1003 00590 CLRC ; [1] DIVIDE CNT1:CNT0 BY 8 (600/8=75)
00E3 0CA5 00591 RRF CNT1,1 ; [1]
00E4 0CA4 00592 RRF CNT0,1 ; [1]
00E5 0CA5 00593 RRF CNT1,1 ; [1]
00E6 0CA4 00594 RRF CNT0,1 ; [1]
00E7 0CA5 00595 RRF CNT1,1 ; [1]
00E8 0CA4 00596 RRF CNT0,1 ; [1]
00597
00E9 3007 00598 MOVLW MIN/80 ; [1]
00EA 0224 00599 SUBWF CNT0,W ; [1]
00EB 1C03 00600 BTFSS STATUS,C ; [2] NEGATIVE?
00EC 292B 00601 GOTO RMT_0 ; [0] YES--HEADER SHORTER THAN MIN.
00602 ; TOTAL = 11
00603 ; ************* VALID HEADER RECEIVED *********************
00ED 00604 RCV7
00ED 3040 00605 MOVLW NBITS ; [1] VALID START MARKER WAS RECEIVED
00EE 00A5 00606 MOVWF CNT1 ; [1]
MPASM 03.60 Released P676_KOQ.ASM 3-4-2005 17:50:49 PAGE 13
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00EF 0824 00607 MOVF CNT0,W ; [1]
00F0 00A6 00608 MOVWF CNT2 ; [1] CNT2 = CNT0
00F1 3006 00609 MOVLW 6H ; [1] SEE NOTE BELOW
00F2 02A6 00610 SUBWF CNT2,1 ; [1]
00F3 2905 00611 GOTO DL1 ; [2] COMPENSATE FOR FIRST BIT
00612 ; TOTAL = 8
00613
00614 ;**********************************************************************************
00615 ; 2.5 IS AVERAGE PLAY BETWEEN RISING EDGE AND JUMP OUT OF CALIBRATION LOOP.
00616 ; 2 FOR JUMP OUT OF RCV3 TO RCV6
00617 ; 11 INSTRUCTIONS FOR RVC6 - CAIBRATION COUNTER DIVIDE
00618 ; 8 INSTRUCTIONS FOR RCV7 - COMPENSATE FOR POST CALIBRATION CALCUATIONS
00619 ; TOTAL 22.5 INSTRUCTIONS BETWEEN RISING EDGE AND ENTERING DL1
00620 ; THEREFORE SUBTRACT 22.5/4 = 5.625 TO COMPENSATE FOR POST CALCULATION ON 1ST BIT
00621 ;**********************************************************************************
00622
00F4 00623 RCV8
00F4 3004 00624 MOVLW 4H ; [1] WAIT A MAXIMUM OF 4 Te
00F5 00A3 00625 MOVWF TMP_CNT ; [1] SET TEMP LOOP COUNTER
00626
00F6 00627 RCV10A
00F6 0824 00628 MOVFW CNT0 ; [1] and CSR processing
00F7 00A6 00629 MOVWF CNT2 ; [1] Refer to explanation above
00630
00F8 00631 RCV10B
00F8 1885 00632 BTFSC PORTA,RFIN ; [2] Wait for rising edge
00F9 2902 00633 GOTO RCV11 ; [0] Edge found--Process
00FA 0064 00634 CLRWDT ; [1] Clear watchdog Timer
00FB 1885 00635 BTFSC PORTA,RFIN ; [2] Wait for Next rising edge
00FC 2902 00636 GOTO RCV11 ; [0] Edge found--Process
00FD 0BA6 00637 DECFSZ CNT2,1 ; [1] Decrement Timeout counter
00FE 28F8 00638 GOTO RCV10B ; [2] Loop Back
00639 ; TOTAL = 8, RFIN CHECKED EVERY 4uS ON AVERAGE
00640
00FF 0BA3 00641 DECFSZ TMP_CNT,1 ; [1] ALL Te PERIODS
0100 28F6 00642 GOTO RCV10A ; [2] ... NO, THEN WAIT FOR NEXT ONE
0101 292B 00643 GOTO RMT01 ; [0] ... YES, [0] TIMEOUT--no edge found
00644
0102 00645 RCV11
0102 3003 00646 MOVLW 3H ; [1] SEE NOTE BELOW
0103 0224 00647 SUBWF CNT0,W ; [1]
0104 00A6 00648 MOVWF CNT2 ; [1]
00649
00650 ;*************************************************************************
00651 ; 2 SETUP OF TEMP LOOP COUNTER ( ONLY ONCE )
00652 ; 2 SETUP TE LOOP COUNTER ( MAX 4 )
00653 ; 3 DECREMENT TEMP LOOP COUNTER ( MAX 4 )
00654 ; 4 IS THE AVERAGE PLAY BETWEEN EDGE AND EDJE BEING DETECTED IN RCV9
00655 ; 2 JUMP OUT OF RCV10B TO RCV11
00656 ; 3 FOR RCV11
00657 ; TOTAL 10 INSTRUCTIONS BETWEEN EDGE AND ENTERING DL1
00658 ; THEREFORE SUBTRACT 10/4 = 2.5 => 3 DL1 LOOPS TO COMPENSATE FOR
00659 ;*************************************************************************
MPASM 03.60 Released P676_KOQ.ASM 3-4-2005 17:50:49 PAGE 14
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00660
0105 00661 DL1
0105 0064 00662 CLRWDT ; [1] RESET WATCHDOG TIMER
0106 0BA6 00663 DECFSZ CNT2,1 ; [1] [2, IF SKIP]
0107 2905 00664 GOTO DL1 ; [2] CNT0 X 4 us
00665
0108 00666 SAMPLE1
0108 1C85 00667 BTFSS PORTA,RFIN ; [2] INPUT HIGH? FIRST SAMPLE
0109 292B 00668 GOTO RMT01 ; [0] NO--ERROR
00669
010A 0824 00670 MOVF CNT0,W ; [1] CALIBRATION COUNTER
010B 00A6 00671 MOVWF CNT2 ; [1] (NOMINALLY 75 FOR 300 us PULSE)
010C 03A6 00672 DECF CNT2,1 ; [1] SUBTRACT 2 FROM FINAL CALIB COUNTER TO COMPENATE FOR THIS
010D 290E 00673 GOTO $+1 ; [2]
010E 0000 00674 NOP ; [1]
00675 ; TOTAL = 8 => 1 LOOP COUNTER
010F 00676 DL2
010F 0064 00677 CLRWDT ; [1] RESET WATCHDOG TIMER
0110 2911 00678 GOTO $+1 ; [2] WASTE TIME
0111 2912 00679 GOTO $+1 ; [2] WASTE TIME
0112 0BA6 00680 DECFSZ CNT2,1 ; [1]
0113 290F 00681 GOTO DL2 ; [2] CNT0 X 8 us [ CNT0 x Te ]
00682
0114 00683 SAMPLE2
0114 1020 00684 BCF FLAGS,BITIN ; [1] CLEAR BIT POSITION
0115 1C85 00685 BTFSS PORTA,RFIN ; [1.5] LEAVE 0 IF LINE HIGH
0116 1420 00686 BSF FLAGS,BITIN ; [0.5] MAKE 1 IF LINE LOW
00687 ; SUB TOTAL = 3 CYCLES
00688
0117 2014 00689 CALL ROT_SHIFT ; [11]+[2] CSR SHIFT + CALL
0118 13B0 00690 BCF CSR7,7 ; [1]
0119 1820 00691 BTFSC FLAGS,BITIN ; [1.5]
011A 17B0 00692 BSF CSR7,7 ; [0.5]
00693 ; SUB TOTAL = 16 CYCLES
00694
00695
011B 0824 00696 MOVF CNT0,W ; [1] CALIBRATION COUNTER
011C 00A6 00697 MOVWF CNT2 ; [1] (NOMINALLY 75 FOR 300 us PULSE)
011D 3003 00698 MOVLW 3 ; [1] SEE CALCULATION BELOW
011E 02A6 00699 SUBWF CNT2,1 ; [1]
011F 0000 00700 NOP ; [1]
00701 ; SUB TOTAL = 5 CYCLE
00702 ; TOTAL = 24 => 24/8 = 3 LOOP CO
UNTERS
00703
00704 ;*************************************************************************
00705 ; TOTAL = 24 INSTRUCTIONS
00706 ; SUBTRACT 24/8 = 3 TO COMPESATE FOR UPDATEING CSR AND OTHER PROCESSING
00707 ; AFTER DATA SAMPLE IS TAKEN.
00708 ;*************************************************************************
00709
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -