📄 1550-v01.asm
字号:
BCF PORTB,TXM
BCF PORTB,LED
BCF PORTB,0
CLRF FLAG
CLRF C_TIM
;闪亮四次
CALL LAMP
NOP
CALL LAMP
NOP
CALL LAMP
NOP
CALL LAMP
NOP
;===========================================================
;正常时的处理程序
;===========================================================
START2 CLRWDT
MOVLW 7 ; TIMER: INTERNAL, X, PRESCALER TO RTCC
OPTION ; 1:256
MOVLW B'00000000' ; init port a
TRIS PORTA
BCF PORTA,0
BCF PORTA,1
BCF PORTA,2
BCF PORTA,3
MOVLW B'00011000' ;init port b
TRIS PORTB
BCF PORTB,REL1
BCF PORTB,REL2
BCF PORTB,TXP
BCF PORTB,TXM
BCF PORTB,LED
BCF PORTB,0
;from start2 to here,waste time 17us at 4MHZ
BTFSC PORTB,RXP ; LIN_IN线上 = 1?
GOTO VERI_P ; NO,外面有数据在发送
BTFSC PORTB,RXM ; LIN_OUT = 1?
GOTO VERI_M ; NO
GOTO START2
;校验一下从门口机到芯片之间的LIN线变低时的1/4BIT
VERI_P CALL DEL50 ; 50 uSEC delay,调用花52US
BTFSS PORTB,RXP ; LIN_IN = 0? LIN变低时花2US
GOTO START2 ; NO, 返回START2处
CALL DEL70 ; CONTINUE 70 uSEC DELAY,调用花72US
BTFSS PORTB,RXP ; LIN_IN = 0? LIN低时花掉2US
GOTO START2 ; NO, RETURN
CALL DEL88 ; CONTINUE 88 uS DELAY ,调用花87US
CLRF RTCC ;1US
; 检测一下在25.6MS即三个字节的发送时间内LIN线是否都是低?
VERI_P1 BTFSS PORTB,RXP ; LIN_IN = 0? 1US
GOTO OUT_VERP ; NO 2US
CLRWDT
BSF PORTB,TXM ; LIN_OUT = 0
MOVLW .100 ; VERIFICO SE IL TIMER E' A 25.6 mSEC
SUBWF RTCC,0
BTFSS 3,0 ; C=1 SE RTCC>W
GOTO VERI_P1 ; NO, TIMER < 25.6 mSEC
;如果LIN线入口短路的话程序一直在这里循环
VERI_P2 BCF PORTB,TXM ; LIBERO LINEA MONTANTE
BTFSS PORTB,RXP ; LIN_IN = 0?
GOTO START2 ; NO ,RETURN
CLRWDT
GOTO VERI_P2
OUT_VERP CALL DEL250 ; RITARDO 1/4 BIT
NOP
NOP
NOP
BCF PORTB,TXM ; PORTO A 1 LINEA MONTANTE
GOTO START2
; VERIFICA CHE LA LINEA DA MONTANTE A PIC SIA BASSA PER 1/4 BIT
; lin_out 端的检测
; 检测一下从话机到1550之间的LIN线变低时的1/4BIT状态
VERI_M CLRWDT
CLRF RTCC ; clear TIMER
CALL DEL50 ; 50us delay ,调用花52US
BTFSS PORTB,RXM ; TEST LIN_OUT PORT = 0 ? 2us
GOTO START2 ; NO, RETURN
CALL DEL70 ; CONTINUE 70 uS DELAY 调用花72US
BTFSS PORTB,RXM ; TEST LIN_OUT PORT = 0 ? 2us
GOTO START2 ; NO, RETURN
CALL DEL88 ; 调用花87US
CLRF RTCC
VERI_M1 BTFSS PORTB,RXM ; TEST LIN_OUT = 0 ?
GOTO OUT_VERM ; NO
CLRWDT
BSF PORTB,TXP ; 将TXP拉低
MOVLW .100 ; VERIFICO SE IL TIMER E' A 25.6 mSEC
SUBWF RTCC,0
BTFSS 3,0 ; C=1 SE RTCC>W
GOTO VERI_M1 ; NO, TIMER < 25.6 mSEC
GOTO FUSIBILE ;终端话机而来的LIN线短路处理
OUT_VERM CALL DEL250 ; delay 1/4 BIT
NOP
NOP
NOP
NOP
NOP
BCF PORTB,TXP ; 将TXP重新置高
GOTO START2
FUSIBILE BCF PORTB,TXP ;将TXP拉高
CLRF C_TIM
AGAIN BTFSS PORTB,RXM ; LIN_OUT PORT 还是0吗?
GOTO START2 ; NO,已正常,return
;以下为不正常时的处理,延时12S
CLRF RTCC ; 清 COUNTER
AGAIN1 CLRWDT
MOVLW B'11110000' ; 240x256x1uSEC=61.44 mSEC
SUBWF RTCC,0
BTFSS 3,0 ; TIMER > 61.44 mSEC?
GOTO AGAIN1 ; NO
MOVLW .1 ; SI
ADDWF C_TIM,1 ; C_TIM INCREMENT 1
MOVLW .200 ; TRASCORSI 12 SEC CON LINEA A 0?
XORWF C_TIM,0
BTFSS 3,2
GOTO AGAIN ; NO
;=======================================================================
; BRUCIATURA FUSIBILE//burn fuse
;=======================================================================
;1?TENTATIVO
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;2?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ;没有短路了
;3?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;4?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ;没有短路了
;5?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;6?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;7?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;8?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;9?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;10?TENTATIVO ;还是有短路
CALL BRUCIA
XORLW .1
BTFSS 3,2 ; 本单元支线还短路吗 ?
GOTO GUASTO ; 没有短路了
;===========================================================================
; STATO LINEA: CONNESSA, MA STACCATI I 35 V
;===========================================================================
ATTENDI BSF PORTB,LED ; SEGNALO ESECUZIONE BRUCIATURA
CLRF C_TIM
ATTENDI2 CLRF RTCC ; AZZERO COUNTER
ATTENDI1 CLRWDT
MOVLW B'11110000' ; 240x256x1uSEC=61.44 mSEC
SUBWF RTCC,0
BTFSS 3,0 ; TIMER > 61.44 mSEC?
GOTO ATTENDI1 ; NO
MOVLW .1 ; SI
ADDWF C_TIM,1 ; INCREMENTO CONTEGGIO TEMPO
MOVLW .200 ; TRASCORSI 12 SEC CON LINEA A 0?
XORWF C_TIM,0
BTFSS 3,2
GOTO ATTENDI2 ; NO
GUASTO
CLRWDT
BTFSS PORTB,RXM ; 本单元支线 = 0 吗 ?
GOTO START2 ; NO, 返回正常处理程序
BSF PORTB,LED ; YES,将LED灯点亮
NOP
GOTO GUASTO ;继续循环检测
;======================================================================
; pagina 22222222222222222222222222222222222222222222222222222
;======================================================================
;ORG 200H
;
; ORG 3FFH
; GOTO 0
ORG 1FFH
GOTO 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -