
; Project - spotwelder
	LIST	p=16F628A		; type of MCU
	#INCLUDE	<P16F628A.INC>	; definitions of variables

;Config
 __CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT

  

;definitions

 #DEFINE D2	PORTA,1	    ;DISPLAY 2
 #DEFINE D3	PORTA,0	    ;DISPLAY 3
 #DEFINE FOOT	PORTA,2	    ;SW3
 #DEFINE UP	PORTA,3	    ;SW2
 #DEFINE DOWN	PORTA,4     ;SW1
 #DEFINE ZCD	PORTA,5	    ;ZERO CROSS DETECTOR
 #DEFINE LED	PORTA,6	    ;DOT POINT DISPLAY 1
 #DEFINE OK1	PORTA,7	    ;OPTOCOUPLER
 #DEFINE D1	PORTB,7	    ;DISPLAY 3

 
    CBLOCK 0X20
    d1
    d2
    d3
    LEDTIME
    X1
    X2
    X3
    P1
    P2
    P3
    ENDC


;program
RESET	ORG	0x0000		; start of program

; Inicialization of ports
    MOVLW	B'00000111'	; comparator (off)
    MOVWF	CMCON
    BSF		STATUS,RP0
    MOVLW	B'00011100'
    MOVWF	TRISA
    MOVLW       B'00000000'
    MOVWF       TRISB
    BCF		STATUS,RP0
    MOVLW	0XA 
    MOVWF	LEDTIME	
    BCF		OK1
    GOTO	START
	
;********************************************************************       
TIME1			;CAS 5ms
	movlw	0xE7
	movwf	d1
	movlw	0x04
	movwf	d2
Delay_1
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_1

			;2 cycles
	goto	$+1	
	nop
	RETURN
;************************************************************************	
PREWELD			
Delay_2
	decfsz	P1,f
	goto	$+2
	decfsz	P2,f
	goto	$+2
	decfsz	P3,f
	goto	Delay_2

			;4 cycles
	goto	$+1
	goto	$+1
	NOP
	RETURN

;*****************************************************************************				;DELAY 5ms 
RESTWELD movlw	0x03	;PRESTAVKA PREDZVAR / ZVAR
	movwf	d1
	movlw	0x18
	movwf	d2
	movlw	0x02
	movwf	d3
Delay_3
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_3
	RETURN
;******************************************************************************
TWELD			;CAS ZVARU
Delay_4
	decfsz	X1, f
	goto	$+2
	decfsz	X2, f
	goto	$+2
	decfsz	X3, f
	goto	Delay_4

			;4 cycles
	goto	$+1
	goto	$+1
	NOP
	RETURN
	
;******************************************************************************

STEST			    ;TEST TLACIDIEL
	BTFSS   UP	    ;BUTTON TEST
	GOTO	BUTLOCK
	BTFSS	DOWN
	GOTO    BUTLOCK
	
	DECFSZ  LEDTIME,f	    ;LEDBLINK
	GOTO	$+0XA
	BTFSC	LED
	GOTO    LEDON
	BSF	LED
	movlw	0x3C
	movwf	LEDTIME
	GOTO	$+4
LEDON	BCF     LED
	movlw	0x1E
	movwf	LEDTIME
	RETURN
	
	
BUTLOCK			;NIEKTORE TLACIDLO STLACENE
        MOVLW	0X40
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40	   
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40   
	BSF	D3
	CALL	TIME1
	BCF	D3
	;;;;;;;;;;	SKOK NA NASTAVENIE PREDZVARU
	BTFSC	UP
	GOTO    STEST
	BTFSC   DOWN
	GOTO	STEST
	GOTO	PRESTART
	;;;;;;;;;;	    
	GOTO	STEST
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
	
PRESTEST			    ;TEST TLACIDIEL
	BTFSS   UP	    
	GOTO	PREBUTLOCK
	BTFSS	DOWN
	GOTO    PREBUTLOCK
	
	DECFSZ  LEDTIME,f	    ;LEDBLINK
	GOTO	$+0XA
	BTFSC	LED
	GOTO    PLEDON
	BSF	LED
	movlw	0x05
	movwf	LEDTIME
	GOTO	$+4
PLEDON	BCF     LED
	movlw	0x05
	movwf	LEDTIME
	RETURN
	
	
PREBUTLOCK			;NIEKTORE TLACIDLO STLACENE
        MOVLW	0X40
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40	   
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40   
	BSF	D3
	CALL	TIME1
	BCF	D3
	;;;;;;;;;;	NAVRAT DO HLAVNEJ SMYCKY
	BTFSC	UP
	GOTO    PRESTEST
	BTFSC   DOWN
	GOTO	PRESTEST
	GOTO	START
	;;;;;;;;;;	    
	GOTO	PRESTEST
	


PRESTART    
	BTFSS   UP
	GOTO    $-1
	BTFSS   DOWN
	GOTO    $-1
	GOTO    PRE50   ;DEFAULT PREWELD TIME

PRE0     
	MOVLW   0X1
	MOVWF   P1
	MOVLW   0X1
	MOVWF   P2
	MOVLW   0X1
	MOVWF   P3
	CALL    PRESTEST
	MOVLW   0X40
	MOVWF   PORTB
	BSF	D1
	CALL    TIME1
	BCF	D1
	MOVLW   0X7F
	MOVWF   PORTB	   
	BCF	D2
	CALL    TIME1
	BCF	D2
	MOVLW   0X7F
	MOVWF   PORTB	   
	BSF	D3
	CALL    TIME1
	BCF	D3
	BTFSS   UP   
	GOTO    PRE10
	BTFSS   DOWN
	GOTO    PRE0
	GOTO    PRE0
	    
PRE10     
	MOVLW   0XCF	
	MOVWF   P1
	MOVLW   0X08
	MOVWF   P2
	MOVLW   0X1
	MOVWF   P3   
	CALL    PRESTEST
	MOVLW   0X4F
	MOVWF   PORTB
	BSF	D1
	CALL    TIME1
	BCF	D1
	MOVLW   0X40
	MOVWF   PORTB
	BSF	D2
	CALL    TIME1
	BCF	D2
	MOVLW   0X7F
	MOVWF   PORTB
	BSF	D3
	CALL    TIME1
	BCF	D3
	BTFSS   UP   
	GOTO    PRE20
	BTFSS   DOWN
	GOTO    PRE0
	GOTO    PRE10


PRE20     
	MOVLW   0X9F	
	MOVWF   P1
	MOVLW   0X10
	MOVWF   P2
	MOVLW   0X1
	MOVWF   P3 
	CALL    PRESTEST
	MOVLW   0X24
	MOVWF   PORTB
	BSF	D1
	CALL    TIME1
	BCF	D1
	MOVLW   0X40
	MOVWF   PORTB
	BSF	D2
	CALL    TIME1
	BCF	D2
	MOVLW   0X7F
	MOVWF   PORTB
	BSF	D3
	CALL    TIME1
	BCF	D3
	BTFSS   UP   
	GOTO    PRE30
	BTFSS   DOWN
	GOTO    PRE10
	GOTO    PRE20
	    
PRE30     
	MOVLW   0X6F	
	MOVWF   P1
	MOVLW   0X18
	MOVWF   P2
	MOVLW   0X1
	MOVWF   P3  
	CALL    PRESTEST
	MOVLW   0X6
	MOVWF   PORTB
	BSF	D1
	CALL    TIME1
	BCF	D1
	MOVLW   0X40
	MOVWF   PORTB
	BSF	D2
	CALL    TIME1
	BCF	D2
	MOVLW   0X7F
	MOVWF   PORTB
	BSF	D3
	CALL    TIME1
	BCF	D3
	BTFSS   UP   
	GOTO    PRE40
	BTFSS   DOWN
	GOTO    PRE20
	GOTO    PRE30

PRE40  
	MOVLW   0X3F	
	MOVWF   P1
	MOVLW   0X20
	MOVWF   P2
	MOVLW   0X1
	MOVWF   P3   
	CALL    PRESTEST
	MOVLW   0XB
	MOVWF   PORTB
	BSF	D1
	CALL    TIME1
	BCF	D1
	MOVLW   0X40
	MOVWF   PORTB
	BSF	D2
	CALL    TIME1
	BCF	D2
	MOVLW   0X7F
	MOVWF   PORTB
	BSF	D3
	CALL    TIME1
	BCF	D3
	BTFSS   UP   
	GOTO    PRE50
	BTFSS   DOWN
	GOTO    PRE30
	GOTO    PRE40

PRE50  
	MOVLW   0X0F	
	MOVWF   P1
	MOVLW   0X28
	MOVWF   P2
	MOVLW   0X1
	MOVWF   P3  
	CALL    PRESTEST
	MOVLW   0X12
	MOVWF   PORTB
	BSF	D1
	CALL    TIME1
	BCF	D1
	MOVLW   0X40
	MOVWF   PORTB
	BSF	D2
	CALL    TIME1
	BCF	D2
	MOVLW   0X7F
	MOVWF   PORTB
	BSF	D3
	CALL    TIME1
	BCF	D3
	BTFSS   UP   
	GOTO    PRE50
	BTFSS   DOWN
	GOTO    PRE40
	GOTO    PRE50



WELD	BCF	LED
	MOVLW   0X76
	MOVWF   PORTB
	BCF	D1
	BSF	D2
	BCF	D3
	BTFSC	ZCD    
	GOTO	$-1
	
	CALL	TIME1
	MOVLW   0X3F
	MOVWF   PORTB
	BSF	OK1
	CALL	PREWELD
	BCF	OK1
	MOVLW   0X76
	
	CALL	RESTWELD	
	BTFSC	ZCD     
	GOTO	$-1	
	CALL	TIME1
	MOVLW   0X3F
	MOVWF   PORTB
	BSF	OK1
	CALL	TWELD
	BCF     OK1
	MOVLW   0X76
        MOVWF   PORTB
	BSF	LED
	BTFSS	FOOT
	GOTO	$-1
	CALL	RESTWELD    ;OSETRENIE ZAKMITOV
	RETURN
	
	
START
	BTFSS	UP
	GOTO    $-1
	BTFSS   DOWN
	GOTO	$-1
		
	
T0	MOVLW	0X1
	MOVWF	X1
	MOVLW	0X1
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3
	CALL	STEST
        MOVLW	    0X40
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X7F
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X7F
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP   
	GOTO	T10
	BTFSS   DOWN
	GOTO    T0
	BTFSS   FOOT
	CALL    WELD
	GOTO T0
	
	
T10	MOVLW	0XCF	;WELD TIME
	MOVWF	X1
	MOVLW	0X08
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3     
	CALL	STEST
        MOVLW	0X4F      ;DISPLAY VALUE
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40 
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X7F
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T20
	BTFSS   DOWN
	GOTO    T0
	BTFSS   FOOT
	CALL	WELD
	GOTO	T10
	
	
T20	MOVLW	0X9F	;WELD TIME
	MOVWF	X1
	MOVLW	0X10
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3     
	CALL	STEST
        MOVLW	0X24  ;DISPLAY VALUE
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40 
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X7F
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T30
	BTFSS   DOWN
	GOTO    T10
	BTFSS   FOOT
	CALL	WELD
	GOTO	T20
	
	
T30	MOVLW	0X6F	;WELD TIME
	MOVWF	X1
	MOVLW	0X18
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3     
	CALL	STEST
        MOVLW	0X6  ;DISPLAY VALUE
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X7F
	MOVWF   PORTB	
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T40
	BTFSS   DOWN
	GOTO    T20
	BTFSS   FOOT
	CALL	WELD
	GOTO	T30
	
	
T40	MOVLW	0X3F	;WELD TIME
	MOVWF	X1
	MOVLW	0X20
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3     
	CALL	STEST
        MOVLW	0XB  ;DISPLAY VALUE
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40 
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X7F
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T50
	BTFSS   DOWN
	GOTO    T30
	BTFSS   FOOT
	CALL	WELD
	GOTO	T40
	
	
T50	MOVLW	0X0F	;WELD TIME
	MOVWF	X1
	MOVLW	0X28
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3     
	CALL	STEST
        MOVLW	0X12  ;DISPLAY VALUE
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40 
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X7F
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T100
	BTFSS   DOWN
	GOTO    T40
	BTFSS   FOOT
	CALL	WELD
	GOTO	T50

T100	MOVLW	0X1F
	MOVWF	X1
	MOVLW	0X4F
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3
	CALL	STEST
        MOVLW	0X4F 
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW 0X40
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T150
	BTFSS   DOWN
	GOTO    T50
	BTFSS   FOOT
	CALL	WELD
	GOTO	T100
	
T150	MOVLW	0X2F
	MOVWF	X1
	MOVLW	0X76
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3
	CALL	STEST
        MOVLW	0X4F
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X12
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T200
	BTFSS   DOWN
	GOTO    T50
	BTFSS   FOOT
	CALL	WELD
	GOTO	T150
	
T200	MOVLW	0X3F
	MOVWF	X1
	MOVLW	0X9D
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3
	CALL	STEST
        MOVLW	0X24
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T250
	BTFSS   DOWN
	GOTO    T150
	BTFSS   FOOT
	CALL	WELD
	GOTO	T200
	
T250	MOVLW	0X4F
	MOVWF	X1
	MOVLW	0XC4
	MOVWF	X2
	MOVLW	0X1
	MOVWF	X3
	CALL	STEST
        MOVLW	0X24
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X12
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T300
	BTFSS   DOWN
	GOTO    T200
	BTFSS   FOOT
	CALL	WELD
	GOTO	T250
	
T300	MOVLW	0X5F
	MOVWF	X1
	MOVLW	0XEB
	MOVWF	X2
	MOVLW	0X01
	MOVWF	X3
	CALL	STEST
        MOVLW	0X6
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T350
	BTFSS   DOWN
	GOTO    T250
	BTFSS   FOOT
	CALL	WELD
	GOTO	T300
	
	
T350	MOVLW	0X4F
	MOVWF	X1
	MOVLW	0XC4
	MOVWF	X2
	MOVLW	0X01
	MOVWF	X3
	CALL	STEST
        MOVLW	0X6
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X12
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T400
	BTFSS   DOWN
	GOTO    T300
	BTFSS   FOOT
	CALL	WELD
	GOTO	T350
	
T400	MOVLW	0X36
	MOVWF	X1
	MOVLW	0XE0
	MOVWF	X2
	MOVLW	0X01
	MOVWF	X3
	CALL	STEST
        MOVLW	0XB
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T450
	BTFSS   DOWN
	GOTO    T350
	BTFSS   FOOT
	CALL	WELD
	GOTO	T400
	
T450	MOVLW	0X1D
	MOVWF	X1
	MOVLW	0XFC
	MOVWF	X2
	MOVLW	0X01
	MOVWF	X3
	CALL	STEST
        MOVLW	0XB
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X12
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T500
	BTFSS   DOWN
	GOTO    T400
	BTFSS   FOOT
	CALL	WELD
	GOTO	T450
	

	
T500	MOVLW	0X03
	MOVWF	X1
	MOVLW	0X18
	MOVWF	X2
	MOVLW	0X02
	MOVWF	X3    
	CALL	STEST
        MOVLW	0X12
	MOVWF   PORTB
	BSF	D1	
	CALL	TIME1
	BCF	D1
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T550
	BTFSS   DOWN
	GOTO    T450
	BTFSS   FOOT
	CALL	WELD
	GOTO	T500
	
T550	MOVLW	0XEA
	MOVWF	X1
	MOVLW	0X33
	MOVWF	X2
	MOVLW	0X02
	MOVWF	X3   
	CALL	STEST
        MOVLW	0X12
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X12
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	T600
	BTFSS   DOWN
	GOTO    T500
	BTFSS   FOOT
	CALL	WELD
	GOTO	T550
		

	
T600  	MOVLW	0XD1
	MOVWF	X1
	MOVLW	0X4F
	MOVWF	X2
	MOVLW	0X02
	MOVWF	X3
	CALL	STEST
        MOVLW	0X10
	MOVWF   PORTB
	BSF	D1
	CALL	TIME1
	BCF	D1
	MOVLW	0X40
	MOVWF	PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	MOVLW	0X40
	MOVWF   PORTB
	BSF	D3
	CALL	TIME1
	BCF	D3
	BTFSS	UP
	GOTO	TCON
	BTFSS   DOWN
	GOTO    T550
	BTFSS   FOOT
	CALL	WELD
	GOTO	T600
	
TCON  	MOVLW	0X5A
	MOVWF	X1
	MOVLW	0XCD
	MOVWF	X2
	MOVLW	0X16
	MOVWF	X3
	
	CALL	STEST
        MOVLW   0X76
	MOVWF   PORTB
	BSF	D2
	CALL	TIME1
	BCF	D2
	BTFSS	UP
	GOTO	TCON
	BTFSS   DOWN
	GOTO    T600
	BTFSC   FOOT
	GOTO	TCON
	
        BTFSC	ZCD     
	GOTO	$-1
	CALL	TIME1
	BSF	D2
	MOVLW   0X3F
	MOVWF   PORTB
	BSF	OK1
	BTFSS	FOOT
	GOTO	$-1
	BCF     OK1
	GOTO	TCON	

	END

	
	
	
	
;TABLE 7SEGMENT
;	0=40
;	1=79
;	2=24
;	3=30
;	4=99
;	5=12
;	6=2
;	7=78
;	8=0
;	9=10
   