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

📄 fangqu_v3.asm

📁 循环读取八个通道的电压值
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        MOVWF    SEND_CHECKSUM          ;CHECKSUM
SEND_FRAMEHEAD2:
        BSF      FLAG,FRAME_HEAD
        MOVLW    0xAA
        MOVWF    SENDBUF
        CALL     SEND
        BCF      FLAG,FRAME_HEAD
        MOVLW    0x05
        MOVWF    TEMP_LENGTH
        MOVLW    0x51
        MOVWF    FSR
SEND_LOOP2:
        NOP
        NOP
        NOP
        MOVF     INDF,0   
        MOVWF    SENDBUF
        CALL     SEND
        INCF     FSR,1
        BCF      FLAG,FRAME_HEAD
        ;NOP
        ;CALL     DELAY2
        DECFSZ   TEMP_LENGTH,1
        GOTO     SEND_LOOP2 
        MOVLW    0x28
        MOVWF    TEMP_LENGTH
        MOVLW    0xA6
        MOVWF    FSR
SEND_LOOP3:        
        MOVF     INDF,0   
        MOVWF    SENDBUF
        CALL     SEND
        INCF     FSR,1
        NOP
        BCF      FLAG,FRAME_HEAD
        NOP
        NOP
        ;CALL     DELAY2
        DECFSZ   TEMP_LENGTH,1
        GOTO     SEND_LOOP3        
        NOP
        MOVF     SEND_CHECKSUM,0
        MOVWF    SENDBUF
        CALL     SEND
        NOP
        NOP
        NOP
        BCF      FLAG,FRAME_HEAD
        ;CALL     DELAY2
        NOP
        NOP
        NOP
        NOP
        MOVF     SEND_ENDCHAR,0
        MOVWF    SENDBUF
        CALL     SEND
        NOP
        NOP

MSG_ENC2:
        BTFSS    FLAG,MSG_LONG
        GOTO     MSG_ENC_NEXT1
        MOVLW    0x2C
        SUBWF    RECE_LENGTH,0
        MOVWF    SEND_LENGTH
        MOVWF    TEMP_LENGTH
        MOVWF    CHECKSUM
        MOVLW    0x03
        MOVWF    PACKET_NUM
        MOVLW    0x10
        XORWF    CHECKSUM,1
        MOVLW    0xCE
        MOVWF    TEMPADDR2           
        GOTO     MSG_ENC_NEXT2                    
MSG_ENC_NEXT1:
        MOVLW    0x04
        SUBWF    RECE_LENGTH,0
        MOVWF    SEND_LENGTH
        MOVWF    TEMP_LENGTH
        MOVWF    CHECKSUM
        MOVLW    0x02
        MOVWF    PACKET_NUM
        MOVLW    0x10
        MOVWF    SEND_COMD
        XORWF    CHECKSUM,1
        MOVLW    0xA6
        MOVWF    TEMPADDR2
        ;BANK1->BANK0(Address:0x56-0x7D),and checksum
MSG_ENC_NEXT2:        
        MOVLW    0x56
        MOVWF    TEMPADDR1
MSG_SHIFT1: 
        MOVF     TEMPADDR2,0
        MOVWF    FSR 
        MOVF     INDF,0
        MOVWF    TEMP
        MOVF     TEMPADDR1,0 
        MOVWF    FSR
        MOVF     TEMP,0
        MOVWF    INDF                ;BANK1->BANK0
        XORWF    CHECKSUM,1
        INCF     TEMPADDR2,1
        INCF     TEMPADDR1,1
        DECFSZ   TEMP_LENGTH,1
        GOTO     MSG_SHIFT1
        MOVF     CHECKSUM,0
        MOVWF    SEND_CHECKSUM       ;CHECKSUM
SEND_FRAMEHEAD3:
        BSF      FLAG,FRAME_HEAD
        MOVLW    0xAA
        MOVWF    SENDBUF
        CALL     SEND
        NOP
        NOP
        BCF      FLAG,FRAME_HEAD
        NOP
SEND_MSG2:
        MOVLW    0x2F
        MOVWF    TEMP_LENGTH
        MOVLW    0x51
        MOVWF    FSR
SEND_LOOP4:
        MOVF     INDF,0   
        MOVWF    SENDBUF
        CALL     SEND
        INCF     FSR,1
        BCF      FLAG,FRAME_HEAD
        ;NOP
        ;CALL     DELAY2
        DECFSZ   TEMP_LENGTH,1
        GOTO     SEND_LOOP4 
SENDSYN_END:
        NOP
        NOP 
        CLRF     FLAG
        CLRF     RECE_LENGTH 
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank1
        BSF     PIE1,RCIE      ;Enable receive interrupts
        BCF     STATUS,RP0     ;Bank0
        BSF     RCSTA,CREN     ;Enable UART receive
        NOP
        NOP
        RETURN

        
SEND:
        ;BSF     PORTB,4     ;RFS0 = 1
        BSF     PORTB,5     ;RFCLK0 = 1
        BTFSC	FLAG,FRAME_HEAD
        BSF     PORTB,4     ;RFS0 = 1
        NOP
        NOP     
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        BCF     PORTB,5     ;RFCLK0 = 0
        NOP
        NOP
        NOP
        NOP     
        NOP
        NOP
        NOP
        NOP
        NOP
        MOVLW   0x08
        MOVWF   SENDBIT
        BCF     STATUS,C
        NOP
        BCF     PORTB,4     ;RFS0 = 0
SEND11:
        BSF     PORTB,5     ;RFCLK0 = 1
        RLF     SENDBUF,1
        BTFSC   STATUS,C
        BSF     PORTB,2
        BTFSS   STATUS,C
        BCF     PORTB,2
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        BCF     PORTB,5     ;RFCLK0 = 0
        NOP
        NOP
        NOP
        NOP     
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        DECFSZ  SENDBIT,1
        GOTO    SEND11
        NOP
        BSF     PORTB,5     ;RFCLK0 = 1
        BCF     PORTB,2
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP     
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        BCF     PORTB,5     ;RFCLK0 = 0
        RETURN

;**************************************
ADC:	
	BSF	STATUS,RP0	;BANK1
	MOVLW	0		
	MOVWF	ADCON1	
	MOVLW	0FF		
	MOVWF	TRISA	
	BCF		STATUS,RP0	;BANK0
	MOVLW	0A1		
	MOVWF	ADCON0	
	CALL	DELAY	
	BSF		ADCON0,GO	
	CALL	DELAY	
	RETURN

;**************Delay     Function****************
DELAY:
	MOVLW	0X88
	MOVWF	WAIT2	
LOOP0:	
	DECFSZ	WAIT1,1
	GOTO	LOOP0
        MOVLW	0X88
	MOVWF	WAIT1
	DECFSZ	WAIT2,1
	GOTO	LOOP0
	RETURN

DELAY1:
        MOVLW   0x05
        MOVWF   WAIT4
        MOVLW   0x64
        MOVWF	WAIT3
LOOP1:	
	    DECFSZ	WAIT3,1
	    GOTO	LOOP1
	    MOVLW   0x64
        MOVWF	WAIT3
    	DECFSZ	WAIT4,1
	    GOTO	LOOP1
	    RETURN  

DELAY2:
        MOVLW   0xC8
        MOVWF   WAIT6
        MOVLW   0xC8
        MOVWF	WAIT5
LOOP2:	
	    DECFSZ	WAIT5,1
	    GOTO	LOOP2
	    MOVLW   0xC8
        MOVWF	WAIT5
    	DECFSZ	WAIT6,1
	    GOTO	LOOP2
	    RETURN 

;----- Interrupt Server   Function-------------------------------------
INT_SER:
        PUSH_MACRO 
        
        BCF    STATUS,RP0       ;Bank0
        BTFSC  PIR1,RCIF        ;Receive interrupt
        GOTO   RX_INT           
        NOP
        NOP
        GOTO   END_ISR
        
 ;-----Receive Interrupt Process-------------------
RX_INT:        
        MOVF   RCREG,0
        MOVF   RCREG,0
        BCF    RCSTA,CREN
        BSF    RCSTA,CREN
        
        MOVWF  TEMP
        BTFSC  FLAG,RXD_START
        GOTO   RECE_START_PROC
JUDGE_HEAD:
        NOP
        NOP
        BCF    STATUS,Z
        SUBLW  0xAA
        BTFSS  STATUS,Z
        GOTO   JUDGE_HEAD1        ;Not equal to 0xAA
        ;----- Equal to 0xAA
        MOVLW  0x01
        MOVWF  RECE_BYTE
        GOTO   END_ISR
JUDGE_HEAD1:
        MOVLW  0x01
        BCF    STATUS,Z
        SUBWF  RECE_BYTE
        BTFSS  STATUS,Z          
        GOTO   JUDGE_HEAD2       ;RECE_BYTE is not equal to 1
        ;RECE_BYTE is equal to 1
        MOVF   TEMP,0
        BCF    STATUS,Z
        SUBLW  0x55
        BTFSS  STATUS,Z
        GOTO   JUDGE_HEAD2       ; Received data is not equal to 0x55
        ; Received data is equal to 0x55
        BSF    FLAG,RXD_START    ;Set RXD_START flag
        BCF    FLAG,LEN_OK 
        MOVLW  0x02
        MOVWF  RECE_BYTE         ;RECE_BYTE = 0x02
        MOVLW  0xA2              ;RECE_LENGTH address
        MOVWF  FSR
        CLRF   CHECKSUM
        GOTO   END_ISR
JUDGE_HEAD2:
        CLRF   RECE_BYTE
        GOTO   END_ISR

RECE_START_PROC:
        MOVWF   INDF
JUDGE_LENGTH:
        BTFSC   FLAG,LEN_OK
        GOTO    LENGTH_OK
        ;Judge length 
        SUBLW   0x40             ;Max value of RECE_LENGTH is 0x40(64)
        BTFSS   STATUS,C
        GOTO    LENGTH_ERR
        
        BSF     FLAG,LEN_OK
        MOVF    TEMP,0
        MOVWF   RECE_LENGTH
        MOVLW   0x02
        ADDWF   RECE_LENGTH,0
        MOVWF   RECE_LENGTH1
        MOVLW   0x03
        ADDWF   RECE_LENGTH,0
        MOVWF   RECE_LENGTH2
        
LENGTH_OK:      
        INCF    FSR
        INCF    RECE_BYTE,1

SSOS1:
        MOVF    RECE_LENGTH1,0
        SUBWF   RECE_BYTE,0
        BTFSS   STATUS,C         
        GOTO    SSOS2            ;(RECE_BYTE)<(RECE_LENGTH1), c = 0 ,z = 0, checksum
        BTFSS   STATUS,Z         ;(RECE_BYTE)=(RECE_LENGTH1), c = 1, z = 1,checksum
        GOTO    SSOS3            ;(RECE_BYTE)>(RECE_LENGTH1), c = 1, z = 0,not checksum
SSOS2: 
       MOVF    TEMP,0
       XORWF   CHECKSUM,1   ;Checksum
       GOTO    END_ISR 
SSOS3:
       MOVF    RECE_LENGTH2,0
       SUBWF   RECE_BYTE,0                            
       BTFSS   STATUS,Z 
       GOTO    END_STA_PROC
       MOVF    TEMP,0
       MOVWF   REC_CRC
       GOTO    END_ISR 
END_STA_PROC:
       BCF    FLAG,RXD_START
       BCF    FLAG,LEN_OK
       CLRF   RECE_BYTE
RECE_OVER_PROC:
       ;Judge  checksum 
       MOVF   CHECKSUM,0
       SUBWF  REC_CRC,0
       BTFSS  STATUS,Z
       GOTO   RECE_ERROR
       MOVLW  0x10
       SUBWF  RECE_COMD,0
       BTFSS  STATUS,Z
       GOTO   RECE_ERROR
       MOVLW   0x06
       MOVWF   ACK_DISPLAY
       BSF     FLAG,MSG_SEND     ;MSG_SEND = 1,to send messages to dsp
       GOTO    SEND_ACK
RECE_ERROR:
       MOVLW   0x16
       MOVWF   ACK_DISPLAY
       BCF     FLAG,MSG_SEND     ;MSG_SEND = 0,not to send messages to dsp
       
        ;-----Send ACK 
SEND_ACK:
        BSF     PORTC,5      ;Enable send
        CALL    DELAY1
        NOP
        NOP     
        MOVLW   0xAA
        MOVWF   TXREG
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank1
NEXT1:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT1
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVLW   0x55
        MOVWF   TXREG
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank1
NEXT2:
        BTFSS  TXSTA,TRMT
        GOTO   NEXT2 
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVLW   0x06
        MOVWF   TXREG
        MOVWF   CHECKSUM
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT3:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT3
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVLW   0xA1
        MOVWF   FSR
        MOVF    INDF,0
        MOVWF   TXREG
        XORWF   CHECKSUM,1   ;Checksum
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT4:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT4
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVLW   0xA2
        MOVWF   FSR
        MOVF    INDF,0
        MOVWF   TXREG
        XORWF   CHECKSUM,1    ;Checksum
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT5:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT5
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVLW   0x20
        MOVWF   TXREG
        XORWF   CHECKSUM,1   ;Checksum
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT6:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT6
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVLW   0x10
        MOVWF   TXREG
        XORWF   CHECKSUM,1   ;Checksum
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT7:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT7
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVF    ACK_DISPLAY,0
        MOVWF   TXREG
        XORWF   CHECKSUM,1    ;Checksum
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT8:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT8
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVF    CHECKSUM,0
        MOVWF   TXREG
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT9:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT9
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        MOVLW   0xED
        MOVWF   TXREG
        NOP
        NOP
        BSF     STATUS,RP0     ;Bank 1
NEXT10:
        BTFSS   TXSTA,TRMT
        GOTO    NEXT10    
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank 0
        CALL    DELAY1
        BCF     PORTC,5        ;Disable send
        GOTO    END_ISR
LENGTH_ERR:
       BCF     FLAG,MSG_SEND
       BCF     FLAG,RXD_START
       BCF     FLAG,LEN_OK
       CLRF    RECE_BYTE
       
END_ISR:
       POP_MACRO 
       RETFIE

;***************************************
	END

⌨️ 快捷键说明

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