; Encoder for DDS Contoroler PROGRAM ; Copyright (C) 2003 JA1TGO Y.Katoh ; CODE BY JA1TGO (UTAH) ; CPU=PIC12F675 VERSION 01-00 2013.0624 ; 4MHz Internal Clock Use Anther Option OFF LIST P=PIC12F675 __CONFIG _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF __IDLOCS H'FFFF' INCLUDE "P12F675.INC" ; ; ; *********INTERFACE AREA********* IFLG1 EQU 20H ;STATUS BYTE 1 IFLG2 EQU 21H ;STATUS BYTE 2 IFLG3 EQU 22H ;STATUS BYTE 3 IPOTO EQU 23H ;PORT OUTPUT DATA ; IPOTI EQU 23H ;PORT INPUT DATA ; IPOTA EQU 24H ;PORT A/D INPUT DATA ; ; ITCN1 EQU 25H ;TIMER1 CNT ITCN2 EQU 26H ;TIMER2 CNT ; ICNT1 EQU 27H ; ICNT2 EQU 28H ; ICNT3 EQU 29H ; ICNT4 EQU 2AH ; ; IBEF EQU 2BH ; INOW EQU 2CH ; WBEF EQU 2DH ; WNOW EQU 2EH ; WSAVE EQU 2FH ;W-REG SAVE AREA WRK01 EQU 30H ;WORK WRK02 EQU 31H ;WORK ; *********EQU POOL********** TIMER EQU 0FFH-60H ;1CLOCK = 2.1mms(40KHz) IFALN EQU 10H ;LENGTH=14 ; ; **********PROGRAM START*********** ; ORG 0000H ;START ADR START CALL INITS ;CALL INIT PROC ; MOVLW TIMER ;SET INT CNT ; MOVWF TMR0 ;SET TMR0 GOTO MAINP ;GOTO MAIN PROC ; ; ***INTERAPET PROC*** ; ORG 0004H ;INT VECTER ADR for TMR0 INTPR EQU $ MOVWF WSAVE ;SAVE W-REG ; PROCESS ; ; INTEX EQU $ MOVF WSAVE,W ;RELOAD W-REG BSF INTCON,7 ;SET GIE RETFIE ; ; ***MAIN PROC*** ; MAINP EQU $ CALL CLROUT ;OUT AREA RESET CALL SENSE ;ENCODER input check RTN GOTO MAINP ; ; ;*********** サブルーチン群 ****************************** ;***************************************** ; ENCODER COUNT CHECK & CHECK FWD or RVS ; Conunt up:FLG1 7=0:- 1:UP ; FWD :FLG1 6=0:FWD 1:RSV ;***************************************** SENSE EQU $ BTFSS GPIO,0 ;IF ON ? GOTO SEPA400 GOTO SEPA401 ; SEPA400 EQU $ BCF INOW,0 ;RESET INOW GOTO SEPA4EX SEPA401 EQU $ BSF INOW,0 ;SET INOW GOTO SEPA4EX SEPA4EX EQU $ ; BTFSS GPIO,1 ;IF ON ? GOTO SEPA500 GOTO SEPA501 ; SEPA500 EQU $ BCF INOW,1 ;RESET INOW GOTO SEPA5EX SEPA501 EQU $ BSF INOW,1 ;SET INOW GOTO SEPA5EX SEPA5EX EQU $ ; ; MOVF INOW,W SUBWF IBEF,W ;BEF = NOW ? BTFSS STATUS,Z ; GOTO SE010 GOTO SEEXIT SE010 EQU $ MOVF INOW,W ;DDD MOVWF WNOW ;DDD MOVF IBEF,W ;DDD MOVWF WBEF ;DDD BSF IFLG1,7 ;CHNG BIT ON MOVF INOW,W SUBLW 003H BTFSS STATUS,Z ;NOW=3 ? GOTO SE020 MOVF IBEF,W SUBLW 001H BTFSS STATUS,Z ;BEF=1 ? GOTO SERSV GOTO SEFWD SE020 EQU $ MOVF INOW,W SUBLW 002H BTFSS STATUS,Z ;NOW=2 ? GOTO SE030 MOVF IBEF,W SUBLW 003H BTFSS STATUS,Z ;BEF=3 ? GOTO SERSV GOTO SEFWD SE030 EQU $ MOVF INOW,W SUBLW 001H BTFSS STATUS,Z ;NOW=1 ? GOTO SE040 MOVF IBEF,W SUBLW 000H BTFSS STATUS,Z ;BEF=0 ? GOTO SERSV GOTO SEFWD SE040 EQU $ MOVF INOW,W SUBLW 000H BTFSS STATUS,Z ;NOW=0 ? GOTO SEEXT MOVF IBEF,W SUBLW 002H BTFSS STATUS,Z ;BEF=2 ? GOTO SERSV SEFWD EQU $ BSF IFLG1,6 ;SET to FWD BSF GPIO,5 ;set to FWD ON GOTO SEEXT SERSV EQU $ BCF IFLG1,6 ;SET to RVS BSF GPIO,4 ;set to RVS ON SEEXT EQU $ MOVF INOW,W MOVWF IBEF SEEXIT EQU $ RETURN ;***************************************** ; ENCODER out clear RROC ;  ;  ;***************************************** CLROUT EQU $ BCF GPIO,5 ;reset to FWD ON BCF GPIO,4 ;reset to RVS ON RETURN ; ; ; ***INIT SUB*** INITS EQU $ MOVLW IFALN ;SET IFA SIZE MOVWF WRK01 ; MOVLW IFLG1 ;SET IFA ADR INI10 EQU $ MOVWF FSR ;IFA CLEAR RTN CLRF INDF ADDLW 1 ;MODIFY F-REG DECFSZ WRK01,F GOTO INI10 CLRF GPIO ; MOVLW B'00000111' ; MOVWF CMCON ;compre nouse     BSF STATUS,RP0 ;SET PAGE1 MOVLW 00H ;TMR0 MOVWF OPTION_REG ;SET OPTION-REG MOVLW B'00000011' ;DEFINE INPUT OUTPUT PORT MOVWF TRISIO ;SET PORT CLRF ANSEL ;SDCONV nouse MOVLW B'00000011' ;DEFINE PULL-UP PORT MOVWF WPU ;SET PORT BCF STATUS,RP0 ;SET PAGE0 INIEX EQU $ RETURN END