test.asm

来自「dsp tmslf2407a 汇编,c的原代码,包括i2c,scitimer,f」· 汇编 代码 · 共 1,790 行 · 第 1/5 页

ASM
1,790
字号
          SACL    CAPTURE_VALUE         
          SPLK    #00H,DECODE_FLAG           
          B       FLAG0OUT
PULSE32:  LACL    #0C000H                 ;WPULSE=2 
          RPT     DETEMP
          SFR
          OR      CAPTURE_VALUE
          SACL    CAPTURE_VALUE  
          SPLK    #00H,DECODE_FLAG           
          B       FLAG0OUT  
DEFLAG31: SPLK    #01H,DECODE_FLAG        ;DECODE_FLAG=0
FLAG3OUT: B       CODENOUT                ;************************
CODENOUT: LDP     #5
          LACL    DENUMBER
          ADD     WPULSE
          SACL    DENUMBER   
          SUB     #16                     ;*******************23456********************8888
          BCND    GONEXT5,LT  
          LDP     #5
          LACL    RXD_BYTES
          ADD     #01H
          SACL    RXD_BYTES              ;字节数加1 
          SUB     #0B0H
          BCND    SERROR,GT
          NOP
          NOP                            ;保存CAPTURE_VALUE  
          LAR     AR4,#07H                           ;
          LDP     #5                                  ;
          SPLK    #0C000H,MCH_TEMP1                    ;
          SPLK    #8000H,MCH_TEMP2                      ;
          SPLK    #01H,MCH_TEMP3                        ;
          SPLK    #0,MCHVALUE_TEMP                        ;
MCHCYCLE: LDP     #5                                       ;
          LACL    CAPTURE_VALUE                             ;
          AND     MCH_TEMP1                                 ;
          SUB     MCH_TEMP2                                 ;
          BCND    DEMCH1,NEQ  
          NOP                                               ;
          B       MECHNEXT                                  ;
DEMCH1:   LACL    MCHVALUE_TEMP                             ;
          OR      MCH_TEMP3                                 ;
          SACL    MCHVALUE_TEMP  
MECHNEXT: LACL    MCH_TEMP1                                 ;
          SFR                                               ;
          SFR                                               ;  
          SACL    MCH_TEMP1
          LACL    MCH_TEMP2                                 ;
          SFR                                               ;
          SFR                                              ;  
          SACL    MCH_TEMP2
          LACL    MCH_TEMP3                               ;
          SFL                                            ; 
          SACL    MCH_TEMP3
          MAR     *,AR4                                 ;  
          BANZ    MCHCYCLE                             ;
          LDP     #5                                  ;
          LACL    MCHVALUE_TEMP                      ;
          MAR     *,AR3                             ;
          SACL    *+                    ;*****************************8
          LDP    #5     
          LACL   DENUMBER
          SUB    #16
          BCND   INTBYTE,EQ  
          NOP                            ;DENUMBER=17  
          LDP    #5
          LACL   FLAG
          BCND   FLAGD1,NEQ   
          LACL   DECODE_FLAG              ;原FLAG=0  
          BCND   DEFLAGD01,NEQ
          SPLK   #0,FLAG                 ;新FLAG=0   
          SPLK   #0,CAPTURE_VALUE
          SPLK   #01H,DENUMBER           
          B      CODENOUT2     
DEFLAGD01:SPLK   #03H,FLAG               ;新FLAG=3  
          SPLK   #8000H,CAPTURE_VALUE
          SPLK   #01H,DENUMBER              
          B      CODENOUT2               ;**************************
FLAGD1:   SUB    #01H
          BCND   FLAGD2,NEQ
          LACL   DECODE_FLAG             ;原FLAG=1  
          BCND   DEFLAGD11,NEQ
          SPLK   #0,FLAG                 ;新FLAG=0   
          SPLK   #0,CAPTURE_VALUE
          SPLK   #01H,DENUMBER             
          B      CODENOUT2     
DEFLAGD11:SPLK   #03H,FLAG               ;新FLAG=3 
          SPLK   #8000H,CAPTURE_VALUE
          SPLK   #01H,DENUMBER           
          B      CODENOUT2               ;*************************
FLAGD2:   SUB    #01H
          BCND   FLAGD3,NEQ
          LACL   DECODE_FLAG              ;原FLAG=2  
          BCND   DEFLAGD21,NEQ     
          SPLK   #03H,FLAG               ;新FLAG=3 
          SPLK   #8000H,CAPTURE_VALUE
          SPLK   #01H,DENUMBER           
          B      CODENOUT2
DEFLAGD21:SPLK   #00H,FLAG               ;新FLAG=0  
          SPLK   #0,CAPTURE_VALUE
          SPLK   #01H,DENUMBER            
          B      CODENOUT2               ;*************************          
FLAGD3:   LACL   DECODE_FLAG             ;原FLAG=3
          BCND   DEFLAGD31,NEQ
          SPLK   #03H,FLAG               ;新FLAG=3  
          SPLK   #8000H,CAPTURE_VALUE
          SPLK   #01H,DENUMBER             
          B      CODENOUT2
DEFLAGD31:SPLK   #00H,FLAG               ;新FLAG=0   
          SPLK   #0,CAPTURE_VALUE
          SPLK   #01H,DENUMBER             
          B      CODENOUT2               ;**************************************8 
INTBYTE:  NOP                            ;DENUMBER=16 
          LDP    #5                      
          SPLK   #0,CAPTURE_VALUE        ;初始CAPTURE_VALUE=0
          SPLK   #00H,DENUMBER           ;初始DENUMBER=0
          LACL   FLAG
          BCND   FLAGD21,NEQ
          LACL   DECODE_FLAG             ;原FLAG=0  
          BCND   DEFLAGD201,NEQ
          SPLK   #01H,FLAG               ;新FLAG=1           
          B      CODENOUT2     
DEFLAGD201:SPLK   #02H,FLAG              ;新FLAG=2  
          B      CODENOUT2               ;**************************
FLAGD21:  SUB    #01H
          BCND   FLAGD22,NEQ             
          LACL   DECODE_FLAG             ;原FLAG=1  
          BCND   DEFLAGD211,NEQ
          SPLK   #01H,FLAG               ;新FLAG=1            
          B      CODENOUT2               
DEFLAGD211:SPLK   #02H,FLAG              ;新FLAG=2  
          B      CODENOUT2               ;*************************
FLAGD22:  SUB    #01H
          BCND   FLAGD23,NEQ
          LACL   DECODE_FLAG             ;原FLAG=2  
          BCND   DEFLAGD221,NEQ
          SPLK   #02H,FLAG               ;新FLAG=2           
          B      CODENOUT2
DEFLAGD221:SPLK   #01H,FLAG              ;新FLAG=1  
          B      CODENOUT2               ;*************************          
FLAGD23:  LACL   DECODE_FLAG             ;原FLAG=3
          BCND   DEFLAGD231,NEQ
          SPLK   #02H,FLAG               ;新FLAG=2          
          B      CODENOUT2  
DEFLAGD231:SPLK  #01H,FLAG               ;新FLAG=1 
          B      CODENOUT2               ;*************************  
CODENOUT2:LDP    #5
          SPLK   #0,DECODE_FLAG                
          B      GONEXT5          
******************校验************************          
CHECK:    LDP     #5   
          LACL    RXD_BYTES
          SUB     #03H   
          BCND    RXDEND,LT
          NOP
          NOP
          LACL    RXD_BYTES
          SUB     #02H   
          LDP     #4
          SACL    NUMBER_OF_BYTES
          LACL    #ADDR_CAPTURE
          SACL    ADR_DATABYTES
          CALL    CRC16  
          LDP     #5      
          LACL    #ADDR_CAPTURE
          ADD     RXD_BYTES
          SUB     #01H
          SACL    TEMP
          LAR     AR4,TEMP
          MAR     *,AR4
          LACL    *-
          RPT     #07H
          SFL     
          OR      *   
          SACL    TEMP
          LDP     #4
          SUB     CURRENT_CRC_VALUE
          BCND    RXDEND,NEQ          
          NOP
          NOP   
LIGHT:    LDP      #4
          SPLK    #01H,RESPONCE_FLAG  
SERROR:   LDP     #5
	SPLK    #0,CAPTURE_TEMP  
RXDEND:   NOP    
          RET    
***************;保存接收数据到指定位置**                 
SAVE_DATA:LDP     #5
          LACL    RXD_BYTES
          LAR     AR3,#_viccdata
          MAR     *,AR3
          SACL    *+             
          LAR     AR6,RXD_BYTES
          MAR     *,AR6
          SBRK    #01H
          LAR     AR4,#ADDR_CAPTURE           
MOVE_ON:  MAR     *,AR4
          LACL    *+,AR3
          SACL    *+,AR6
          BANZ    MOVE_ON            
          NOP
          NOP   
          RET      
;***********************************************************  
;子程序CRC16有两个参数:NUMBER_OF_BYTES(进行CRC运算的字节个数
; 和ADR_DATABYTES(进行CRC运算的数据的首地址) 
*************************************************************
CRC16:LDP     #4          
      LACL    NUMBER_OF_BYTES  
      BCND    IOUT,EQ       
      NOP
      NOP
      SUB     #0FFH
      BCND    IOUT,GT     
      NOP
      NOP
      SPLK    #8408H,POLYNOMIAL
      SPLK    #0FFFFH,PRESET_VALUE
      SPLK    #0F0B8H,CHECK_VALUE
      SPLK    #01H,CALC_CRC
      SPLK    #0,CHECK_CRC    
      LACL   PRESET_VALUE
      SACL   CURRENT_CRC_VALUE
      SPLK   #0,I           
      SPLK   #0,J
      LAR    AR1,ADR_DATABYTES  
ICYCLE:
      MAR    *,AR1
      LACL   *+
      XOR    CURRENT_CRC_VALUE
      SACL   CURRENT_CRC_VALUE    
JCYCLE:
      LACL   CURRENT_CRC_VALUE  
      AND    #01H
      SUB    #01H
      BCND   ANOTHER,NEQ 
      NOP
      NOP
      LACL   CURRENT_CRC_VALUE  
      SFR
      XOR    POLYNOMIAL
      SACL   CURRENT_CRC_VALUE  
      B      NEXT
ANOTHER: 
      LACL   CURRENT_CRC_VALUE 
      SFR
      SACL   CURRENT_CRC_VALUE       
      NOP        
NEXT:LACL    J
     ADD     #01H
     SACL    J
     SUB     #08H
     BCND    JOUT,EQ         
     NOP
     NOP
     B       JCYCLE   
JOUT:SPLK    #0,J 
     LACL    I
     ADD     #01H
     SACL    I
     SUB     NUMBER_OF_BYTES
     BCND    IOUT,EQ         
     NOP
     NOP
     B       ICYCLE   
IOUT: NOP   
      LACL   #0FFFFH
      SUB    CURRENT_CRC_VALUE
      SACL   CURRENT_CRC_VALUE      
      RET    
;***********************************************************
**************接收射频卡的返回信号*************************              
JUDGE_LEVEL:        
        NOP
        KICK_DOG   
        LAR      AR4,#H0
        MAR      *,AR4
        RPT      #10
        BLPD     #H_TBL,*+            ;initialize h0,h1,...,h10,done
        LAR      AR4,#10
        LAR      AR6,#X10
        MAR      *,AR6
GO:     SPLK     #0,*+,AR4
        BANZ     GO,AR6             ;zero x0,x1,...,x10 
        NOP
        NOP                  
        LDP      #5        
        SPLK     #0,RXD_BYTES 
        SPLK     #0,STAGE
        SPLK     #0,ADTEMP3 
        SPLK     #1,ADTEMP2 
        SPLK     #1,ADTEMP1
        SPLK     #0,ADNUMBER  
        LAR      AR6,#08A00H           ;AR6中为某一电平的采样个数的存放地址
        LAR      AR3,#8800H            ;FIR滤波后的数据
************采样********************** 
FSAMPLE:     
        LDP      #DP_PF2
        SPLK     #0030H,ADCCTRL1
        SPLK     #6000H,ADCCTRL2 
        SPLK     #0CH,CHSELSEQ1
        SPLK     #0,MAXCONV   
        CLRC     SXM         
        LDP      #5  
        LACL     ADTEMP2
        SACL     ADTEMP1  
        LACL     ADTEMP3
        ADD      #01H
        SACL     ADTEMP3      
        LACL     ADNUMBER
        ADD      #01H
        SACL     ADNUMBER  
        LACL     ADTEMP3
        SUB      #0110H   
        BCND     BEG_JIEMA,GT
**************     	
        NOP
        NOP       
        LDP      #DP_PF2   
        LACL     RESULT0      ;装载转换结果(10bit,RESULT0.0-5为保留位)到ACC
        RPT      #5
        SFR         
        LDP       #5
        SACL      ADCURRENT
**************** FIR滤波程序****************************
FIR:    LACL      ADCURRENT   ;read new data of x(n) from DM    
        LDP       #0
        sacl      X10         ;renew data from lower addr
                lacl #0
                lt  X0
                mpy H10
                ltd X1
                mpy H9
                ltd X2
                mpy H8
                ltd X3
                mpy H7
                ltd X4
                mpy H6
                ltd X5
                mpy H5
                ltd X6
                mpy H4
                ltd X7
                mpy H3
                ltd X8
                mpy H2
                ltd X9
                mpy H1
                ltd X10
                mpy H0
                apac              ;fir computed  
                SACH  FILTED_DATA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                
****************计算高低电平的判决门限******** 
                LDP  #5
                LACL ADNUMBER
                SUB  NUM_PRESAM 
                BCND JUDGE_HL,GT     ;采样点数多于100H时,可以进行高低电平的判决         

⌨️ 快捷键说明

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