;**********************************************************
; By Tanju TASCILAR
; (c)Mikrosis Elektronik
;**********************************************************
  Processor 12C509
  Include "P12C509.INC"
  Errorlevel 1,-207

  __CONFIG _IntRC_OSC&_WDT_ON&_CP_OFF&_MCLRE_OFF ; Set config bits

; I/O pin naming

  #Define D_Ltc		GPIO,0	;Latch for SPI
  #Define D_Clk		GPIO,1	;Clock for SPI
  #Define D_Dta		GPIO,2	;Data Out for SPI

;RAM Area *************************************************
;Bank 0
  CBlock        0C
    S_Reg		;Serial work register
    S_Counter		;Counter
    A_Reg		;Test register
  EndC

  #Define Out_Bit	S_Reg,MSB

; DDR values **********************************************
  GPIO_DDR	EQU	B'00101000'

; Port reset values ***************************************
  GPIO_RST	EQU	B'00010001'     ;GPIO reset value

; Control words *******************************************
  Option_RST	EQU	B'01000000'	;OPTION reset value

MSB     EQU     .7
LSB     EQU     .0

;**********************************************************
; Main
;**********************************************************
	MOVWF	OSCCAL		;Optional
        CALL    Init_All
	GOTO	Main_Loop

;**********************************************************
; Send Serial
;**********************************************************
Send_Serial
	MOVWF	S_Reg
	MOVLW	.8
	MOVWF	S_Counter
S_Serial
        BTFSS   Out_Bit
        BCF     D_Dta
        BTFSC   Out_Bit
        BSF     D_Dta
        RLF     S_Reg,F
        BSF     D_Clk
        BCF     D_Clk
        DECFSZ  S_Counter,F
        GOTO    S_Serial
	RETURN
;**********************************************************
; Init All
;**********************************************************
Init_All
	MOVLW	GPIO_RST
	MOVWF	GPIO
	MOVLW	GPIO_DDR
	TRIS	GPIO
	MOVLW	Option_RST
	OPTION
	CLRF	A_Reg
        RETURN

	ORG	040		;To hide visible code after protection
;**********************************************************
; Main Loop
;**********************************************************
Main_Loop
	INCF	A_Reg,F

	BCF	D_Ltc

	MOVF	A_Reg,W
	CALL	Send_Serial
	COMF	A_Reg,W
	CALL	Send_Serial

	BSF	D_Ltc

	GOTO	Main_Loop

        END
