﻿;*** Krmiljenje sintetizatorja z ADF4351 za NoviZIF 1.2GHz - S53MV 08.08.2019 ***

;*** Uporaba priključkov PIC12F675 Vss(8) Vdd(1) ***
;GP0(7) - CMOS izhod (LE ADF4351)
;GP1(6) - CMOS izhod (DATA ADF4351)
;GP2(5) - CMOS izhod (CLK ADF4351)
;GP3(4) - CMOS vhod (MUXOUT ADF4351)
;GP4(3) - analogni vhod AN3 (izbira frekvence z upori)
;GP5(2) - nepovezan vhod

;*** Izbira procesorja in zacetek programa ***
	LIST	P=12F675
	ORG	0

;*** Inicializacija vhodi/izhodi *** (W,30)
	MOVLW	0	;brisi vse izhode A
	MOVWF	5
	BSF	3,5	;RP0=1 nastavim banko 1 za dostop do nastavitev
	MOVLW	18	;TRISIO(85) vhoda 4,3, izhodi 5,2,1,0
	MOVWF	5
	MOVLW	68	;ANSEL(9F)=01101000 Fosc/64, analogni vhod AN3
	MOVWF	1F
	BCF	3,5	;RP0=0 vrnem banko 0
	MOVLW	0FF	;neveljaven kanal (30)
	MOVWF	30
	GOTO	ZANKA

;*** Glavna zanka programa ***
ZANKA	CALL	KASNI	;zakasnitev 65536 NOP
	CALL	UNLOCK	;preveri uklenitev zanke
	CALL	ADC	;AD pretvornik na vhodu AN3
	SUBWF	30,0	;spremenjen kanal?
	BTFSC	3,2
	GOTO	ZANKA
	CALL	INIREG	;nastavi registre 5,4,3,2,1 ADF4351
	CALL	ADC	;AD pretvornik na vhodu AN3
	MOVWF	30
	CALL	FREQ	;nastavi frekvenco (W) v registru 0 ADF4351
	GOTO	ZANKA

;*** Preveri uklenitev zanke *** (W,30)
UNLOCK	BTFSC	5,3
	RETURN
	MOVLW	0FF	;neveljaven kanal (30)
	MOVWF	30
	RETURN

;*** AD pretvornik na vhodu AN3 *** (W,20)
ADC	MOVLW	0F	;ADCON0(1F) ADFM=0,VCFG=0,CHS=11,GO/DONE=1,ADON=1
	MOVWF	1F
ADC1	BTFSC	1F,1	;konec pretvorbe GO/DONE=?
	GOTO	ADC1
	MOVF	1E,0	;ADRESH(1E)
	MOVWF	6	;AD izhod na RB0-7
	MOVWF	20
	RRF	20,1	;izlusci gornje 3 bite (20)
	RRF	20,1
	RRF	20,1
	RRF	20,1
	RRF	20,1
	MOVLW	7
	XORWF	20,1
	ANDWF	20,1
	INCF	20,1	;pretvori v kanal 1-5 (W)
	RRF	20,1
	INCF	20,1
	ANDWF	20,0
	RETURN

;*** Nastavi registre 5,4,3,2,1 ADF4351 *** (W,20-25)
INIREG	MOVLW	0	;register5=0x00580005: LD=01
	MOVWF	20
	MOVLW	58
	MOVWF	21
	MOVLW	0
	MOVWF	22
	MOVLW	5
	MOVWF	23
	CALL	SPI
	MOVLW	0	;register4=0x009FE03C: FB=1,RFD=001,BSCD=254=0xFE,VPD=0,MTLD=0,AOS=0,AOE=0,AOP=00,ROE=1,OP=11
	MOVWF	20
	MOVLW	9F
	MOVWF	21
	MOVLW	0E0
	MOVWF	22
	MOVLW	3C
	MOVWF	23
	CALL	SPI	
	MOVLW	0	;register3=0x00800003: BSCM=1,ABP=0,CC=0,CSR=0,CDM=00,CDV=000000000000
	MOVWF	20
	MOVLW	80
	MOVWF	21
	MOVLW	0
	MOVWF	22
	MOVLW	3
	MOVWF	23
	CALL	SPI	
	MOVLW	78	;register2=0x78006642: NM=11,MUXOUT=110,RD=0,RDIV2=0,R=0000000001,DB=1,CPCS=0011,LDF=0,LDP=0,PDP=1,PD=0,CPTS=0,CR=0
	MOVWF	20
	MOVLW	0
	MOVWF	21
	MOVLW	66
	MOVWF	22
	MOVLW	42
	MOVWF	23
	CALL	SPI	
	MOVLW	0	;register1=0x0000FD01: PA=0,PR=0,PV=000000000001,MOD=4000=0xFA0=111110100000
	MOVWF	20
	MOVLW	0
	MOVWF	21
	MOVLW	0FD
	MOVWF	22
	MOVLW	1
	MOVWF	23
	CALL	SPI
	RETURN

;*** Nastavi frekvenco kanala 0-4 (W) v registru 0 ADF4351 *** (W,20-25)
FREQ	MOVWF	20
	DECFSZ	20,1
	GOTO	FREQ1
	MOVLW	0	;frekvenca1=1245.000MHz=0x0026E590
	MOVWF	20
	MOVLW	26
	MOVWF	21
	MOVLW	0E5
	MOVWF	22
	MOVLW	90
	MOVWF	23
	CALL	SPI
	RETURN
FREQ1	DECFSZ	20,1
	GOTO	FREQ2
	MOVLW	0	;frekvenca2=1271.000MHz=0x0027B6B0
	MOVWF	20
	MOVLW	27
	MOVWF	21
	MOVLW	0B6
	MOVWF	22
	MOVLW	0B0
	MOVWF	23
	CALL	SPI
	RETURN
FREQ2	DECFSZ	20,1
	GOTO	FREQ3
	MOVLW	0	;frekvenca3=1274.500MHz=0x0027D200
	MOVWF	20
	MOVLW	27
	MOVWF	21
	MOVLW	0D2
	MOVWF	22
	MOVLW	8
	MOVWF	23
	CALL	SPI
	RETURN
FREQ3	DECFSZ	20,1
	GOTO	FREQ4
	MOVLW	0	;frekvenca4=1276.872MHz=0x0027E490
	MOVWF	20
	MOVLW	27
	MOVWF	21
	MOVLW	0E4
	MOVWF	22
	MOVLW	90
	MOVWF	23
	CALL	SPI
	RETURN
FREQ4	MOVLW	0	;frekvenca5=1298.680MHz=0x002894F0
	MOVWF	20
	MOVLW	28
	MOVWF	21
	MOVLW	94
	MOVWF	22
	MOVLW	0F0
	MOVWF	23
	CALL	SPI
	RETURN

;*** Zakasnitev 65536 NOP *** (W,20,21)
KASNI	MOVLW	0
	MOVWF	20
	MOVWF	21
KASNI1	NOP
	DECFSZ	20,1
	GOTO	KASNI1
	DECFSZ	21,1
	GOTO	KASNI1
	RETURN

;*** Oddaja 32 bitov iz 20,21,22,23 na SPI *** (W,24,25)
SPI	MOVF	20,0	;prvih 8 bitov
	CALL	SPI1
	MOVF	21,0	;drugih 8 bitov
	CALL	SPI1
	MOVF	22,0	;tretjih 8 bitov
	CALL	SPI1
	MOVF	23,0	;zadnjih 8 bitov
	CALL	SPI1
	BSF	5,0	;impulz LE ADF4351 (GP0)
	NOP
	BCF	5,0
	RETURN
SPI1	MOVWF	24	;pomikalni register 24
	MOVLW	8	;stevec bitov 25
	MOVWF	25
SPI2	BCF	5,1	;ADF4351 DATA=0 (GP1)
	BTFSC	24,7
	BSF	5,1	;ADF4351 DATA=1 (GP1)
	RLF	24,1	;zasukaj pomikalni register
	BSF	5,2	;impulz CLK ADF4351 (GP2)
	NOP
	BCF	5,2
	DECFSZ	25,1
	GOTO	SPI2
	RETURN

;*** Nastavi konfiguracijo PICa 12F675 *** (BOR,PWRTEN)
	ORG	2007	;naslov konfiguracijske besede
	DW	21D4	;BG1BG0=10,000,/CPD=1,/CP=1,BODEN=1,MCLRE=0,/PWRTEN=1,WDTE=0,OSC=100

	END
;*** Konec programa ***
