;Programme de pilotage de deux synthétiseurs MB1501 pour Nokia Talkman,
;TMF1 ou nokia620 d'après différentes sources de Victor F1BIU
;Utilisant un pic 16f84, pas de 6.25Khz avec oscillateur de référence 12.8Mhz.
;16 canaux avec 4 cavaliers (A,B,C,D) pour utilisation en simplex.
;fi à 21.4Mhz, battement infradyne.
;PLL Rx chargé au debut, PLL Tx décalé sur 442Mhz en Rx pour ne pas brouiller.
;oscillateur du pic par un circuit rc.
;Obligation de couper/alimenter le pic pour la prise en compte d'un nouveau canal.
;
; A compiler avec SPASM.EXE taper : 'spasm nok_simp.src'
;
; - f5soh@bigfoot.com - http://f5soh.free.fr/ - 02/04/2000
;----------------------------------------------------------
; D C B A Pll tx Pll rx Qrg Rx
;----------------------------------------------------------
; 0 0 0 0 432.6500 411.2500 (432.6500)
; 0 0 0 1 432.6625 411.2625 (432.6625)
; 0 0 1 0 432.6750 411.2750 (432.6750)
; 0 0 1 1 433.2250 411.8250 (433.2250)
; 0 1 0 0 433.2375 411.8375 (433.2375)
; 0 1 0 1 433.2500 411.8500 (433.2500)
; 0 1 1 0 433.2625 411.8625 (433.2625)
; 0 1 1 1 433.2750 411.8750 (433.2750)
;----------------------------------------------------------
; 1 0 0 0 433.2875 411.8875 (433.2875)
; 1 0 0 1 433.3000 411.8900 (433.3000)
; 1 0 1 0 433.3125 411.9125 (433.3125)
; 1 0 1 1 433.3250 411.9250 (433.3250)
; 1 1 0 0 433.3375 411.9375 (433.3375)
; 1 1 0 1 433.3500 411.9500 (433.3500)
; 1 1 1 0 433.3625 411.9625 (433.3625)
; 1 1 1 1 433.3750 411.9750 (433.3750)
;---------------------------------------------------------------------------DEVICE PIC16F84,RC_OSC,WDT_OFF,PWRT_OFF,PROTECT_OFF
id '1BIU'
org 0Ch
nb_clocks DS 1
Count0 DS 1
Count1 DS 1
temp DS 1
temp1 DS 1prediv_ref0 DS 1
prediv_ref1 DS 1_Atx DS 1
Nlsbtx DS 1
Nmsbtx DS 1_Arx DS 1
Nlsbrx DS 1
Nmsbrx DS 1_Adecal DS 1
Nlsbdecal DS 1
Nmsbdecal DS 1
_A equ RA.0 ;broche 17 du pic, r de 5.6k de rappel à 5v
_B equ RA.1 ;broche 18 du pic, r de 5.6k de rappel à 5v
_C equ RA.2 ;broche 1 du pic, r de 5.6k de rappel à 5v
_D equ RA.3 ;broche 2 du pic, r de 5.6k de rappel à 5vptt equ RA.4 ;broche 3 du pic, r de 5k6 de rappel à 5v (1=rx 0=tx)
_5v_tx = RB.4 ;sortie +5v Tx pour alim ampli/commutation, broche 10
enabletx = RB.3 ;sortie enableTx, broche 9 du pic.
data = RB.2 ;sortie datas, broche 8 du pic.
clock = RB.1 ;sortie clock, broche 7 du pic.
enablerx = RB.0 ;sortie enableRx, broche 6 du pic.;-----------------------------------------------------------------------------------
; début du programme principalorg 0
Start
mov !RA,#00011111b ;RA0 à RA4 = entrées
mov !RB,#00000000b ;RB0 à RB7 = sorties.
mov RB,#000h ;les sorties à 0 au début.
mov count0,#0
mov count1,#0mov prediv_ref0,#00000000b ;2048 pour pas de 6.25Khz, lsb
mov prediv_ref1,#00100000b ;suite msb osc réf = 12.8Mhz
;mot de 6 bits, 2 lsb ignorés.mov Nmsbdecal,#002h ;canal Tx pendant le Rx (simplex)
mov Nlsbdecal,#028h ; (442Mhz sans commutation PA)
mov _Adecal,#041h
;lecture des entrées RA0 , RA1 , RA2 , RA3
; 1 2 4 8 => valeur binaire => canal
;renvoi sur les valeurs Nlsb??, Nmsb?? et _A?? du canal correspondantmov temp1,RA
and temp1, #00001111b
cje temp1,#0, :c0m
cje temp1,#1, :c1m
cje temp1,#2, :c2m
cje temp1,#3, :c3m
cje temp1,#4, :c4m
cje temp1,#5, :c5m
cje temp1,#6, :c6m
cje temp1,#7, :c7mcje temp1,#8, :c0p
cje temp1,#9, :c1p
cje temp1,#10, :c2p
cje temp1,#11, :c3p
cje temp1,#12, :c4p
cje temp1,#13, :c5p
cje temp1,#14, :c6p
cje temp1,#15, :c7p
jmp :apres
;---------------------------------------------------------------------------
; caractéristiques canaux
; +1 sur _Atx et _Arx par rapport au calcul. Sinon décalage de -6.25Khz ????
; C'est pour avoir la qrg ok ...... Bref, c'est bon comme ça !:c0m mov Nmsbtx,#002h ; 432.650 Mhz
mov Nlsbtx,#01Ch
mov _Atx,#069h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#009h
jmp :apres:c1m mov Nmsbtx,#002h ; 432.6625 Mhz
mov Nlsbtx,#01Ch
mov _Atx,#06Bh
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#00Bh
jmp :apres:c2m mov Nmsbtx,#002h ; 432.675 Mhz
mov Nlsbtx,#01Ch
mov _Atx,#06Dh
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#00Dh
jmp :apres
:c3m mov Nmsbtx,#002h ; 433.225Mhz
mov Nlsbtx,#01Dh
mov _Atx,#045h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#065h
jmp :apres
:c4m mov Nmsbtx,#002h ;433.2375Mhz
mov Nlsbtx,#01Dh
mov _Atx,#047h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#067h
jmp :apres:c5m mov Nmsbtx,#002h ; 433.250Mhz
mov Nlsbtx,#01Dh
mov _Atx,#049h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#069h
jmp :apres
:c6m mov Nmsbtx,#002h ;433.2625Mhz
mov Nlsbtx,#01Dh
mov _Atx,#04Bh
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#06Bh
jmp :apres
:c7m mov Nmsbtx,#002h ;433.275Mhz
mov Nlsbtx,#01Dh
mov _Atx,#04Dh
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#06Dh
jmp :apres;-----------------------------------------------------------------------------
:c0p mov Nmsbtx,#002h ;433.2875Mhz
mov Nlsbtx,#01Dh
mov _Atx,#04Fh
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#06Fh
jmp :apres
:c1p mov Nmsbtx,#002h ;433.300Mhz
mov Nlsbtx,#01Dh
mov _Atx,#051h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#071h
jmp :apres
:c2p mov Nmsbtx,#002h ;433.3125Mhz
mov Nlsbtx,#01Dh
mov _Atx,#053h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#073h
jmp :apres
:c3p mov Nmsbtx,#002h ;433.325Mhz
mov Nlsbtx,#01Dh
mov _Atx,#055h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#075h
jmp :apres
:c4p mov Nmsbtx,#002h ;433.3375Mhz
mov Nlsbtx,#01Dh
mov _Atx,#057h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#077h
jmp :apres
:c5p mov Nmsbtx,#002h ;433.350Mhz
mov Nlsbtx,#01Dh
mov _Atx,#059h
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#079h
jmp :apres
:c6p mov Nmsbtx,#002h ;433.3625Mhz
mov Nlsbtx,#01Dh
mov _Atx,#05Bh
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#07Bh
jmp :apres
:c7p mov Nmsbtx,#002h ;433.375Mhz
mov Nlsbtx,#01Dh
mov _Atx,#05Dh
mov Nmsbrx,#002h
mov Nlsbrx,#002h
mov _Arx,#07Dh
jmp :apres;----------------------------------------------------------------------------
:apres
setb _5v_tx ;envoi d'un niveau haut bref à la mise sous tension
call tempo ;sur la broche 10 du pic (Led Tx)
clrb _5v_tx
call tempo_lente ; attente pour l'alimentation des Pll's
call tempo_lente
call envoi_vers_pll_ref_rx
call envoi_vers_pll_div_princ_rx
jnb ptt, :tx ;si broche ptt=0 goto :tx
:rx
clrb _5v_tx ;coupure du PA
call envoi_vers_pll_ref_tx
call envoi_vers_pll_div_princ_txdecal ;décalage Vco sur 442Mhz
jmp :rx_loop
:rx_loop
jnb ptt, :tx
jmp :rx_loop
:tx
call envoi_vers_pll_ref_tx
call envoi_vers_pll_div_princ_tx
call tempo ; 24ms d'attente pour verrouillage PLL
setb _5v_tx ; commutation du PA
jmp :tx_loop
:tx_loop
jb ptt, :rx ;si broche ptt=1 retour en :rx
jmp :tx_loop; fin programme principal
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
;envoi taux de division référence pll Txenvoi_vers_pll_ref_tx
clrb data ;sw = 0, prediv =128
nop
setb clock
nop
clrb clock
nopmov nb_clocks,#6
mov temp,prediv_ref1 ;envoi 6bits msb prédiv référence
:rotationAT movb data,temp.7
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationATmov nb_clocks,#8
mov temp,prediv_ref0 ;envoi 8bits lsb prédiv référence
:rotationBT movb data,temp.7
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationBT
nop
nop
setb data ;envoi bit C de contrôle à 1
nop
setb clock
nop
clrb clock
nop
setb enabletx ;envoi de l'enable après les 16 bits.
nop
nop
clrb enabletx
nop
nop
clrb data ; les 3 fils du pll retombent a 0.
nop
nop
ret;envoi taux de division référence pll Rx
envoi_vers_pll_ref_rx
clrb data ;sw = 0, prediv =128
nop
setb clock
nop
clrb clock
nopmov nb_clocks,#6
mov temp,prediv_ref1 ;envoi 6bits msb prédiv référence
:rotationAR movb data,temp.7
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationARmov nb_clocks,#8
mov temp,prediv_ref0 ;envoi 8bits lsb prédiv référence
:rotationBR movb data,temp.7
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationBR
nop
nop
setb data ;envoi bit C de contrôle à 1
nop
setb clock
nop
clrb clock
nop
setb enablerx ;envoi de l'enable après les 16 bits.
nop
nop
clrb enablerx
nop
nop
clrb data ; les 3 fils du pll retombent a 0.
nop
nop
ret;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;envoi taux de division principale vers pll Txenvoi_vers_pll_div_princ_tx
mov nb_clocks,#3
mov temp,Nmsbtx ;envoi 3bits poids faible du msb
:rotationDT movb data,temp.2 ;5 bits msb ignorés
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationDT
mov nb_clocks,#8
mov temp,Nlsbtx ;envoi 8bits lsb division principale
:rotationET movb data,temp.7
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationET
mov nb_clocks,#7
mov temp,_Atx ;envoi 7bits prédivision modulus
:rotationFT movb data,temp.6
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationFTclrb data ;envoi bit C de contrôle à 0
setb clock
nop
clrb clock
nop
clrb data
nop
setb enabletx ;envoi de l'enable après les 19 bits.
nop
nop
clrb enabletx
nop
clrb data ; les 3 fils du pll retombent à 0.
nop
nop
ret;envoi taux de division principale vers pll Rx
envoi_vers_pll_div_princ_rx
mov nb_clocks,#3
mov temp,Nmsbrx ;envoi 3bits poids faible du msb
:rotationDR movb data,temp.2 ;5 bits msb ignorés
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationDR
mov nb_clocks,#8
mov temp,Nlsbrx ;envoi 8bits lsb division principale
:rotationER movb data,temp.7
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationER
mov nb_clocks,#7
mov temp,_Arx ;envoi 7bits prédivision modulus
:rotationFR movb data,temp.6
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationFRclrb data ;envoi bit C de contrôle à 0
setb clock
nop
clrb clock
nop
clrb data
nop
setb enablerx ;envoi de l'enable après les 19 bits.
nop
nop
clrb enablerx
nop
clrb data ; les 3 fils du pll retombent à 0.
nop
nop
ret;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
; décalage PLL Tx sur 442Mhz pendant la réception
;
envoi_vers_pll_div_princ_txdecal
mov nb_clocks,#3
mov temp,Nmsbdecal ;envoi 3bits poids faible du msb
:rotationDD movb data,temp.2 ;5 bits msb ignorés
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationDD
mov nb_clocks,#8
mov temp,Nlsbdecal ;envoi 8bits lsb division principale
:rotationED movb data,temp.7
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationED
mov nb_clocks,#7
mov temp,_Adecal ;envoi 7bits prédivision modulus
:rotationFD movb data,temp.6
setb clock
nop
clrb clock
nop
rl temp
djnz nb_clocks,:rotationFDclrb data ;envoi bit C de contrôle à 0
setb clock
nop
clrb clock
nop
clrb data
nop
setb enabletx ;envoi de l'enable après les 19 bits.
nop
nop
clrb enabletx
nop
clrb data ; les 3 fils du pll retombent à 0.
nop
nop
ret
;---------------------------------------------------------------------------
tempo_lente
mov Count1,#255
:lop2 mov Count0,#255 ;tempo_lente
:Loop2 djnz Count0,:Loop2
djnz Count1,:Lop2
ret
;---------------------------------------------------------------------------
tempo
mov Count1,#160
:lop3 mov Count0,#200 ;tempo de 24 ms
:Loop3 djnz Count0,:Loop3
djnz Count1,:Lop3
ret
;---------------------------------------------------------------------------