?? cx1.asm
字號:
;***********************************************************************
;故障記錄儀程序,用于對被采集信號進行初步分析,判斷合適的量程并進行切換.
;程序名:GZJL.asm
;用PIC16F873/873A/876
;***********************************************************************
INCLUDE "P16F873A.inc"
;---------------------------------------
PUSH MACRO
MOVWF WBUFFER
SWAPF WBUFFER,F
BCF STATUS,RP0
SWAPF STATUS,W
MOVWF STATBUFFER
ENDM
POP MACRO
SWAPF STATBUFFER,W
MOVWF STATUS
SWAPF WBUFFER,W
ENDM
;--------------------------------------
TEMP EQU 20H
TEMP0 EQU 21H
TEMP2 EQU 22H
TEMP3 EQU 23H
PORTB_T EQU 24H
INCH EQU 25H
DWXXBZ EQU 26H
DWKZBZ EQU 27H
CCBZ EQU 28H
DSBZ EQU 29H
COUNT0 EQU 2AH
WBUFFER EQU 2BH
STATBUFFER EQU 2CH
COUNT EQU 2EH
COUNT1 EQU 2FH
DYW EQU 50H
DEW EQU 51H
DSW EQU 52H
SSW EQU 53H
SJCD EQU 54H
KGL EQU 55H
ZLDWXX EQU 56H
ZLDYL EQU 57H
ZLDYH EQU 58H
JLDWXX EQU 59H
JLDYL EQU 5AH
JLDYH EQU 5BH
JSBZ0 EQU 5CH
JSBZ1 EQU 5DH
;-------------------------------------------
ORG 00H
GOTO MAIN
ORG 04H
GOTO INTZ
ORG 10H
;--------------------------------------------------*
MAIN
CALL INITCLEROM
CALL INITPORTS
CALL INITSCI
CALL INITTIMERS
CALL INITAD
BSF INTCON,GIE
MOVLW 01H
MOVWF T1CON ;開定時器1
MOVLW 055H
MOVWF DYW
MOVLW 055H
MOVWF DEW
MOVLW 055H
MOVWF DSW
MOVLW 55H
MOVWF SSW
MOVLW 0DH
MOVWF SJCD
MOVLW 0AAH
MOVWF JSBZ0
MOVLW 0AAH
MOVWF JSBZ1
START
BCF STATUS,RP0 ;BANK0
CLRWDT ;Clear WDT
MOVF CCBZ,W
SUBLW 00H
BTFSS STATUS,2
GOTO MAIN
BTFSS DSBZ,1
GOTO JS1
BCF DSBZ,1
BTFSS PORTC,4
GOTO ZSD
BCF PORTC,4
JS1 BTFSS DSBZ,0
GOTO START
BCF DSBZ,0
MOVF PORTB,W
MOVWF KGL
CALL C_FS
MOVLW 00H
MOVWF INCH
CALL ADZH ;調用A/D采集和擋位轉換子程序
MOVF ADRESH,W
MOVWF JLDYH
BSF STATUS,RP0
MOVF ADRESL,W
BCF STATUS,RP0
MOVWF JLDYL
MOVF DWXXBZ,F
BTFSC STATUS,Z
GOTO ZLTD
BTFSS DWXXBZ,0
GOTO JLKZ1
MOVF JLDWXX,W
SUBLW 02H
BTFSC STATUS,C
INCF JLDWXX,F
GOTO JLKZ2
JLKZ1 BTFSC DWXXBZ,1
MOVF JLDWXX,F
BTFSS STATUS,Z
DECF JLDWXX,F
JLKZ2 BTFSC JLDWXX,0
BSF PORTC,0
BTFSS JLDWXX,0
BCF PORTC,0
BTFSC JLDWXX,1
BSF PORTC,1
BTFSS JLDWXX,1
BCF PORTC,1
ZLTD MOVLW 01H
MOVWF INCH
CALL ADZH ;調用A/D采集和擋位轉換子程序
MOVF ADRESH,W
MOVWF ZLDYH
BSF STATUS,RP0
MOVF ADRESL,W
BCF STATUS,RP0
MOVWF ZLDYL
MOVF DWXXBZ,F
BTFSC STATUS,Z
GOTO START
BTFSS DWXXBZ,0
GOTO ZLKZ1
MOVF ZLDWXX,W
SUBLW 002H
BTFSC STATUS,C
INCF ZLDWXX,F
GOTO ZLKZ2
ZLKZ1 BTFSC DWXXBZ,1
MOVF ZLDWXX,F
BTFSS STATUS,Z
DECF ZLDWXX,F
ZLKZ2 BTFSC ZLDWXX,0
BSF PORTC,2
BTFSS ZLDWXX,0
BCF PORTC,2
BTFSC ZLDWXX,1
BSF PORTC,3
BTFSS ZLDWXX,1
BCF PORTC,3
; MOVLW 000H
; MOVWF DSBZ
GOTO START
ZSD BSF PORTC,4
GOTO JS1
;--------------------------------------------
ADZH ;AD轉換程序
BTFSS INCH,0
GOTO TD0
BSF ADCON0,3
TD1 CALL YSZCX
BSF ADCON0,2 ;開始A/D采集
MOVLW 00H
MOVWF DWXXBZ ;清除擋位信息標志
LOOP1 BTFSC ADCON0,2
GOTO LOOP1 ;等待A/D轉換完成.
MOVF ADRESH,W
SUBLW 018H
BTFSS STATUS,C
GOTO ZDLC
BSF DWXXBZ,0 ;A/D轉換值太小標志,需增大放大倍數據.
ZDLC MOVF ADRESH,W
SUBLW 0FDH
BTFSS STATUS,C
BSF DWXXBZ,1 ;A/D轉換值太小標志,需增大放大倍數據.
RETFIE
TD0 BCF ADCON0,3
GOTO TD1
;----------------------------------------------------
YSZCX
MOVLW D'20'
MOVWF COUNT1
J1 DECFSZ COUNT1,F
GOTO J1
RETFIE
;--------------------------------------------------
C_FS
MOVLW 0X50
MOVWF FSR
A0 MOVF INDF,W
MOVWF TXREG
INCF FSR,F
DECFSZ COUNT,F
GOTO A1
GOTO SSS
A1 BTFSS PIR1,4
GOTO A1
GOTO A0
SSS
MOVLW 0DH
MOVWF COUNT
RETURN
;----------------------------------------------------
INITCLEROM
BCF STATUS,RP0 ;BANK0
MOVLW 20H ;CLEAR 20H-7FH
MOVWF FSR
CLEAR1 CLRW
MOVWF INDF
INCF FSR,f
MOVF FSR,W
SUBLW 80H
BTFSS STATUS,2 ;ADD=80H?
GOTO CLEAR1
BSF STATUS,RP0 ;BANK1
MOVLW 0A0H ;CLEAR A0H-FFH
MOVWF FSR
CLEAR2 CLRW
MOVWF INDF
INCF FSR,f
MOVF FSR,W
SUBLW 0FFH
BTFSS STATUS,2 ;ADD=0FFH?
GOTO CLEAR2
RETURN
;----------------------------------------*
INITPORTS
BSF STATUS,RP0
MOVLW 07H
MOVWF TRISA ;設置A口低2位為輸入,用于2路電壓采集
MOVLW 0FFH
MOVWF TRISB ;設置B口為開關量信號輸入
MOVLW B'10000000' ;擋位控制輸出
MOVWF TRISC
BCF STATUS,RP0 ;BANK0
CLRF PORTA
CLRF PORTB
MOVLW 010H
MOVWF PORTC
RETURN
;----------------------------------------------------------------
INITSCI
BSF STATUS,RP0 ;BANK1
MOVLW D'3' ;設置波特率
MOVWF SPBRG
MOVLW B'10100100' ;設置 TXSTA
MOVWF TXSTA
BCF PIE1,TXIE ;開發送中斷
BCF STATUS,RP0 ;BANK0
MOVLW B'10000000' ;設置 RCSTA
MOVWF RCSTA
MOVLW 0DH
MOVWF COUNT
RETURN
;-------------------------------------------------*
INITTIMERS ;INT TMR1
BSF STATUS,RP0 ;BANK1
MOVLW B'10000111' ;WDT 1/128 576msX4
MOVWF OPTION_REG
BSF PIE1,0 ;TMR1 INT ON
BCF STATUS,RP0 ;BANK0
MOVLW B'01000000' ;START TMR1
MOVWF INTCON
MOVLW 0B8H ;SET TMR1 DS=10MS
MOVWF TMR1H
CLRF TMR1L
MOVLW D'50'
MOVWF COUNT0
RETURN
;--------------------------------------------------------
INITAD
BSF STATUS,RP0
MOVLW B'00000000'
MOVWF ADCON1
BCF STATUS,RP0
MOVLW 081H
MOVWF ADCON0
RETURN
;-------------------------------------------------
INTZ PUSH
NOP
BSF DSBZ,0 ;SET 10MS DSBZ
DECFSZ COUNT0,F
GOTO DS1
BSF DSBZ,1 ;SET 500MS DSBZ
MOVLW D'50'
MOVWF COUNT0
DS1 MOVLW 0B8H
MOVWF TMR1H
CLRF TMR1L
BCF PIR1,TMR1IF ;CLEAR TMR0 INT
NOP
POP
RETFIE
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -