📄 hcs635.lst
字号:
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00B5 0807 00713 MOVFW PORTC ; READ PORTA
00B6 3A20 00714 XORLW 020H ; TOGGLE RF DATA OUT BIT
00B7 0087 00715 MOVWF PORTC ; OUTPUT NEW BIT
00B8 156D 00716 BSF COMP,2
00B9 2034 00717 CALL TE_DEL03 ; DO TE DELAY TIME
00BA 0C07 00718 RRF PORTC,W ; GET OUTPUT LEVEL INTO BIT 0
00719 ENDIF
00BB 066C 00720 XORWF CSR6,W ; COMPARE TO THE TRANSMIT BIT
00BC 3901 00721 ANDLW 1 ; GET RID OF THE OTHER BITS
00BD 1D03 00722 BTFSS STATUS,Z ; IF THE LEVEL IS OPPOSITE
00BE 2033 00723 CALL TE_DELAY ; ... THEN DO ANOTHER TE DELAY
00BF 28CD 00724 GOTO TX_ROTATE ; IF NOT TOTALLY CONFUSED YET THEN ASK FOR A RAISE
00725
00C0 00726 TX_PWM
00C0 28C1 00727 GOTO $+1
00C1 00728 TX_PWM1
00C1 1687 00729 BSF RFOUT ; SET RF OUTPUT HIGH
00C2 2032 00730 CALL TE_DELAYL ; DO 1 TE DELAY
00C3 0000 00731 NOP ; VERY CRITICAL TIME DELAYS TO MAKE ACCURATE PULSES
00C4 186C 00732 BTFSC CSR6,0 ; IF TRANSMITTING A ONE
00C5 1287 00733 BCF RFOUT ; ... THEN SET MIDDLE TE OF PWM LOW
00C6 00734 TX_PWM2
00C6 28C7 00735 GOTO $+1
00C7 2032 00736 CALL TE_DELAYL ; DO 1 TE DELAY
00C8 00737 TX_PWM3
00C8 1287 00738 BCF RFOUT ; SET LAST TE OF PWM LOW
00C9 3003 00739 MOVLW 3
00CA 00ED 00740 MOVWF COMP
00CB 2034 00741 CALL TE_DEL03 ; DO 1 TE DELAY
00CC 0000 00742 NOP
00CD 00743 TX_ROTATE
00CD 0000 00744 NOP
00CE 0CEC 00745 RRF CSR6,F ; ROTATE NEXT BIT INTO POSITION
00CF 03DE 00746 DECF CNT1,F ; FIX FOR DOUBLED COUNT SIZE
00D0 0BDE 00747 DECFSZ CNT1,F ; ALL BITS TRANSMITTED? SET CLEAR PWM FLAG
00D1 288F 00748 GOTO TX_BITL ; ... NO, THEN DO NEXT BIT
00D2 3400 00749 RETLW 0
00750
00751 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
00752 ;
00753 ; FUNCTION : VLOW_LEVEL ()
00754 ;
00755 ; DESCRIPTION : PICK THE VLOW LEVEL TO TEST BASED ON VTRIP FLAG AND LATCH
00756 ;
00757 ; PAGE : 1
00758 ;
00759 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
00D3 00760 VLOW_LEVEL
00D3 3007 00761 MOVLW EE_VLOWL ; POINT VLOW LATCH
00D4 2213 00762 CALL EEREAD0 ; READ BYTE FROM EEPROM
00D5 1683 00763 bsf STATUS,RP0
00D6 0A1A 00764 INCF EEDATA,W ; SET Z FLAG IF VLOW LATCH SET @ 0FFH
00D7 1283 00765 bcf STATUS,RP0 ; SELECT RAM BANK #0
MPASM 5.16 HCS635.ASM 4-16-2008 14:39:21 PAGE 17
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00D8 3008 00766 movlw HIGH $+8
00D9 008A 00767 movwf PCLATH
00DA 3002 00768 MOVLW 2H ; PRELOAD OFFSET FOR LATCHED 3V LEVEL
00DB 1A61 00769 BTFSC VTRIP ; IF VTRIP OPTION IS SET
00DC 3003 00770 MOVLW 3H ; ... THEN USE THE OFFSET FOR LATCHED 5V LEVEL
00DD 19E1 00771 BTFSC VLOWL ; IF VLOW VALUE SHOULD NOT BE LATCHED
00DE 1D03 00772 BTFSS STATUS,Z ; . OR IT WAS NOT YET LATCHED
00DF 3901 00773 ANDLW 1H ; ... THEN USE LOWER TEST LEVELS
00E0 0782 00774 ADDWF PCL,F ; ADD TO PROGRAM COUNTER
00E1 3411 00775 RETLW 11H ; LOW VOLTAGE LEVEL = 2.0V
00E2 3414 00776 RETLW 14H ; LOW VOLTAGE LEVEL = 2.3V
00E3 3415 00777 RETLW 15H ; LOW VOLTAGE LEVEL = 4.0V
00E4 3417 00778 RETLW 17H ; LOW VOLTAGE LEVEL = 4.5V
00779
00780 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
00781 ;
00782 ; FUNCTION : TRANSMIT ()
00783 ;
00784 ; DESCRIPTION : SEND TRANSMISSION OUT ON RFOUT PIN
00785 ;
00786 ; PAGE : 0
00787 ;
00788 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
00E5 00789 TRANSMIT:
00E5 01E5 00790 CLRF CRC ; CLEAR CRC HERE BECAUSE IT WAS A TIME WASTING NOP ANYWAY
00E6 1AD9 00791 BTFSC STRTSEL ; IF MANCHESTER/PPM START BIT REQUIRED
00E7 1465 00792 BSF CRC,0 ; ... THEN BIAS CRC FOR START BIT
00793
00E8 1358 00794 BCF FLAGS,TEMPBIT ; RESET LED STATE FLAG
00E9 1C07 00795 BTFSS LED ; IF LED WAS SWITCHED ON
00EA 1758 00796 BSF FLAGS,TEMPBIT ; ... YES, THEN SET LED FLAG
00EB 1407 00797 BSF LED ; ALWAYS SWITCH LED OFF
00798
00EC 0AE9 00799 INCF CLK_LED,F ; PREVENT NEXT LED TRANSITION TIME
00800
00ED 1505 00801 BSF RFEN ; TURN ON RFEN FOR IN CASE WE ARE IN FSK MODE
00802
00EE 1CE1 00803 BTFSS WSEL1 ; IF EITHER OF THE WAKEUP SELECT
00EF 1861 00804 BTFSC WSEL0 ; . BITS ARE SET FOR LONG WAKEUP
00F0 28F2 00805 GOTO $+2 ; ... THEN SKIP PREAMBLE ADJUSTMENT
00F1 1658 00806 BSF FLAGS,FIRST ; ... ELSE FORCE AS IF FIRST PREAMBLE SENT
00807
00808 ; ***** SET NUMBER OF PREAMBLE PULSES AND VLOW THRESHOLD ***********
00809
00F2 300F 00810 MOVLW D'15' ; LOAD THE NUMBER OF 16 PREAMBLE BITS - 1 = 15
00F3 1E58 00811 BTFSS FLAGS,FIRST ; IF FIRST LONG PREAMBLE NOT YET SENT
00F4 3001 00812 MOVLW D'1' ; ... THEN DO NOT DO EXTRA PULSES AFTER TIMEOUT
00F5 00DE 00813 MOVWF CNT1 ; STORE NUMBER OF PULSES TO TRANSMIT
00814
00F6 1A58 00815 BTFSC FLAGS,FIRST ; IF FIRST PREAMBLE ALREADY SENT
00F7 10E1 00816 BCF WSEL1 ; ... THEN USE NORMAL 50% DUTY CYLCE PULSES
00817
00F8 3000 00818 MOVLW 0 ; FOR 100MS PREAMBLE DO NOT USE OFFSET
MPASM 5.16 HCS635.ASM 4-16-2008 14:39:21 PAGE 18
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00F9 1CE1 00819 BTFSS WSEL1 ; IF 75MS WAKEUP PREAMBLE SELECTED
00FA 300C 00820 MOVLW D'12' ; ... GET CONSTANT FOR 24.6MS OFFSET
00FB 1C61 00821 BTFSS WSEL0 ; IF 50MS WAKEUP PREAMBLE SELECTED
00FC 3018 00822 MOVLW D'24' ; ... GET CONSTANT FOR 50MS OFFSET
00823
00FD 1E58 00824 BTFSS FLAGS,FIRST ; IF NOT FIRST WAKEUP PREAMBLE
00FE 078F 00825 ADDWF TMR1H,F ; ... THEN ADD OFFSET TO CLOCK AND TEST WHEN 100MS REACHED
00FF 01ED 00826 CLRF COMP ; INITIALIZE COMPENSATION
0100 156D 00827 BSF COMP,2 ; OVERHEAD COMPENSATION FOR LOOKING UP VLOW TRIP POINT
0101 2070 00828 CALL TST_CLK ; UPDATE 50MS CLOCK
0102 205A 00829 CALL TST_LED ; CHANGE LED PIN IF REQUIRED, RETURNS BAUD RATE AND C=0
0103 1687 00830 BSF RFOUT ; SET RF OUTPUT HIGH
0104 2035 00831 CALL TE_DEL05 ; DO 1 TE DELAY
0105 20D3 00832 CALL VLOW_LEVEL ; GET VLOW LEVEL FROM LOOKUP TABLE
00833
00834 ; ***** TEST VLOW AFTER WAITING AT LEAST 10 INSTRUCTION CYCLES ***********
00835
0106 1683 00836 bsf STATUS,RP0 ; select Bank 1
00837 ; MOVWF LVDCON ; (1) LOAD LOW VOLTAGE DETECT REGISTER
00838 ; MOVWF VLOWLEVEL ; (6) STORE VALUE FOR COMPARISON
00839 ; btfss LVDCON,IRVST
00840 ; goto $-1
0107 1283 00841 bcf STATUS,RP0
00842 ; BSF FLAGS,VLOWBAT ; (11) FORCE VLOWBAT FLAG ON => ENSURE THAT LED DOESN'T SWITCH ON
00843 ; XORWF VLOWLEVEL,F ; CHECK IF BATTERY LEVEL CHANGED
00844 ; RLF VLOWLEVEL,F ; SET CARRY FLAG IF LEVEL CHANGED
00845 ; MOVWF VLOWLEVEL ; STORE VLOW LEVEL
00846 ; BTFSS VLOW ; IF VLOW NOT SET
0108 1058 00847 BCF FLAGS,VLOWBAT ; ... THEN THE BATTERY IS OK, FLAG WAS SET EARLIER
0109 1283 00848 bcf STATUS,RP0 ; SELECT RAM BANK #0
00849
010A 1803 00850 BTFSC STATUS,C ; IF BATTERY LEVEL UNCHANGED
010B 1DE1 00851 BTFSS VLOWL ; . OR VLOW LATCH DISABLED
010C 2916 00852 GOTO TX_PRE1 ; ... THEN SKIP VLOW LATCH UPDATE
00853
00854 ; ***** UPDATE VLOW LATCH IN EEPROM ******************
00855
010D 1287 00856 BCF RFOUT ; STOP TRANSMITTER DURING EEWRITE
010E 1683 00857 bsf STATUS,RP0 ; SELECT RAM BANK #1
010F 3007 00858 MOVLW EE_VLOWL ; GET OFFSET TO VLOW LATCH IN EEPROM
0110 009B 00859 MOVWF EEADR ; SET EEPROM ADDRESS TO VLOW LATCH
00860
0111 30FF 00861 MOVLW 0FFH ; VALUE TO SET LATCH CHOOSEN TO BE SAME AS FAILED WRITE
0112 1C58 00862 BTFSS FLAGS,VLOWBAT ; IF NOT LOW BATTERY CONDITION
0113 3000 00863 MOVLW 00H ; ... THEN CLEAR EEPROM LATCH
0114 2222 00864 CALL EEWRITE ; UPDATE EEPROM LATCH
0115 1283 00865 bcf STATUS,RP0 ; SELECT RAM BANK #0
00866
00867 ; ***** SEND TRANSMISSION'S PREAMBLE BITS ******************
00868
00869
0116 00870 TX_PRE1
0116 03E9 00871 DECF CLK_LED,F ; PERMIT NEXT LED TRANSITION TIME
MPASM 5.16 HCS635.ASM 4-16-2008 14:39:21 PAGE 19
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0117 1B58 00872 BTFSC FLAGS,TEMPBIT ; IF THE LED WAS ON BEFORE THE VLOW CHECK
0118 1007 00873 BCF LED ; ... THEN SWITCH LED ON
0119 00874 TX_PRE2
0119 1287 00875 BCF RFOUT ; CLEAR RF OUTPUT LOW
011A 00EE 00876 MOVWF CNT3 ; LOAD LOOP COUNTER BUT NOT ON FIRST ITERATION
011B 291C 00877 GOTO $+1
00878
011C 1CE1 00879 BTFSS WSEL1 ; IF 50% DUTY CYCLE
011D 1061 00880 BCF WSEL0 ; ... THEN MAKE SURE WE DO NOT DO 16.7% DUTY CYCLE
00881
011E 156D 00882 BSF COMP,2 ; OVERHEAD COMPENSATION FOR LOOKING UP VLOW TRIP POINT
011F 2033 00883 CALL TE_DELAY ; DO 1 TE DELAY
0120 1B59 00884 BTFSC LEDL ; IF SINGLE LED BLINK ON VLOW IS ENABLED
0121 1007 00885 BCF LED ; ... YES, THEN SWITCH LED ON
0122 1359 00886 BCF LEDL ; MARK THAT THE FIRST LED BLINK OCCURRED
0123 18E1 00887 BTFSC WSEL1 ; IF 33.3% DUTY CYCLE
0124 2033 00888 CALL TE_DELAY ; ... THEN WAIT ANOTHER TE
0125 1861 00889 BTFSC WSEL0 ; IF 16.6% DUTY CYCLE
0126 2033 00890
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -