;
;2024-10-17-pic16f84aからpic16f648に変更
;
;*********************************************
 
  LIST P=PIC16F648A
  INCLUDE P16F648A.INC

 __CONFIG _CP_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _HS_OSC


; __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BODEN_OFF & _LVP_OFF
; __CONFIG _CP_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & ;_LVP_OFF & _INTRC_OSC_NOCLKOUT

;i/o name

sv1b0   equ   0
sv2b1   equ   1
sv3b2   equ   2
sv4b3   equ   3
sv5b4   equ   4
sv6b5   equ   5
sv7b6   equ   6
sv8b7   equ   7
sv9a0   equ   0

mctta1     equ 1
tmouta2    equ 2
tmswina3   equ 3
swina4     equ 4

count1  equ   20H  ;タイマー
count2  equ   21H
count3  equ   22H

 org 0ch

;**************** 
;system clear
;****************

     ORG  0 
     GOTO START
     ORG  4
     GOTO START


START

  BSF     STATUS,RP0
 
  MOVLW   18H   ;ra0,1,2=OUT ra3,4=in = 00011000B
  MOVWF   TRISA

  MOVLW   00H   ;rb all OUT  = 00000000B
  MOVWF   TRISB

  BCF     STATUS,RP0
 
  MOVLW   07h   ;b'00000111'
  MOVWF   CMCON ;コンパレータOFF

  CLRF    PORTA    
  CLRF    PORTB

  ;*****************     
mainn
      call  WAIT ;0.5sec sw double check
      btfsc PORTA,swina4
      goto  mainn

      call  WAIT
      btfsc PORTA,swina4
      goto  mainn

      call  mon ;motor on

      call  WAIT
      call  WAIT
      call  WAIT
      call  WAIT
      call  WAIT
      call  WAIT
      call  WAIT

      call  svvv1 ;sv on off cont

      call  svvv2 ;sv on off cont
    
      call  svvv3 ;sv on off cont
    
      call  svvv4 ;sv on off cont
     
      call  svvv5 ;sv on off cont
     
      call  svvv6 ;sv on off cont
     
      call  svvv7 ;sv on off cont
     
      call  svvv8 ;sv on off cont
     
      call  svvv9 ;sv on off cont
        
      call  moff ;motor off
  
      goto  mainn

;******************************************************  
mon ;motor signal
      bsf  PORTA,mctta1
      RETURN
;****************************************************** 
svvv1
            call  WAIT
            call  WAIT

            bsf   PORTB,sv1b0  ;sv1

            call  WAIT
            call  WAIT

            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp1

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv1a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv1a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv1a
jmp1
            call  WAIT
            bcf   PORTB,sv1b0  ;sv1
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN
;****************************************************** 
svvv2
            call  WAIT
            call  WAIT

            bsf   PORTB,sv2b1  ;sv2

            call  WAIT
            call  WAIT

            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp2

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv2a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv2a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv2a
jmp2
            call  WAIT
            bcf   PORTB,sv2b1  ;sv2
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN 
;****************************************************** 
svvv3
            call  WAIT
            call  WAIT

            bsf  PORTB,sv3b2  ;sv3

            call  WAIT
            call  WAIT

            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp3

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv3a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv3a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv3a
jmp3
            call  WAIT
            bcf   PORTB,sv3b2  ;sv3
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN 
;****************************************************** 
svvv4
            call  WAIT
            call  WAIT

            bsf   PORTB,sv4b3  ;sv4

            call  WAIT
            call  WAIT

            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp4

            call  WAIT
            call  WAIT

            bsf  PORTA,tmouta2  ;tm-on
svvv4a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv4a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv4a
jmp4
            call  WAIT
            bcf   PORTB,sv4b3  ;sv4
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN
;****************************************************** 
svvv5
            call  WAIT
            call  WAIT

            bsf   PORTB,sv5b4  ;sv5

            call  WAIT
            call  WAIT

            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp5

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv5a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv5a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv5a
jmp5
            call  WAIT
            bcf   PORTB,sv5b4  ;sv5
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN 
;****************************************************** 
svvv6
            call  WAIT
            call  WAIT

            bsf   PORTB,sv6b5  ;sv6

            call  WAIT
            call  WAIT
 
            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp6

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv6a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv6a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv6a
jmp6
            call  WAIT
            bcf   PORTB,sv6b5  ;sv6
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN 
;****************************************************** 
svvv7
            call  WAIT
            call  WAIT

            bsf   PORTB,sv7b6  ;sv7

            call  WAIT
            call  WAIT

            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp7

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv7a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv7a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv7a
jmp7
            call  WAIT
            bcf   PORTB,sv7b6  ;sv7
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN 
;****************************************************** 
svvv8
            call  WAIT
            call  WAIT

            bsf   PORTB,sv8b7  ;sv8

            call  WAIT
            call  WAIT
 
            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp8

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv8a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv8a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv8a
jmp8
            call  WAIT
            bcf   PORTB,sv8b7  ;sv8
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN 
;****************************************************** 
svvv9
            call  WAIT
            call  WAIT

            bsf   PORTA,sv9a0  ;sv9

            call  WAIT
            call  WAIT
 
            btfss PORTA,tmswina3  ;ts-off then jmp
            goto  jmp9

            call  WAIT
            call  WAIT

            bsf   PORTA,tmouta2  ;tm-on
svvv9a
            call  WAIT
            btfsc PORTA,tmswina3  ;sw double check
            goto  svvv9a
            call  WAIT
            btfsc PORTA,tmswina3
            goto  svvv9a
jmp9
            call  WAIT
            bcf   PORTA,sv9a0  ;sv9
            call  WAIT
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            RETURN 
;****************************************************** 

moff ;motor off
            call  WAIT
            call  WAIT
            call  WAIT
            call  WAIT
            call  WAIT
            call  WAIT
            call  WAIT
            bcf   PORTA,mctta1
            call  WAIT
            bcf   PORTA,tmouta2  ;tm-off
            call  WAIT
            call  WAIT
            call  WAIT
            call  WAIT
            call  WAIT
            RETURN
 

;******************************************************
;  タイマー
;******************************************************

tim10; 0.4msec
            MOVLW      0F9H
            MOVWF      count1
timlp1
            NOP
            DECFSZ    count1,F
            GOTO      timlp1
            RETURN

tim100; 100msec
            MOVLW     0F9H     
            MOVWF     count2
timlp2
            CALL      tim10
            DECFSZ    count2,F  
            GOTO      timlp2  
            RETURN


WAIT  ; 0.5sec
            MOVLW     2
            MOVWF     count3
timlp3
            CALL      tim100
            DECFSZ    count3,F
            GOTO      timlp3
            RETURN
 
            END



TOPに戻る