⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hcs635.lst

📁 source for the microchip transponder for LF 125KHz.
💻 LST
📖 第 1 页 / 共 5 页
字号:
                      00530 ;
                      00531 ; DESCRIPTION   : CHECK IF LED NEEDS TO TOGGLE, THEN TOGGLE IT, 20/21 CYCLES
                      00532 ;
                      00533 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
005A                  00534 TST_LED
005A   0869           00535         MOVFW   CLK_LED         ; [1] GET NEXT LED TRANSITION TIME
005B   0267           00536         SUBWF   CLK_50,W        ; [1] COMPARE WITH CURRENT TIME
005C   3002           00537         MOVLW   T_100           ; [1] SET LED ON TIME FOR 100MS
005D   1FD9           00538         BTFSS   LEDH            ; [1/2] IF LED BLINK SHOULD BLINK FASTER
005E   3001           00539         MOVLW   T_50            ; [1/0] ... THEN SET LED ON TIME FOR 50MS
005F   1C07           00540         BTFSS   LED             ; [1/2] IF LED IF OFF
0060   300A           00541         MOVLW   T_500           ; [1/0] ... THEN SET LED OFF TIME
0061   1C03           00542         BTFSS   STATUS,C        ; [1/2] IF TIME TEST WAS LESS THAN TRIGGER
0062   286D           00543         GOTO    TST_LED2        ; [2/0] ... THEN SKIP LED UPDATE
                      00544 
0063   0767           00545         ADDWF   CLK_50,W        ; [1] CALCULATE NEXT TIME TO TOGGLE
0064   00E9           00546         MOVWF   CLK_LED         ; [1] STORE NEXT TIME TO TOGGLE
                      00547 IFDEF P12F635
                      00548         MOVFW   PORTA           ; [1] GET LED SETTING
                      00549         BTFSC   FLAGS,VLOWBAT   ; [1/2] IF BATERY LEVEL IS LOW
                      00550         ANDLW   0FEH            ; [1/0] THEN TURN LED OFF
                      00551         XORLW   1               ; [1] ELSE TOGGLE LED
                      00552         MOVWF   PORTA           ; [1] THEN UPDATE LED
                      00553 ELSE
MPASM  5.16                        HCS635.ASM   4-16-2008  14:39:21         PAGE 13


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0065   0807           00554         MOVFW   PORTC           ; [1] GET LED SETTING
0066   1858           00555         BTFSC   FLAGS,VLOWBAT   ; [1/2] IF BATERY LEVEL IS LOW
0067   39FE           00556         ANDLW   0FEH            ; [1/0] THEN TURN LED OFF
0068   3A01           00557         XORLW   1               ; [1] ELSE TOGGLE LED
0069   0087           00558         MOVWF   PORTC           ; [1] THEN UPDATE LED
                      00559 ENDIF
006A                  00560 TST_LED1
006A   1EE0           00561         BTFSS   BSL1            ; [1/2] CHECK IF BSL1 BIT IS SET
006B   3414           00562         RETLW   D'20'           ; [2] RETURN BAUD=100USEC AND CARRY=0
006C   3450           00563         RETLW   D'80'           ; [2] RETURN BAUD=400USEC AND CARRY=0
                      00564                                 ; TOTAL = [20] CYCLES WITH CALL
                      00565 
006D                  00566 TST_LED2
006D   286E           00567         GOTO    $+1             ; WASTE TIME TO KEEP BOTH PATHS EQUAL TIME
006E   286F           00568         GOTO    $+1             ; CANNOT USE CALL BECAUSE STACK IS FULL
006F   286A           00569         GOTO    TST_LED1
                      00570 
                      00571 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      00572 ;
                      00573 ; FUNCTION      : TST_CLK ()
                      00574 ;
                      00575 ; DESCRIPTION   : UPDATE 50MS CLOCK AS REQUIRED, 19 CYCLES
                      00576 ;
                      00577 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
0070                  00578 TST_CLK
0070   3018           00579         MOVLW   18H             ; 24x256x8 = 6144 x 8 = 49152 => 50MS
0071   1867           00580         BTFSC   CLK_50,0        ; EVERY OTHER TEST DITHERS THE ERROR
0072   3019           00581         MOVLW   19H             ; 24x256x8 = 6144 x 8 = 49152 => 50MS
0073   020F           00582         SUBWF   TMR1H,W         ; COMPARE WITH REAL TIMER COUNTER
0074   1803           00583         BTFSC   STATUS,C        ; IF TIMEOUT REACHED
0075   008F           00584         MOVWF   TMR1H           ; ... THEN STORE RESULT IN RTCC
0076   1803           00585         BTFSC   STATUS,C        ; IF TIMEOUT REACHED
0077   0AE7           00586         INCF    CLK_50,F        ; ... THEN INCREMENT THE 50MS EVENT COUNTER
0078   1FE7           00587         BTFSS   CLK_50,7        ; [2/1] CHECK IF MSB SET 
0079   287E           00588         GOTO    TST_CLK5        ; [0/2] ... NO, THEN WASTE 2 CYCLES AND RETURN
007A   0AE8           00589         INCF    CLK_HI,F        ; ... THEN INCREMENT 50MS OVERFLOW COUNTER
007B   13E7           00590         BCF     CLK_50,7        ; CLEAR MSB OF 50MS CLOCK COUNTER
007C   13E9           00591         BCF     CLK_LED,7       ; CLEAR MSB OF LED CLOCK COUNTER
007D   3436           00592         RETLW   D'54'           ; RETURN START VALUE 200US DELAY
007E                  00593 TST_CLK5
007E   3436           00594         RETLW   D'54'           ; RETURN START VALUE 200US DELAY
                      00595 
                      00596 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      00597 ;
                      00598 ; FUNCTION      : DLY_200US ()
                      00599 ;
                      00600 ; DESCRIPTION   : WAIT FOR CNT1 x 200us DELAY, WHILE CHECKING BUTTON
                      00601 ;
                      00602 ; PAGE          : 0
                      00603 ;
                      00604 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
007F                  00605 DLY_200US
007F   00DE           00606         MOVWF   CNT1            ; STORE THE NUMBER OF MS DELAY REQUIRED
MPASM  5.16                        HCS635.ASM   4-16-2008  14:39:21         PAGE 14


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0080                  00607 DLY_US2
0080   205A           00608         CALL    TST_LED         ; UPDATE LED STATUS
0081   2070           00609         CALL    TST_CLK         ; UPDATE 50MS CLOCK, RETURNS 120 FOR DELAY COUNTER 
0082                  00610 DLY_3US
0082   00DF           00611         MOVWF   CNT2            ; LOAD INNER LOOP COUNTER
0083                  00612 DLY_US3
0083   0BDF           00613         DECFSZ  CNT2,F          ; ALL INNER LOOPS DONE ?
0084   2883           00614         GOTO    DLY_US3         ; ... NO, THEN DO NEXT
                      00615 
0085   0BDE           00616         DECFSZ  CNT1,F          ; ALL OUTER LOOPS DONE ?
0086   2880           00617         GOTO    DLY_US2         ; ... NO, THE DO NEXT
0087   3400           00618         RETLW   0H
                      00619 
                      00620 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      00621 ;
                      00622 ; FUNCTION      : TX_BITS ()
                      00623 ;
                      00624 ; DESCRIPTION   : SEND TRANSMISSION BITS OUT ON RFOUT PIN
                      00625 ;
                      00626 ; NOTES         : USE DOUBLE COUNTER SIZE TO MAKE BYTE ROLLOVER TEST EASIER
                      00627 ;               : MODIFY WITH EXTREME CAUTION TO PRESERVE BIT CALIBRATION
                      00628 ;               : NOW ENTERING SPAGETTI CODE WITH TOO MANY FORKS AND NO SPOON
                      00629 ;
                      00630 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
0088                  00631 TX_BITH
0088   3001           00632         MOVLW   1               ; SEND A LOGIC 1 BIT
0089                  00633 TX_1BIT
0089   14DE           00634         BSF     CNT1,1          ; SET LENGTH = 1 WITHOUT MODIFING W *2
008A                  00635 TX_BITW
008A   0000           00636         NOP
008B   2895           00637         GOTO    TX_BITWW        ; EXTRA 2 CYCLE DELAY BEFORE SENDING BITS IN W
008C                  00638 TX_BITS
008C   00DE           00639         MOVWF   CNT1            ; STORE LENGTH
008D   3077           00640         MOVLW   NSR0-1          ; POINT TO FIRST BIT OF BUFFER WITHOUT PAGE BITS
008E   0084           00641         MOVWF   FSR             ; THE PAGE BITS WILL BE INSERTED LATER
                      00642         
008F                  00643 TX_BITL
008F   300E           00644         MOVLW   0EH             ; GET MASK FOR BYTE ROLLOVER
0090   075E           00645         ADDWF   CNT1,W          ; SET DC FLAG IF ROLLOVER
0091   1C83           00646         BTFSS   STATUS,DC       ; IF FIRST FULL BYTE OR BYTE ROLLOVER
0092   0A84           00647         INCF    FSR,F           ; ... THEN POINT TO BYTE
0093   0800           00648         MOVFW   INDF            ; GET NEXT BYTE
0094   1C83           00649         BTFSS   STATUS,DC       ; IF FIRST FULL BYTE OR BYTE ROLLOVER
0095                  00650 TX_BITWW
0095   00EC           00651         MOVWF   CSR6            ; ... THEN STORE BYTE IN WORKING SPACE
0096   0365           00652         DECF    CRC,W           ; DECREMENT IS SHORTCUT FOR CRC ALGORITHM:
0097   18E5           00653         BTFSC   CRC,1           ;  CRC[0]n+1 = CRC[1]n XOR CRC[0]n XOR Dn
0098   3A03           00654         XORLW   3               ;  CRC[1]n+1 = CRC[0]n XOR Dn
0099   00E5           00655         MOVWF   CRC             ; STORE FIRST HALF OF CRC CALCULATION
009A   1C6C           00656         BTFSS   CSR6,0          ; IF BIT = 0
009B   09E5           00657         COMF    CRC,F           ; THEN INVERT CRC
                      00658 
009C   1C59           00659         BTFSS   MSEL0           ; IF MANCHESTER/PPM MODULATION NOT SELECTED
MPASM  5.16                        HCS635.ASM   4-16-2008  14:39:21         PAGE 15


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

009D   28B2           00660         GOTO    TX_WM           ; ... THEN DO PWM/VPWM
                      00661 
009E                  00662 TX_PPM
009E   289F           00663         GOTO    $+1             ; EQUALIZE TIME FOR PREVIOUS GOTO + PWM TEST
                      00664 IFDEF P12F635
                      00665         MOVFW   PORTA           ; GET THE OTHER OUTPUT LEVELS
                      00666         ANDLW   0FDH            ; MAKE RFOUT GO LOW
                      00667         BTFSC   CSR6,0          ; IF TRANSMITTING A ONE
                      00668         IORLW   2               ; MAKE RFOUT GO HIGH
                      00669         MOVWF   PORTA           ; START BIT NOW
                      00670         CALL    TE_DELAYL       ; DO 1 TE DELAY
                      00671 
                      00672         MOVFW   PORTA           ; GET OUTPUT LEVEL
                      00673         XORLW   2               ; TOGGLE OUTPUT
                      00674         MOVWF   PORTA           ; MAKE CHANGE NOW
                      00675 ELSE
009F   0807           00676         MOVFW   PORTC           ; GET THE OTHER OUTPUT LEVELS
00A0   39DF           00677         ANDLW   0DFH            ; MAKE RFOUT GO LOW
00A1   186C           00678         BTFSC   CSR6,0          ; IF TRANSMITTING A ONE
00A2   3820           00679         IORLW   020H            ; MAKE RFOUT GO HIGH
00A3   0087           00680         MOVWF   PORTC           ; START BIT NOW
00A4   2032           00681         CALL    TE_DELAYL       ; DO 1 TE DELAY
                      00682 
00A5   0807           00683         MOVFW   PORTC           ; GET OUTPUT LEVEL
00A6   3A20           00684         XORLW   020H            ; TOGGLE OUTPUT
00A7   0087           00685         MOVWF   PORTC           ; MAKE CHANGE NOW
                      00686 ENDIF
00A8   1CD9           00687         BTFSS   MSEL1           ; IF MANCHESTER MODULATION
00A9   28AE           00688         GOTO    TX_MAN          ; ... THEN SKIP LAST PPM TE
                      00689 
00AA   2032           00690         CALL    TE_DELAYL       ; DO 1 TE DELAY
00AB   1287           00691         BCF     RFOUT           ; SET LAST TE OF PWM LOW
00AC   0000           00692         NOP
00AD   28AE           00693         GOTO    $+1
00AE                  00694 TX_MAN
00AE   28AF           00695         GOTO    $+1
00AF   156D           00696         BSF     COMP,2
00B0   2034           00697         CALL    TE_DEL03        ; DO 1 TE DELAY
00B1   28CD           00698         GOTO    TX_ROTATE
                      00699 
00B2                  00700 TX_WM
00B2   1CD9           00701         BTFSS   MSEL1           ; IF VPWM MODULATION NOT SELECTED
00B3   28C0           00702         GOTO    TX_PWM          ; ... THEN DO PWM
00B4                  00703 TX_VPWM 
00B4   0000           00704         NOP                     ; EQUALIZE TIME FOR PREVIOUS GOTO
                      00705 IFDEF P12F635
                      00706         MOVFW   PORTA           ; READ PORTA
                      00707         XORLW   2               ; TOGGLE RF DATA OUT BIT
                      00708         MOVWF   PORTA           ; OUTPUT NEW BIT
                      00709         BSF     COMP,2
                      00710         CALL    TE_DEL03        ; DO TE DELAY TIME
                      00711         RRF     PORTA,W         ; GET OUTPUT LEVEL INTO BIT 0
                      00712 ELSE
MPASM  5.16                        HCS635.ASM   4-16-2008  14:39:21         PAGE 16

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -