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

📄 fangqu_v3.asm

📁 循环读取八个通道的电压值
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;BANK0  Address:0x20-0x4F    variable register
;              :0x50-0x7F    for save messages to be sent to DSP                 
;BANK1  Address:0xA0-0xFF    for save messages sent by the decorder
#include <p16f876A.inc>
WAIT1		    EQU	    20	   ;延时内循环寄存器
WAIT2		    EQU	    21	   ;延时外循环寄存器
WAIT3		    EQU	    22	   ;延时内循环寄存器
WAIT4	      	EQU     23	   ;延时外循环寄存器
WAIT5		    EQU	    24	   ;延时内循环寄存器
WAIT6	   	    EQU	    25	   ;延时外循环寄存器


REGEST1		    EQU	    26	   ;防区1-防区8正常状态/普通报警状态
REGEST2		    EQU	    27	   ;防区1-防区8的TAMPER状态
SAMPLE		    EQU	    28	   ;暂时存放防区1--防区8的采样结果

SENDBIT         EQU     2A
SENDBUF         EQU     2B

RECE_LENGTH1    EQU     2D      
RECE_LENGTH2    EQU     2E  
TEMP_LENGTH     EQU     2F 

RECE_LENGTH     EQU     30
TEL_NUMH        EQU     31
TEL_NUML        EQU     32
RECE_COMD       EQU     33
TEMPADDR1       EQU     34
TEMPADDR2       EQU     35

W_TEMP          EQU     36
STATUS_TEMP     EQU     37
TEMP            EQU     38
FLAG            EQU     39
RECE_BYTE       EQU     40
REC_CRC         EQU     41
ACK_DISPLAY     EQU     42
CHECKSUM        EQU     43

FRAME_SYNCHAR1  EQU     50
FRAME_SYNCHAR2  EQU     51
SEND_LENGTH     EQU     52
PACKET_COUNT    EQU     53
PACKET_NUM      EQU     54
SEND_COMD       EQU     55
SEND_CHECKSUM   EQU     7E
SEND_ENDCHAR    EQU     7F



;----- FLAG Bits --------------------------------------------------------
MSG_SEND        EQU     7
RXD_START	    EQU     6
LEN_OK          EQU     5
MSG_LONG        EQU     4        ;MSG_LONG=1,long messages,MSG_LONG=0,short messages
FRAME_HEAD      EQU     3
SENSOR_STATUS   EQU     1        ;SENSOR_STATUS=1,the sensor is connected;SENSOR_STATUS=0,the sensor is not connected
TEMPER_STATUS   EQU     0        ;TEMPER_STATUS=1,alarm;TEMPER_STATUS=0,not alarm


;----- MACRO  DEFINITION --------------------------------------
PUSH_MACRO  MACRO         ; This Macro Saves register contents
       MOVWF W_TEMP          ; Copy W to a Temporary Register
                             ; regardless of current bank
       SWAPF STATUS,W        ; Swap STATUS nibbles and place
                             ; into W register
       MOVWF STATUS_TEMP     ; Save STATUS to a Temporary register
                             ; in Bank0
    ENDM                     ; End this Macro

POP_MACRO  MACRO          ; This Macro Restores register contents
       SWAPF STATUS_TEMP,W   ; Swap original STATUS register value
                             ; into W (restores original bank)
       MOVWF STATUS          ; Restore STATUS register from
                             ; W register
       SWAPF W_TEMP,F        ; Swap W_Temp nibbles and return
                             ; value to W_Temp
       SWAPF W_TEMP,W        ; Swap W_Temp to W to restore original
                             ; W value without affecting STATUS
    ENDM                     ; End this Macro
;-----------------------------------------------------------------

	    org	    00h
	goto	START
        org     04h
	goto    INT_SER
	    org	    20h
START:
	BSF	    STATUS,RP0    ;BANK1
	MOVLW	0xFF
	MOVWF	TRISA
	MOVLW	0xC0 
	MOVWF	TRISB
	MOVLW	0x80          ;10000000
	MOVWF	TRISC

    BCF	    STATUS,RP0    ;BANK0
	CLRF	PORTA
    CLRF	PORTB
    MOVLW   0xC1          ;1100 0001  
    MOVWF	PORTC
       
;*************Variable initializtion***************  
    CLRF    REGEST1		  ;防区1-防区8正常状态/普通报警状态
    CLRF    REGEST2		  ;防区1-防区8的TAMPER状态
    CLRF    SAMPLE	      ;暂时存放防区1--防区8的采样结果
    CLRF    SENDBIT       
    CLRF    SENDBUF       

    CLRF    RECE_LENGTH1          
    CLRF    RECE_LENGTH2    
    CLRF    TEMP_LENGTH      
    CLRF    W_TEMP
    CLRF    STATUS_TEMP
    
    CLRF    REC_CRC
    CLRF    TEMP
    CLRF    FLAG
    CLRF    CHECKSUM
    CLRF    ACK_DISPLAY
    CLRF    RECE_COMD
    CLRF    RECE_BYTE
    CLRF    RECE_LENGTH
    CLRF    TEL_NUMH
    CLRF    TEL_NUML   
               
        ;UART initializtion
        BSF     STATUS,RP0     ;Bank1
        MOVLW   0x40           ;Baud rate = 9615
        MOVWF   SPBRG
        
        BCF     STATUS,RP0     ;Bank 0
        CLRF    RCSTA
        BSF     RCSTA,SPEN
        CLRF    PIR1
        
        BSF     STATUS,RP0     ;Bank1
        CLRF    TXSTA
        BSF     TXSTA,TXEN
        BSF     TXSTA,BRGH
        
        BCF     STATUS,RP0     ;Bank 0
        BSF     RCSTA,CREN
        
        BSF     STATUS,RP0     ;Bank1
        BCF     PIE1,TXIE      ;Disable transmit interrupts
        BSF     PIE1,RCIE      ;Enable receive interrupts
        BSF     INTCON,PEIE
        BSF     INTCON,GIE
        
        BCF     STATUS,RP0     ;Bank0
        NOP
        NOP
        NOP
        NOP 
  	
;************************************
MAIN:
	CALL	MANAGE1	;查看防区1,通道AN4
	NOP
	CALL	MANAGE2	;查看防区2,通道AN4
	NOP
	CALL	MANAGE3	;查看防区3,通道AN4
	NOP
	CALL	MANAGE4	;查看防区4,通道AN4
	NOP
	CALL	MANAGE5	;查看防区5,通道AN4
	NOP
	CALL	MANAGE6	;查看防区6,通道AN4
	NOP
	CALL	MANAGE7	;查看防区7,通道AN4
	NOP
	CALL	MANAGE8	;查看防区8,通道AN4
	NOP
	CALL	SENDSYN ;通过同步串口,发送数据到DSP
	GOTO	MAIN
		

;**********************************************		
MANAGE1:			;查看防区1,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BCF	PORTC,1		;4051选择通道0
	BCF	PORTC,2		;4051选择通道0
	BCF	PORTC,3		;4051选择通道0
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区1采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS     
	GOTO	QQ1_1
	BCF		REGEST1,0
	GOTO	QQ1_2
QQ1_1:		
	BSF		REGEST1,0
QQ1_2:		
	BTFSC	FLAG,TEMPER_STATUS 
	GOTO	QQ1_3
	BCF		REGEST2,0
	GOTO	QQ1_4			
QQ1_3:	
	BSF	REGEST2,0	
QQ1_4:	
	RETURN
;**************************************
MANAGE2:		;查看防区2,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BCF	PORTC,1		;4051选择通道1
	BCF	PORTC,2		;4051选择通道1
	BSF	PORTC,3		;4051选择通道1
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区2采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS
	GOTO	QQ2_1
	BCF		REGEST1,1
	GOTO	QQ2_2
QQ2_1:		
	BSF		REGEST1,1
QQ2_2:		
	BTFSC	FLAG,TEMPER_STATUS 
	GOTO	QQ2_3
	BCF		REGEST2,1
	GOTO	QQ2_4			
QQ2_3:	
	BSF	REGEST2,1	
QQ2_4:
	RETURN
;**************************************
MANAGE3:		;查看防区3,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BCF	PORTC,1		;4051选择通道3
	BSF	PORTC,2		;4051选择通道3
	BCF	PORTC,3		;4051选择通道3
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区3采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS
	GOTO	QQ3_1
	BCF		REGEST1,2
	GOTO	QQ3_2
QQ3_1:		
	BSF		REGEST1,2
QQ3_2:		
	BTFSC	FLAG,TEMPER_STATUS 
	GOTO	QQ3_3
	BCF		REGEST2,2
	GOTO	QQ3_4			
QQ3_3:	
    BSF	    REGEST2,2	
QQ3_4:
	RETURN
;************************************
MANAGE4:		;查看防区4,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BCF	PORTC,1		;4051选择通道4
	BSF	PORTC,2		;4051选择通道4
	BSF	PORTC,3		;4051选择通道4
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区4采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS
	GOTO	QQ4_1
	BCF		REGEST1,3
	GOTO	QQ4_2
QQ4_1:		
	BSF		REGEST1,3
QQ4_2:		
	BTFSC	FLAG,TEMPER_STATUS
	GOTO	QQ4_3
	BCF		REGEST2,3
	GOTO	QQ4_4			
QQ4_3:	
	BSF	REGEST2,3	
QQ4_4:
	RETURN
;***********************************
MANAGE5:		;查看防区5,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BSF	PORTC,1		;4051选择通道5
	BCF	PORTC,2		;4051选择通道5
	BCF	PORTC,3		;4051选择通道5
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区5采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS
	GOTO	QQ5_1
	BCF		REGEST1,4
	GOTO	QQ5_2
QQ5_1:		
	BSF		REGEST1,4
QQ5_2:		
	BTFSC	FLAG,TEMPER_STATUS
	GOTO	QQ5_3
	BCF		REGEST2,4
	GOTO	QQ5_4			
QQ5_3:	
	BSF	    REGEST2,4	
QQ5_4:	
	RETURN
;************************************
MANAGE6:		;查看防区6,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BSF	PORTC,1		;4051选择通道6
	BCF	PORTC,2		;4051选择通道6
	BSF	PORTC,3		;4051选择通道6
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区6采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS
	GOTO	QQ6_1
	BCF		REGEST1,5
	GOTO	QQ6_2
QQ6_1:		
	BSF		REGEST1,5
QQ6_2:		
	BTFSC	FLAG,TEMPER_STATUS
	GOTO	QQ6_3
	BCF		REGEST2,5
	GOTO	QQ6_4			
QQ6_3:	
	BSF	    REGEST2,5	
QQ6_4:
	RETURN
;**************************************
MANAGE7:		;查看防区7,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BSF	PORTC,1		;4051选择通道7
	BSF	PORTC,2		;4051选择通道7
	BCF	PORTC,3		;4051选择通道7
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区7采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS
	GOTO	QQ7_1
	BCF		REGEST1,6
	GOTO	QQ7_2
QQ7_1:		
	BSF		REGEST1,6
QQ7_2:		
	BTFSC	FLAG,TEMPER_STATUS
	GOTO	QQ7_3
	BCF		REGEST2,6
	GOTO	QQ7_4			
QQ7_3:	
	BSF	REGEST2,6	
QQ7_4:	
	RETURN
;*************************************
MANAGE8:		;查看防区8,通道AN4
	BCF	STATUS,RP0	;BANK0
	BSF	PORTC,0		;4051禁止
	BSF	PORTC,1		;4051选择通道8
	BSF	PORTC,2		;4051选择通道8
	BSF	PORTC,3		;4051选择通道8
    BCF	PORTC,0		;4051选通
	CALL	ADC
	MOVF	ADRESH,0
	MOVWF	SAMPLE		;防区8采样结果
	CALL	MANAGE
	BTFSC	FLAG,SENSOR_STATUS
	GOTO	QQ8_1
	BCF		REGEST1,7
	GOTO	QQ8_2
QQ8_1:		
	BSF		REGEST1,7
QQ8_2:		
	BTFSC	FLAG,TEMPER_STATUS
	GOTO	QQ8_3
	BCF		REGEST2,7
	GOTO	QQ8_4			
QQ8_3:	
    BSF	    REGEST2,7	
QQ8_4:	
	RETURN
;*******************************
MANAGE:
	MOVLW	43
	SUBWF	SAMPLE,0
	BTFSC	STATUS,C
	GOTO	MM1
    BSF		FLAG,SENSOR_STATUS
	BSF		FLAG,TEMPER_STATUS        ;SAMPLE < 43 ,short circuit alarm
	GOTO	MM4
MM1:
	MOVLW	63
	SUBWF	SAMPLE,0
	BTFSC	STATUS,C
	GOTO	MM2
	BSF		FLAG,SENSOR_STATUS
	BCF		FLAG,TEMPER_STATUS       ;43 < =SAMPLE < 63,the sensor is connected,not alarm
  	GOTO	MM4
MM2:
	MOVLW	97
	SUBWF	SAMPLE,0
	BTFSC	STATUS,C
	GOTO	MM3
	BCF		FLAG,SENSOR_STATUS
	BCF		FLAG,TEMPER_STATUS       ;63 < =SAMPLE < 97,the sensor is unconnected,not alarm
	GOTO	MM4	
MM3:
	BCF		FLAG,SENSOR_STATUS
	BSF		FLAG,TEMPER_STATUS       ;SAMPLE >= 97 ,open circuit alarm
MM4:	
	RETURN	


;*************SSP  Process Function*************	
SENDSYN:
        NOP
        NOP
        BCF     STATUS,RP0     ;Bank0
        BCF     RCSTA,CREN     ;Disable UART receive
        BSF     STATUS,RP0     ;Bank1
        BCF     PIE1,RCIE      ;Disable receive interrupts
        BCF     STATUS,RP0     ;Bank0
ALM_MSG_ENC:
        MOVLW   0xAA           
        MOVWF	FRAME_SYNCHAR1    ;FRAME_SYNCHAR1
        MOVLW   0x55            
        MOVWF	FRAME_SYNCHAR2    ;FRAME_SYNCHAR2
        MOVLW   0x02
        MOVWF   SEND_LENGTH
        MOVWF   CHECKSUM
        ;Judge the quantity of packet
        BTFSC	FLAG,MSG_SEND
        GOTO    AME_NEXT1  
        MOVLW   0x01
        MOVWF   PACKET_COUNT
        XORWF   CHECKSUM,1 
        GOTO    AME_NEXT3
AME_NEXT1:
        MOVF    RECE_LENGTH,0
        SUBLW   0x2C                  ;0x2C = 44
        BTFSC	STATUS,C
        GOTO    AME_NEXT2
        BSF     FLAG,MSG_LONG         ;Long message
        MOVLW   0x03
        MOVWF   PACKET_COUNT
        XORWF   CHECKSUM,1
        GOTO    AME_NEXT3
AME_NEXT2:
        BCF     FLAG,MSG_LONG         ;short message
        MOVLW   0x02
        MOVWF   PACKET_COUNT
        XORWF   CHECKSUM,1 
AME_NEXT3:
        MOVLW   0x01
        MOVWF   PACKET_NUM
        XORWF   CHECKSUM,1 
        MOVLW   0x80
        MOVWF   SEND_COMD
        XORWF   CHECKSUM,1        
        MOVLW   0x56              
        MOVWF   FSR              ;Address 0x56
        MOVF    REGEST1,0         
        MOVWF   INDF             ;Data1 
        XORWF   CHECKSUM,1 
        INCF    FSR,1            ;Address 0x57
        MOVF    REGEST2,0         
        MOVWF   INDF             ;Data2
        XORWF   CHECKSUM,1
        
        ;Fill   space
        MOVLW   0x26
        MOVWF   TEMP_LENGTH
FILL_LOOP1:
        INCF    FSR,1
        MOVLW   0x00         
        MOVWF   INDF             ;Fill value = 0x00
        DECFSZ  TEMP_LENGTH,1
        GOTO    FILL_LOOP1
        
        MOVLW   0x7E              
        MOVWF   FSR
        MOVF    CHECKSUM,0         
        MOVWF   INDF             ;CHECKSUM
        INCF    FSR,1
        MOVLW   0xED         
        MOVWF   INDF             ;0xED
               
        
       ;Send alarm messages to dsp
SEND_FRAMEHEAD1:
        BSF     FLAG,FRAME_HEAD
        MOVLW   0xAA
        MOVWF   SENDBUF
        CALL    SEND
        NOP
        NOP
        NOP
        BCF     FLAG,FRAME_HEAD
        MOVLW   0x2F
        MOVWF   TEMP_LENGTH     
        MOVLW   0x51
        MOVWF   FSR
SEND_LOOP1:
        MOVF    INDF,0
        MOVWF   SENDBUF
        CALL    SEND
        INCF    FSR
        NOP
        NOP
        BCF     FLAG,FRAME_HEAD
        NOP
        ;CALL    DELAY2
        DECFSZ  TEMP_LENGTH,1
        GOTO    SEND_LOOP1

JUDGE_MSG_SEND:
        BTFSS	FLAG,MSG_SEND
        GOTO    SENDSYN_END     ;No messges to be sent,jump to SENDSYN_END
      
MSG_ENC1:
        BTFSS    FLAG,MSG_LONG
        GOTO     MSG_ENC2      ;The length 0f the Message is less than or equal to 40 bytes- short message
        
        MOVLW    0x28          ;The length 0f the Message is beyond 40 bytes -long message
        MOVWF    SEND_LENGTH
        MOVWF    TEMP_LENGTH
        MOVWF    CHECKSUM
        MOVLW    0x03
        XORWF    CHECKSUM,1
        MOVLW    0x02
        MOVWF    PACKET_NUM
        XORWF    CHECKSUM,1 
        MOVLW    0x10
        MOVWF    SEND_COMD
        XORWF    CHECKSUM,1 
        ;Checksum
        MOVLW    0xA6
        MOVWF    FSR
CHECKSUM_LOOP1:
        MOVF     INDF,0
        XORWF    CHECKSUM,1
        INCF     FSR,1
        DECFSZ   TEMP_LENGTH,1
        GOTO     CHECKSUM_LOOP1
        NOP
        MOVF     CHECKSUM,0

⌨️ 快捷键说明

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