📄 1550-v01.asm
字号:
; AL7.ASM: COME AL6.ASM. AGGIUSTATI I TEMPI DI BRUCIATURA
; AL6.ASM: RESETTA IL TIMER DI BRUCIATURA QUANDO LA LINEA TORNA A 1
; (ERRORE DELLA VERISONE AL5.ASM)
; BRUCIA A STEP DI 1 SEC E POI CONTROLLA LINEA PER SEI VOLTE
; DOPO AVER BRUCIATO, RICOLLEGA LINEA E LA MONITORIZZA:
; SE LINEA A 0, NON REPLICA (NON C'E' PIU' HW RESET)
; DOPO LA BRUCIATURA, ANCHE SE LINEA A 1, ASPETTA 5 SEC PRIMA DI
; TORNARE A REPLICARE
; AL3.ASM E' UGUALE A AL2.ASM: SONO STATE TOLTE DELLE ROUTINE INUTILI
; ALIMENTATORE DIGITALE --- AL2.ASM
; RISPETTO AD AL1.ASM, INTRODOTTA ROUTINE LAMPEGGIO LED
; SONO STATI INSERITE MOLTE ISRUZIONI "CLRWDT" PERCHE' IL PRESCALER
; E' ASSEGNATO AL TIMER ==> IL WDT DURA CIRCA 18 mSEC ;hardware watchtime 18ms
list c=120 , P=16C54
__CONFIG 0XFF5
;==============ASSEGNAZIONI COSTANTI ====================
;DEST1 EQU .39 ; CODICE DESTINATARIO
;DEST2 EQU .15 ; CODICE DESTINATARIO
;CMD EQU .10 ; COMANDO
;COLL EQU 2 ; PER FLAG DI COLLISIONE
;==============ASSEGNAZIONI REGISTRI ====================
;
RTCC EQU .1 ; REAL TIME COUNTER
STATUS EQU .3 ; REG DI STATO
PORTA EQU .5 ; PORTA
PORTB EQU .6 ; PORTB
FLAG EQU .7 ; REGISTRO DI FLAG
C_TIM EQU .8 ; REGISTRO CONTEGGIO TEMPO
FUSIB EQU .9 ; REGISTRO CONTEGGIO TEMPO PER BRUCIATURA FUSIBILE
CHKS EQU .10 ; REGISTRO PER CHECK SUM
CHECK EQU .11 ; REGISTRO PER CONTROLLO COLLISIONE LINEA
COUNT EQU .12 ; REGISTRO PER CONTEGGIO BIT DA TRASMETTERE
REG1 EQU .13 ; REGISTRO PER TRASMISSIONE BIT
REG2 EQU .14
MOMEN EQU .15
;========ASSEGNAZIONE DEI BIT RELATIVI AL PORTB=============
RB0 EQU 0 ; NON UTILIZZATA
REL1 EQU 1 ; RELE' 35 VOLT
TXP EQU 2 ; TRASMISSIONE DA PIC A PORTA
RXP EQU 3 ; RICEZIONE DA PORTA A PIC
RXM EQU 4 ; RICEZIONE DA MONTANTE A PIC
TXM EQU 5 ; TRASMISSIONE DA PIC A MONTANTE
REL2 EQU 6 ; RELE' CHE SGANCIA INTERFACCIA LINEA MONTANTE
LED EQU 7 ; LED ALLARME MONTANTE GUASTO
;============ASSEGNAZIONE BIT DI USCITA PORTA==============
RA0 EQU 0 ; NON UTILIZZATA
RA1 EQU 1 ; NON UTILIZZATA
RA2 EQU 2 ; NON UTILIZZATA
RA3 EQU 3 ; NON UTILIZZATA
;===========================================================
; ASSEGNAZIONE FUNZIONE DEI FLAG LOGICI DEL PROGRAMMA
; AZZERATI ALL'ACCENSIONE
;===========================================================
; REGISTRO FLAG VERO =1 FALSO =0
;
; AZZERATO ALLA PARTENZA E DA OGNI RESET FREDDO
;
ORG 0
GOTO START
;====================================================================
; LE ROUTINE DEVONO TROVARSI NELLA MEMORIA CHE
; VA DA 000 A 0FF (PRIMA SEMIPAGINA)
;====================================================================
;====================================================================
; ROUTINE PER GENERARE 50 uSEC DI RITARDO A 4 MHz
;====================================================================
DEL50 MOVLW .9 ;1
GOTO DELAY+1 ;2
;====================================================================
; ROUTINE PER GENERARE 70 uSEC DI RITARDO A 4 MHz
;====================================================================
DEL70 MOVLW .13
GOTO DELAY+1
;====================================================================
; ROUTINE PER GENERARE 88 uSEC DI RITARDO A 4 MHz
;====================================================================
DEL88 MOVLW .16
GOTO DELAY+1
;====================================================================
;2) RITARDO PER GENERAZIONE DI BAUD RATE BIT 1MS CIRCA @ 4MHz CLOCK
;====================================================================
;delay 208us,1/4 bit
;DEL250 MOVLW .38 ; delay 208 uS , 1/4 BIT
DEL250 MOVLW .40
GOTO DELAY+1
;delay 416us,1/2 bit
DELAY1 MOVLW .82 ;3) RITARDO PER GENERAZIONE DI
GOTO DELAY+1 ;1/2 BIT .416 MS CIRCA @ 4MHz CLOCK
; delay 833us,1bit
DELAY MOVLW .165 ; SI CARICA IL REGISTRO MOMEN CON IL NUMERO
MOVWF MOMEN ; NECESSARIO A REALIZZARE IL RITARDO PARI A
RPT NOP ; I BIT DA 0.833 MS A 4MHZ
NOP
DECFSZ MOMEN ;
GOTO RPT ;
NOP
RETLW .0 ;
DELAY2 CALL DELAY
NOP
CALL DELAY
NOP
RETLW .0 ; FINE DELAY.
;=================================================
;SUBROUTINE CHE FA LAMPEGGIARE LED PER PROG OK
;=================================================
;=================================================
; LED frash
;=================================================
LAMP
MOVLW .255
MOVWF REG1
BSF PORTB,LED ; LED on
LAMP_1 CALL DELAY ;delay 0.8ms
CLRWDT
DECFSZ REG1
GOTO LAMP_1
MOVLW .255
MOVWF REG1
BCF PORTB,LED ; LED SPENTO
LAMP_2 CALL DELAY
CLRWDT
DECFSZ REG1
GOTO LAMP_2
RETLW .0
;=======================================================
; 短路保护
;=======================================================
BRUCIA
BSF PORTB,REL2 ; 脱开1550和本单元的LIN支接线
BSF PORTB,REL1 ; 将24V电压变到35V电压,并将35V电压连到本单元的LIN支线
MOVLW .255 ;250MS DELAY
MOVWF REG1
BRC_1 CALL DELAY ;DELAY 833US
CLRWDT
DECFSZ REG1
GOTO BRC_1
MOVLW .255 ;250MS DELAY
MOVWF REG1
BRC_2 CALL DELAY
CLRWDT
DECFSZ REG1
GOTO BRC_2
;以下这条语句,在意大利源程序中是有的,现应汪工要求,当LIN OUT端短路没恢复时,RB6端口要一直输出高电平
; BCF PORTB,REL1 ;;0.5s延时后,将35V电压变回到24V,脱开和本单元的LIN支线连接
MOVLW .100
MOVWF REG1
BRC_3 CALL DELAY
CLRWDT
DECFSZ REG1
GOTO BRC_3 ;延时83MS后
;以下这条语句,在意大利源程序中是有的,现应汪工要求,当LIN OUT端短路没恢复时,RB6端口要一直输出高电平
; BCF PORTB,REL2 ; 重新将1550和本单元的LIN支线相联
MOVLW .255
MOVWF REG1
BRC_4 CALL DELAY
CLRWDT
DECFSZ REG1
GOTO BRC_4 ;延时250MS
BTFSS PORTB,RXM ; 本单元LIN支线还是 = 0 吗?
RETLW .0 ; NO, 返回0
RETLW .1 ; 是, 返回1
;=======================================================
;1) PROGRAMMA PRINCIPALE INIZIALIZZAZIONE PORTI
;=======================================================
;=======================================================
; main program init
;=======================================================
START MOVLW 7 ; TIMER0: INTERNAL, X, PRESCALER TO RTCC
OPTION ; 1:256
MOVLW B'00000000' ; all OUT
TRIS PORTA
BCF PORTA,0
BCF PORTA,1
BCF PORTA,2
BCF PORTA,3
MOVLW B'00011000' ; INIT PORT B
TRIS PORTB ; PIN ASSEGNATI COME OOOIIOOO
BCF PORTB,REL1
BCF PORTB,REL2
BCF PORTB,TXP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -