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

📄 20077912523418107.asm

📁 PIC压力测量程序 适用于各种压力测量场合 可用于工业测量
💻 ASM
📖 第 1 页 / 共 2 页
字号:
AD_ROTATE
        RRF     S_ADJ,F         ;ROTATE RIGHT 1 BIT
        DECFSZ  S_ADJ_COUNT,F   ;END ?
        GOTO    AD_ROTATE       ;NO. CONTINUE
        MOVFW   S_ADJ           ;READ ROTATED VALUE
        ANDLW   B'00000111'     ;PICK-UP 3 BITS
        ADDLW   D'54'           ;(0 TO 7) + 54 = 54 TO 61
        MOVWF   S_ADJ           ;SAVE ADJUSTMENT DATA

;*** CAPTURE GUARD TIMER ( 1 MILISECOUND )
        MOVLW   D'2'            ;SET LOOP COUNTER1
        MOVWF   G_TIME1         ;SAVE LOOP COUNTER1
G_LOOP1 MOVLW   D'124'          ;SET LOOP COUNTER2
        MOVWF   G_TIME2         ;SAVE LOOP COUNTER2
G_LOOP2 NOP                     ;TIME ADJUST
        DECFSZ  G_TIME2,F       ;G_TIME2 - 1 = 0 ?
        GOTO    G_LOOP2         ;NO. CONTINUE
        DECFSZ  G_TIME1,F       ;G_TIME1 - 1 = 0 ?
        GOTO    G_LOOP1         ;NO. CONTINUE

;*** RECEIVE PULSE DETECTOR ON
        BSF     PORTA,RA5       ;SET DETECTOR ON

        GOTO    INT_END

;***************  PULSE SEND-OUT PROCESS ****************
PULSE
        MOVLW   B'00010000'     ;RC4=ON
        MOVWF   PORTC           ;SET PORTC REGISTER
        CALL    T12US           ;CALL 12USEC TIMER
        CLRF    PORTC           ;RC4=OFF
        GOTO    $+1
        GOTO    $+1
        NOP
        RETURN

;***************  12 MICROSECONDS TIMER *****************
T12US
        GOTO   $+1
        GOTO   $+1
        GOTO   $+1
        GOTO   $+1
        NOP
        RETURN

;******************  CAPTURE PROCESS ********************
CAPTURE
        BCF     PIR1,CCP1IF     ;CLEAR CCP1 INT FLAG

        CLRF    P_COUNTL        ;CLEAR L COUNT
        CLRF    P_COUNTH        ;CLEAR H COUNT
        CLRF    CCP1CON         ;CCP1 OFF

DIVISION
        MOVFW   S_ADJ           ;READ ADJUSTMENT DATA
        SUBWF   CCPR1L,F        ;CAPTURE - ADJUST
        BTFSC   STATUS,Z        ;RESULT = 0 ?
        GOTO    DIVISION2       ;YES. "R = 0"
        BTFSC   STATUS,C        ;RESULT < 0 ?
        GOTO    DIVISION1       ;NO. "R > 0"
        GOTO    DIVISION3       ;YES."R < 0"

DIVISION1                       ;( R > 0 )
        MOVLW   D'1'            ;SET INCREMENT VALUE
        ADDWF   P_COUNTL,F      ;INCREMENT L COUNT
        BTFSS   STATUS,C        ;OVERFLOW ?
        GOTO    DIVISION        ;NO. CONTINUE
        INCF    P_COUNTH,F      ;INCREMENT H COUNT
        GOTO    DIVISION        ;JUMP NEXT

DIVISION2                       ;( R = 0 )
        MOVFW   CCPR1H          ;READ CCPR1H
        BTFSS   STATUS,Z        ;CCPR1H = 0 ?
        GOTO    DIVISION1       ;NO. NEXT
        MOVLW   D'1'            ;SET INCREMENT VALUE
        ADDWF   P_COUNTL,F      ;INCREMENT L COUNT
        BTFSS   STATUS,C        ;OVERFLOW ?
        GOTO    DIGIT_SET       ;JUMP TO DIGIT SET
        INCF    P_COUNTH,F      ;INCREMENT H COUNT
        GOTO    DIGIT_SET       ;JUMP TO DIGIT SET

DIVISION3                       ;( R < 0 )
        MOVFW   CCPR1H          ;READ CCPR1H
        BTFSS   STATUS,Z        ;CCPR1H = 0 ?
        GOTO    DIVISION4       ;NO. BORROW PROCESS
        GOTO    DIGIT_SET       ;JUMP TO DIGIT SET

DIVISION4
        DECF    CCPR1H,F        ;CCPR1H - 1
        MOVLW   D'255'          ;BORROW VALUE
        ADDWF   CCPR1L,F        ;CCPR1L + 255
        INCF    CCPR1L,F        ;CCPR1L + 1
        GOTO    DIVISION1       ;NEXT

;****************  DIGIT SET PROCESS ********************
DIGIT_SET
        CLRF    DISP_U          ;CLEAR 1ST DIGIT
        CLRF    DISP_T          ;CLEAR 10TH DIGIT
        CLRF    DISP_H          ;CLEAR 100TH DIGIT

;*** 100TH DIGIT
DIGIT_H
        MOVLW   D'100'          ;DIVIDE VALUE
        SUBWF   P_COUNTL,F      ;DIGIT - DIVIDE
        BTFSC   STATUS,Z        ;RESULT = 0 ?
        GOTO    DIGIT_H2        ;YES. "R = 0"
        BTFSC   STATUS,C        ;RESULT < 0 ?
        GOTO    DIGIT_H1        ;NO. "R > 0"
        GOTO    DIGIT_H3        ;YES."R < 0"

DIGIT_H1                        ;( R > 0 )
        INCF    DISP_H,F        ;INCREMENT 100TH COUNT
        GOTO    DIGIT_H         ;JUMP NEXT

DIGIT_H2                        ;( R = 0 )
        MOVFW   P_COUNTH        ;READ H COUNTER
        BTFSS   STATUS,Z        ;H COUNTER = 0 ?
        GOTO    DIGIT_H1        ;NO. NEXT
        INCF    DISP_H,F        ;INCREMENT 100TH COUNT
        GOTO    DIGIT_T         ;JUMP TO 10TH DIGIT PRO

DIGIT_H3                        ;( R < 0 )
        MOVFW   P_COUNTH        ;READ H COUNTER
        BTFSS   STATUS,Z        ;H COUNTER = 0 ?
        GOTO    DIGIT_H4        ;NO. BORROW PROCESS
        MOVLW   D'100'          ;DIVIDE VALUE
        ADDWF   P_COUNTL,F      ;RETURN OVER SUB VALUE
        GOTO    DIGIT_T         ;JUMP TO 10TH DIGIT PRO

DIGIT_H4
        DECF    P_COUNTH,F      ;H COUNTER - 1
        MOVLW   D'255'          ;BORROW VALUE
        ADDWF   P_COUNTL,F      ;L COUNTER + 255
        INCF    P_COUNTL,F      ;L COUNTER + 1
        GOTO    DIGIT_H1        ;NEXT

;*** 10TH DIGIT
DIGIT_T

;*** RANGE OVER CHECK
        MOVFW   DISP_H          ;READ 100TH DIGIT
        SUBLW   D'9'            ;9 - (100TH DIGIT)
        BTFSC   STATUS,Z        ;RESULT = 0 ?
        GOTO    DIGIT_T0        ;YES. "R = 0"
        BTFSC   STATUS,C        ;RESULT < 0 ?
        GOTO    DIGIT_T0        ;NO. "R > 0"
        MOVLW   H'0A'           ;"DETECT ERROR" DATA
        MOVWF   DISP_U          ;SET 1ST DIGIT
        MOVWF   DISP_T          ;SET 10TH DIGIT
        MOVWF   DISP_H          ;SET 100TH DIGIT
        GOTO    INT_END

DIGIT_T0
        MOVLW   D'10'           ;DIVIDE VALUE
        SUBWF   P_COUNTL,F      ;DIGIT - DIVIDE
        BTFSC   STATUS,Z        ;RESULT = 0 ?
        GOTO    DIGIT_T1        ;YES. "R = 0"
        BTFSC   STATUS,C        ;RESULT < 0 ?
        GOTO    DIGIT_T1        ;NO. "R > 0"
        GOTO    DIGIT_T2        ;YES."R < 0"

DIGIT_T1                        ;( R >= 0 )
        INCF    DISP_T,F        ;INCREMENT 10TH COUNT
        GOTO    DIGIT_T         ;JUMP NEXT

DIGIT_T2                        ;( R < 0 )
        MOVLW   D'10'           ;DIVIDE VALUE
        ADDWF   P_COUNTL,F      ;RETURN OVER SUB VALUE
        GOTO    DIGIT_U         ;JUMP TO 1ST DIGIT PRO

;*** 1ST DIGIT
DIGIT_U
        MOVFW   P_COUNTL        ;READ PROPAGETION COUNTER
        MOVWF   DISP_U          ;SAVE 1ST COUNT

        GOTO    INT_END

;****************  LED DISPLAY CONTROL  *****************
LED_CONT
        BCF     PIR1,TMR2IF     ;CLEAR TMR2 INT FLAG

        MOVFW   DIGIT_CNT       ;READ DIGIT COUNTER
        MOVWF   S_DIGIT         ;SAVE DIGIT COUNTER
        DECFSZ  S_DIGIT,F       ;1ST DIGIT ?
        GOTO    D_CHECK1        ;NO. NEXT
        BSF     PORTA,RA1       ;RA1=OFF
        BSF     PORTA,RA2       ;RA2=OFF
        BCF     PORTA,RA3       ;RA3=ON
        GOTO    C_DIGIT         ;JUMP TO DIGIT CONT
D_CHECK1   
        DECFSZ  S_DIGIT,F       ;10TH DIGIT ?
        GOTO    D_CHECK2        ;NO. 100TH DIGIT
        BSF     PORTA,RA1       ;RA1=OFF
        BCF     PORTA,RA2       ;RA2=ON
        BSF     PORTA,RA3       ;RA3=OFF
        GOTO    C_DIGIT         ;JUMP TO DIGIT CONT
D_CHECK2
        BCF     PORTA,RA1       ;RA1=ON
        BSF     PORTA,RA2       ;RA2=OFF
        BSF     PORTA,RA3       ;RA3=OFF

C_DIGIT
        DECF    DIGIT_CNT,W     ;DIGIT COUNT - 1
        ADDWF   DISP_HA,W       ;DIGIT H.ADR + COUNT
        MOVWF   FSR             ;SET FSR REGISTER
        MOVFW   INDF            ;READ DIGIT
        ADDWF   SEG7_HA,W       ;SEG7 H.ADR + DIGIT
        MOVWF   FSR             ;SET FSR REGISTER
        MOVFW   INDF            ;READ SEG7 DATA
        MOVWF   PORTB           ;WRITE LED DATA

        DECFSZ  DIGIT_CNT,F     ;DIGIT COUNT - 1
        GOTO    INT_END         ;JUMP TO INTERRUPT END
        MOVLW   D'3'            ;INITIAL VALUE
        MOVWF   DIGIT_CNT       ;SET INITIAL VALUE
        GOTO    INT_END         ;JUMP TO INTERRUPT END

;********************************************************
;            END OF ULTRASONIC RANGE METER
;********************************************************

        END


⌨️ 快捷键说明

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