;DEVICE = 16F628A
;Jammerdan - aka Silencer. Control a LMX2306 PLL and VCO to jam FM broadcasts. T
unes to 107.9 MHz then steps down to 87.2 MHz.
;TODO: Detector to lock onto offending portable and a lightshow.
LIST
P=16F628a, F=INHX8M
#include <p16f628a.inc>
__CONFIG 0x2001
; XT OSC, RA5-MCLR
; Equates
RESET_V
OSC_FREQ
EQU
EQU
0x00
D'4000000'
; Registers
PLLHI
EQU
0x20
PLLLO
EQU
0x21
Word. Max value 0x07. Must be
GPCTR
EQU
0x22
DATABYTE
EQU
0x23
(gets destroyed)
#define
PLL_DATA
#define
PLL_CLK
#define
PLL_LE
;**************************************************************
; Begin Program
;**************************************************************
RESET
GOTO
ORG
START
ORG
RESET_V
; INT vector
;**************************************************************
; Initialization Routine
;**************************************************************
START
;
;
;
;
CLRF
CLRF
CLRF
STATUS
INTCON
PCLATH
BSF
MOVLW
MOVWF
CLRF
BCF
STATUS, RP0
0xFF
TRISA
TRISB
STATUS, RP0
; Select bank 1
CLRF
CLRF
GOTO
PORTB
PORTA
MAIN
;**************************************************************
; Subroutines
;**************************************************************
PLL_INIT
0011
BSF
PLL_LE
BCF
PLL_LE
MOVLW 0x0A
MOVWF GPCTR
CALL
OUT_ZEROES
MOVLW 0x94
MOVWF DATABYTE
CALL
OUT_BYTE
CALL
OUT_ZERO
CALL
OUT_ONE
CALL
OUT_ONE
BSF
PLL_LE
BCF
PLL_LE
MOVLW 0x0D
rd: 000000000000010100000
MOVWF GPCTR
ency of 100 kHz
CALL
OUT_ZEROES
MOVLW 0xA0
MOVWF DATABYTE
CALL
OUT_BYTE
BSF
PLL_LE
BCF
PLL_LE
RETURN
F9:F2
F1
C2
C1
Latch Data
PLL_LOAD
CALL
MOVLW
MOVWF
CALL
MOVFW
MOVWF
CALL
CALL
CALL
MOVFW
OUT_ZERO
0x05
GPCTR
OUT_ZEROES
PLLHI
DATABYTE
OUT_BYTE
OUT_ZERO
OUT_ZERO
PLLLO
; Clear GO bit
; Output Five Zeroes N18:N14
MOVWF
CALL
CALL
CALL
BSF
BCF
RETURN
DATABYTE
OUT_PLLLO
OUT_ZERO
OUT_ONE
PLL_LE
PLL_LE
ffset by 1!)
; C2
; C1
; Latch Data
OUT_ZERO
BCF
PLL_DATA
BSF
PLL_CLK
BCF
PLL_CLK
RETURN
OUT_ZEROES
th the number
OUT_ONE
BSF
PLL_DATA
BSF
PLL_CLK
BCF
PLL_CLK
RETURN
OUT_BYTE
0x08
GPCTR
RLF
BTFSC
CALL
BTFSS
CALL
DECFSZ
GOTO
RETURN
DATABYTE,1
STATUS,C
OUT_ONE
STATUS,C
OUT_ZERO
GPCTR,1
OUT_BYTE1
OUT_BYTE1
OUT_PLLLO
the swallow counter
DECF
)
SWAPF
RLF
MOVLW
MOVWF
GOTO
RETURN
in case
;
;
;
;
;
;
DATABYTE,1
DATABYTE,1
0x03
GPCTR
OUT_BYTE1
;**************************************************************
; Main Routine
;**************************************************************
MAIN
CALL
PLL_INIT
MOVLW
MOVWF
MOVLW
MOVWF
0x86
PLLHI
0x08
PLLLO
CALL
MOVLW
MOVWF
PLL_LOAD
0xFF
GPCTR
FREQSTART
; Divider set to 1079
FREQSET
LOOP
; Settle PLL
NOP
MOVWF
DATABYTE
ter...
LOOP1
NOP
NOP
DECFSZ
GOTO
NOP
NOP
DECFSZ
GOTO
DECFSZ
GOTO
DATABYTE,1
LOOP1
GPCTR,1
LOOP
PLLLO,1
FREQSET
MOVLW
MOVWF
DECF
MOVLW
SUBWF
0x08
PLLLO
PLLHI,1
0x6D
PLLHI,0
BTFSC
GOTO
GOTO
STATUS,Z
FREQSTART
FREQSET
EG
END