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

📄 1550-v01.asm

📁 数据通信用的放大程序本程序用于我司的LIN通信系统中
💻 ASM
📖 第 1 页 / 共 2 页
字号:
         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 + -