📄 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 + -