;LMX2306 PLL vezérlő program NOAA15-17-18-19 meteorológiai műholdak vételéhez
;Felső keveréses 10,7MHz KF frekvenciájú vevőkhöz
;Referencia oszcillátor 10MHz 
;Fázisdetektor frekvencia 10kHz
;Készítette: Ferkógyerek 2011 Május

	PROCESSOR 16F628A

	INCLUDE P16F628A.INC

	RADIX DEC


	__IDLOCS H'0100'

	__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _BODEN_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF

; Diverses

ZERO	EQU Z	; ZERO-Flag
CARRY	 EQU C	; CARRY-Flag


; Variable

RAM	= 32	; located in Bank 0

	ERRORLEVEL -302	; disable warning (Bankswitching)
	ERRORLEVEL -306	; disable warning (Pageswitching)

;****************************************
;Programmanfang
;****************************************

	ORG 0

	CLRF STATUS	; switch to RAM-Bank 0
	GOTO SYS_INIT
	NOP
	NOP
	RETURN

;****************************************
; Subroutines
;****************************************


;****************************************
;Initialisierung
;****************************************


SYS_INIT


	MOVLW B'00000000'
	MOVWF INTCON

; Set output before direction

	BCF STATUS,RP0			; Bank 0
	BCF STATUS,RP1			; Bank 0
	MOVLW B'00000000'
	MOVWF PORTA

	MOVLW B'00000000'
	MOVWF PORTB

	MOVLW 15
	BSF STATUS,RP0			; Bank 1
	MOVWF OPTION_REG



	MOVLW B'00000000'		;PORTA KIMENET
	MOVWF TRISA

	MOVLW B'11110000'		;RB0-RB3 KIMENET  RB4-RB7 BEMENET
	MOVWF TRISB

	BCF STATUS,RP0			; Bank 0
	MOVLW 7				; Comparators off
	MOVWF CMCON


; Clear RAM

	BCF STATUS,IRP
	MOVLW 32
	MOVWF FSR
CR1
	CLRF INDF
	INCF FSR,F
	BTFSS FSR,7
	GOTO CR1
	BSF FSR,5
CR2
	CLRF INDF
	INCF FSR,F
	MOVLW H'F0'
	SUBWF FSR,W
	BTFSS STATUS,ZERO
	GOTO CR2
	BSF STATUS,IRP
	MOVLW 32
	MOVWF FSR
CR3
	CLRF INDF
	INCF FSR,F
	MOVLW H'50'
	SUBWF FSR,W
	BTFSS STATUS,ZERO
	GOTO CR3



	BSF INTCON,RBIE
	BSF INTCON,GIE
	




	

				;PORTB 1 LE
				;PORTB 2 DATA
				;PORTB 3 CLOCK
 
;;;;;;;;;;;;;; FŐPROGRAM ;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; F REGISZTER ÍRÁSA ;;;;;;;;;;;;;;

START	CALL	CLOCK		;ELSŐ 11 BIT 0
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP 
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK		;11. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;12. BIT 1  10-12.bit = FastLock Mode #1 
	BCF	PORTB,2
	CALL	CLOCK		;13. BIT 0  Charge pump gain ACTIVE
	BSF	PORTB,2
	CALL	CLOCK		;14. BIT 1 = VCO KARAKTERISZTIKA +
	BCF	PORTB,2
	CALL	CLOCK		;15. BIT 0		
	NOP
	CALL	CLOCK		;16. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;17. BIT 1  15-17.bit = Digital Lock Detect
	BCF	PORTB,2
	CALL	CLOCK		;18. BIT 0
	NOP
	CALL	CLOCK		;19. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;20. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;21. BIT 0
	NOP
	CALL	LE		;F REGISZTER ÁTÍRÁSA

				 
;;;;;;;;;;;;;; R REGISZTER ÍRÁSA  (R osztása 1000) ;;;;;;;;;;;;;;;;;

	BSF	PORTB,2		;1. BIT 1 = LD PRECISION 5 CIKLUS
	CALL	CLOCK
	BCF	PORTB,2
	CALL	CLOCK		;2.- 9. BIT 0
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK
	NOP
	CALL	CLOCK		;9. BIT 0
	BSF	PORTB,2		
	CALL	CLOCK		;10. BIT 1
	NOP
	CALL	CLOCK		;11. BIT 1
	NOP
	CALL	CLOCK		;12. BIT 1
	NOP
	CALL	CLOCK		;13. BIT 1
	NOP
	CALL	CLOCK		;14. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;15. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;16. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;17. BIT 0
	NOP
	CALL	CLOCK		;18. BIT 0
	NOP
	CALL	CLOCK		;19. BIT 0
	NOP
	CALL	CLOCK		;20. BIT 0
	NOP
	CALL	CLOCK		;21. BIT 0
	NOP
	CALL	LE		;R REGISZTER ÁTÍRÁSA

	GOTO	NOAA15		;induláskor automatikusan a NOAA15 frekijét állítja be			
	

ALTAT:	BSF	INTCON,GIE
	BCF	STATUS,RP0
	BCF	STATUS,RP1
	MOVFW	PORTB
	SLEEP
	BCF	INTCON,RBIF






BEGOMB:	BTFSS	PORTB,4		;PORTB 4 tesztelése és ugrás ha 1
	GOTO	NOAA15		;UGRÁS NOAA15 FREKI BETÖLTÉSHEZ
	BTFSS	PORTB,5		;PORTB 5 tesztelése és ugrás ha 1
	GOTO	NOAA17		;ugrás NOAA17 freki betöltéshez
	BTFSS	PORTB,6		;PORTB 6 tesztelése és ugrás ha 1
	GOTO	NOAA18		;ugrás NOAA18 freki betöltéshez
	BTFSS	PORTB,7		;PORTB 7 tesztelése és ugrás ha 1
	GOTO	NOAA19		;ugrás NOAA19 freki betöltéshez
	GOTO	ALTAT		;ha egyik gomb sincs lenyomva altatja a PICet
	
 


;;;;;;;;; N regiszter írása NOAA 15 frekijének megfelelően VCO frekvencia 148,32MHz (N osztása 14832);;;;;;;;;;

NOAA15:	BCF	PORTB,1		;LE láb alacsonyra húzása
	BSF	PORTB,2
	CALL	CLOCK		;1. BIT 1 = ICP0=1mA
	BCF	PORTB,2
	CALL	CLOCK		;2. BIT 0
	NOP
	CALL	CLOCK		;3. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;4. BIT 1
	NOP
	CALL	CLOCK		;5. BIT 1
	NOP
	CALL	CLOCK		;6. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;7. BIT 0
	NOP
	CALL	CLOCK		;8. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;9. BIT 1
	NOP
	CALL	CLOCK		;10. BIT 1
	NOP
	CALL	CLOCK		;11. BIT 1
	NOP
	CALL	CLOCK		;12. BIT 1
	NOP
	CALL	CLOCK		;13. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;14. BIT 0
	NOP
	CALL	CLOCK		;15. BIT 0
	NOP
	CALL	CLOCK		;16. BIT 0
	NOP
	CALL	CLOCK		;17. BIT 0
	NOP
	CALL	CLOCK		;18. BIT 0
	NOP
	CALL	CLOCK		;19. BIT 0
	NOP
	CALL	CLOCK		;20. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;21. BIT 1
	BCF	PORTB,2		;DATA láb alacsonyra húzása
	BSF	PORTB,1		;LE láb magasra húzása R regiszter átírása miatt 
				;és magasan tartása a további zavarvédelem miatt
	MOVLW	B'00000001'
	MOVWF	PORTA		;RA0 láb magasra húzása a többi pedig alacsonyra
	GOTO	ALTAT		;ugrás a PIC altatásához következő gombnyomásig


				
;;;;;;;;; N regiszter írása NOAA 17 frekijének megfelelően VCO frekvencia 148,2MHz (N osztása 14820);;;;;

NOAA17:	BCF	PORTB,1		;LE láb alacsonyra húzása
	BSF	PORTB,2
	CALL	CLOCK		;1. BIT 1 = ICP0=1mA
	BCF	PORTB,2
	CALL	CLOCK		;2. BIT 0
	NOP
	CALL	CLOCK		;3. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;4. BIT 1
	NOP
	CALL	CLOCK		;5. BIT 1
	NOP
	CALL	CLOCK		;6. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;7. BIT 0
	NOP
	CALL	CLOCK		;8. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;9. BIT 1
	NOP
	CALL	CLOCK		;10. BIT 1
	NOP
	CALL	CLOCK		;11. BIT 1
	NOP
	CALL	CLOCK		;12. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;13. BIT 0
	NOP
	CALL	CLOCK		;14. BIT 0
	NOP
	CALL	CLOCK		;15. BIT 0
	NOP
	CALL	CLOCK		;16. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;17. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;18. BIT 0
	NOP
	CALL	CLOCK		;19. BIT 0
	NOP
	CALL	CLOCK		;20. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;21. BIT 1
	BCF	PORTB,2		;DATA láb alacsonyra húzása
	BSF	PORTB,1		;LE láb magasra húzása R regiszter átírása miatt 
				;és magasan tartása a további zavarvédelem miatt
	MOVLW	B'00000010'
	MOVWF	PORTA		;RA1 láb magasra húzása a többi pedig alacsonyra
	GOTO	ALTAT		;ugrás a PIC altatásához következő gombnyomásig
	
				
;;;;;;;,, N regiszter írása NOAA 18 frekijének megfelelően VCO frekvencia 148,61MHz (N osztása 14861);;;;;;

NOAA18:	BCF	PORTB,1		;LE láb alacsonyra húzása
	BSF	PORTB,2
	CALL	CLOCK		;1. BIT 1 = ICP0=1mA
	BCF	PORTB,2
	CALL	CLOCK		;2. BIT 0
	NOP
	CALL	CLOCK		;3. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;4. BIT 1
	NOP
	CALL	CLOCK		;5. BIT 1
	NOP
	CALL	CLOCK		;6. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;7. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;8. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;9. BIT 0
	NOP
	CALL	CLOCK		;10. BIT 0
	NOP
	CALL	CLOCK		;11. BIT 0
	NOP
	CALL	CLOCK		;12. BIT 0
	NOP
	CALL	CLOCK		;13. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;14. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;15. BIT 0
	NOP
	CALL	CLOCK		;16. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;17. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;18. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;19. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;20. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;21. BIT 1
	BCF	PORTB,2		;DATA láb alacsonyra húzása
	BSF	PORTB,1		;LE láb magasra húzása R regiszter átírása miatt 
				;és magasan tartása a további zavarvédelem miatt
	MOVLW	B'00000100'
	MOVWF	PORTA		;RA2 láb magasra húzása a többi pedig alacsonyra
	GOTO	ALTAT		;ugrás a PIC altatásához következő gombnyomásig
	



;;;;;;;;; N regiszter írása NOAA 19 frekijének megfelelően VCO frekvencia 147,8MHz (N osztása 14780);;;;;;;;;;

NOAA19:	BCF	PORTB,1		;LE láb alacsonyra húzása
	BSF	PORTB,2
	CALL	CLOCK		;1. BIT 1 = ICP0=1mA
	BCF	PORTB,2
	CALL	CLOCK		;2. BIT 0
	NOP
	CALL	CLOCK		;3. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;4. BIT 1
	NOP
	CALL	CLOCK		;5. BIT 1
	NOP
	CALL	CLOCK		;6. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;7. BIT 0
	NOP
	CALL	CLOCK		;8. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;9. BIT 1
	NOP
	CALL	CLOCK		;10. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;11. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;12. BIT 1
	NOP
	CALL	CLOCK		;13. BIT 1
	NOP
	CALL	CLOCK		;14. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;15. BIT 0
	NOP
	CALL	CLOCK		;16. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;17. BIT 1
	BCF	PORTB,2
	CALL	CLOCK		;18. BIT 0
	NOP
	CALL	CLOCK		;19. BIT 0
	NOP
	CALL	CLOCK		;20. BIT 0
	BSF	PORTB,2
	CALL	CLOCK		;21. BIT 1
	BCF	PORTB,2		;DATA láb alacsonyra húzása
	BSF	PORTB,1		;LE láb magasra húzása R regiszter átírása miatt 
				;és magasan tartása a további zavarvédelem miatt
	MOVLW	B'00001000'
	MOVWF	PORTA		;RA3 láb magasra húzása a többi pedig alacsonyra
	GOTO	ALTAT		;ugrás a PIC altatásához következő gombnyomásig
	







CLOCK:	BSF	PORTB,3
	NOP
	BCF	PORTB,3
	RETURN

LE:	BSF	PORTB,1
	NOP
	BCF	PORTB,1
	RETURN
 	END
