FT655 3BandTRV_PICプログラム
トランスバーターのPLLを制御するPIC16F84のアセンブラリスト(参考)
; PIC16F84
; FTー655トランスバーター コントロールプログラム
;
; Ver 1.01 1998/02/06 by JR6BIJ
;
; PIC16F84-10/P asm PA.EXE writer PICW.EXE
;
; PIN_No. I/O
;
; RA0(17) BAND(2or3or5) I
; RA1(18) BAND(4or5) I
; RA2(01) [F] Key(S0) I
; RA3(02) [BAND] Key(S2) I
; RA4(03) TX_Control(Key) O
; RB0(06) PLL_CLOCK O
; RB1(07) PLL_DATA O
; RB2(08) PLL_LE1(VCO1) O
; RB3(09) PLL_LE2(VCO2) O
; RB4(10) 144Band O
; RB5(11) 430Band O
; RB6(12) 1200Band O
; RB7(13) STBY_Input I
;
.include 16f84.h
.osc xt ;Xtal 10MHz
.wdt off ;ウォッチドッグOFF
.pwrt on ;パワーアップタイマON
.protect off ;プロテクトOFF
;---------- Register Files ----------
F equ 01h
W equ 00h
;TMR0 equ 01h
;PCL equ 02h
;STATUS equ 03h
;FSR equ 04h
;PORTA equ 05h
;PORTB equ 06h
;EEDATA equ 08h
;EEADR equ 09h
;PCLATH equ 0ah
;INTCON equ 0bh
;
OPTION_REG equ 81h
TRISA equ 85h
TRISB equ 86h
;EECON1 equ 88h
;EECON2 equ 89h
;---------- STATUS Bits ----------
;RP0 equ 05h ;Bank Select
;Z equ 02h ;Zero Flag
;DC equ 01h ;Digit Carry/not_Borrow
;C equ 00h ;Carry/not_Borrow
;---------- INTCON Bits ----------
;GIE equ 07h ;Global interrupt Enable
;EEIE equ 06h ;EE Write Complete Interrupt Enable
;---------- OPTION Bits ----------
;RBPU equ 07h ;PORTB Pull-up Enable
;---------- EECON1 Bits ----------
;EEIF equ 04h ;EEPROM Write Operation
Interrupt Flag
;WRERR equ 03h ;EEPROM Error Flag
;WREN equ 02h ;EEPROM Write Enable
;WR equ 01h ;Write Control
;RD equ 00h ;Read Control
;####### EEPROM Address #######
TRV_Mode equ 00h ;トランスバーターMode (未使用)
TRV_Band equ 01h ;トランスバーターBand Data (1-3)
;####### RAM Data Address #######
MAIN_Band equ 0ch ;Main Band (1-6)-->(0,1,2,3)
MAIN_Band2 equ 0dh ;Main Band チェック用
TRV_Band1 equ 0eh ;トランスバーターBand RAM Data
;TX時はMAIN_Bandに従いON/OFFする
PLCNT equ 10h ;Shift bit Work レジスタアドレス
PLDAT equ 11h ;Shift Data Work レジスタアドレス
PLDAT2 equ 12h ;
PLDAT3 equ 13h ;
PLLNUM equ 14h ;PLL_1,PLL_2番号
DLC1 equ 15h ;Wait カウント用レジスタ1
DLC2 equ 16h ;Wait カウント用レジスタ2
DLC3 equ 17h ;Wait カウント用レジスタ3
;---------- PORT Bits ----------
;(PORTA)
BAND_a equ 00h ;RA0 Main 2 or 3
BAND_b equ 01h ;RA1 Main 4
;If(BAND_a)and(BAND_b)then Main 5
S0 equ 02h ;RA2 Key_Bord S0 [F]
S2 equ 03h ;RA3 Key_Bord S2 [BAND]
TX equ 04h ;RA4 Tx Control (KEY)
;(POTB)
PLL_CK equ 00h ;RB0 PLL Clock
PLL_DT equ 01h ;RB1 PLL Data
PLL_LE1 equ 02h ;RB2 PLL LE for VCO1
PLL_LE2 equ 03h ;RB3 PLL LE for VCO2
BAND144 equ 04h ;RB4 144MHz Band
BAND430 equ 05h ;RB5 430MHz Band
BAND1200 equ 06h ;RB6 1200MHz Band
STBY equ 07h ;RB7 STBY
;---------- PLL 分周比Data ----------
N128_1 equ 00001010b ;refカウンタ分周比1/1280の上位7bit
;及びプリスケーラ分周比1/128
N128_2 equ 00000001b ;refカウンタ分周比1/1280の下位7bit
;コントロールbitは'H'
N64_1 equ 10001010b ;refカウンタ分周比1/1280の上位7bit
;及びプリスケーラ分周比1/64
N64_2 equ 00000001b ;refカウンタ分周比1/1280の下位7bit
;コントロールbitは'H'
;(144MHz,430MHz,1200MHzLow)---PLL_1 M=1/64 N=156 A=16
V100_1 equ 00000000b ;P.C156の上位3bit
V100_2 equ 10011100b ; 下位8bit
V100_3 equ 00100000b ;SW.C16の7bit及びCNTbit'L'
;(1200MHzRep-TX)--------------PLL_1 M=1/64 N=164 A=4
V105_1 equ 00000000b ;P.C164の上位3bit
V105_2 equ 10100100b ; 下位8bit
V105_3 equ 00001000b ;SW.C4の7bit及びCNTbit'L'
;(1200MHzHight)---------------PLL_1 M=1/64 N=179 A=44
V115_1 equ 00000000b ;P.C179の上位3bit
V115_2 equ 10110011b ; 下位8bit
V115_3 equ 01011000b ;SW.C44の7bit及びCNTbit'L'
;(1200MHzRep-TX)--------------PLL_2 M=1/128 N=881 A=32
V1128_1 equ 01100000b ;P.C881の上位3bit
V1128_2 equ 01110001b ; 下位8bit
V1128_3 equ 01000000b ;SW.C32の7bit及びCNTbit'L'
;(1200MHzHight)---------------PLL_2 M=1/128 N=886 A=92
V1135_1 equ 01100000b ;P.C886の上位3bit
V1135_2 equ 01110110b ; 下位8bit
V1135_3 equ 10111000b ;SW.C92の7bit及びCNTbit'L'
;(1200MHzLow)-----------------PLL_2 M=1/128 N=898 A=56
V1150_1 equ 01100000b ;P.C898の上位3bit
V1150_2 equ 10000010b ; 下位8bit
V1150_3 equ 01110000b ;SW.C56の7bit及びCNTbit'L'
;
PLC8 equ 8h ;左シフト回数8回
PLC3 equ 3h ;左シフト回数3回
;===========================================================
; LIST P=16F84
org 00h
goto start
org 04h
goto start
;-----------------------------------------------------------
INIT
setb rp0
MOVLW 01111b ;RA0-3 input mode
mov !porta,w ;RA4 output mode
MOVLW 10000000b ;RB7 input mode
mov !portb,w ;RB0-6 output
clrb rp0
CLRF PORTA
CLRF PORTB
CALL TRV_SET ;トランスバーターMode,Bandのセット
RETURN
;-----------------------------------------------------------
; トランスバーターBandのチェンジ
BAND_CHENG
MOVLW TRV_Band
MOVWF EEADR ;EEPROMアドレスセット
CALL EEREAD ;読み出し W=TRV_Band
MOVWF TRV_Band1 ;RAMへ
INCF TRV_Band1,F ;Band=Band+1
BTFSC TRV_Band1,02h
CLRF TRV_Band1 ;元が1200MHzならTRV_Offへ
MOVF TRV_Band1,W
MOVWF EEDATA ;Data set
CALL EEWRITE ;書き込み W=TRV_Band(New)
RETURN
;-----------------------------------------------------------
; EEPROM 読み出し
EEREAD
setb rp0 ;Bank 1
setb RD
; BSF EECON1,0
clrb rp0 ;Bank 0
MOVF EEDATA,W ;W=EEDATA
RETURN
;-----------------------------------------------------------
; EEPROM 書き込み
EEWRITE
setb rp0 ;Bank 1
setb WREN ;Write Enable Bit ON
; BSF EECON1,2
MOVLW 55h ;おきまり
MOVWF EECON2
MOVLW 0AAh
MOVWF EECON2
setb WR ;書き込み開始
; BSF EECON1,1
CHECK1
jnb EEIF,CHECK1 ;書き込みチェック
clrb EEIF ;フラグクリアー
; BCF EECON1,4
clrb WREN ;Error フラグクリアー
; BCF EECON1,2
clrb rp0 ;Bank 0
RETURN
;-----------------------------------------------------------
; PLL_1 基準分周器の設定 N=1280 Prisc=1/64
PLLFRSET
MOVLW N64_1
MOVWF PLDAT2 ;上位8bit
MOVLW N64_2
MOVWF PLDAT3 ;下位8bit
BCF PLLNUM,0 ;PLL 1指定
CALL SETPLL2 ;出力
; PLL_2 基準分周器の設定 N=1280 Prisc=1/128
MOVLW N128_1
MOVWF PLDAT2 ;上位8bit
MOVLW N128_2
MOVWF PLDAT3 ;下位8bit
BSF PLLNUM,0 ;PLL 2指定
CALL SETPLL2 ;出力
RETURN
;-----------------------------------------------------------
; PLL_1 比較分周器の設定1 f=100MHz
PL100
MOVLW V100_1
MOVWF PLDAT
MOVLW V100_2
MOVWF PLDAT2
MOVLW V100_3
MOVWF PLDAT3
GOTO PL1SET
; PLL_1 比較分周器の設定2 f=105MHz
PL105
MOVLW V105_1
MOVWF PLDAT
MOVLW V105_2
MOVWF PLDAT2
MOVLW V105_3
MOVWF PLDAT3
GOTO PL1SET
; PLL_1 比較分周器の設定3 f=115MHz
PL115
MOVLW V115_1
MOVWF PLDAT
MOVLW V115_2
MOVWF PLDAT2
MOVLW V115_3
MOVWF PLDAT3
PL1SET
BCF PLLNUM,0 ;PLL 1指定
CALL SETPLL
RETURN
;-----------------------------------------------------------
; PLL_2 比較分周器の設定1 f=1128MHz
PL1128
MOVLW V1128_1
MOVWF PLDAT ;上位3bit
MOVLW V1128_2
MOVWF PLDAT2 ;上位8bit
MOVLW V1128_3
MOVWF PLDAT3 ;下位8bit
GOTO PL2SET
; PLL_2 比較分周器の設定2 f=1135MHz
PL1135
MOVLW V1135_1
MOVWF PLDAT
MOVLW V1135_2
MOVWF PLDAT2
MOVLW V1135_3
MOVWF PLDAT3
GOTO PL2SET
; PLL_2 比較分周器の設定3 f=1150MHz
PL1150
MOVLW V1150_1
MOVWF PLDAT
MOVLW V1150_2
MOVWF PLDAT2
MOVLW V1150_3
MOVWF PLDAT3
PL2SET
BSF PLLNUM,0 ;PLL 2指定
CALL SETPLL
RETURN
;-----------------------------------------------------------
; PLL 分周器設定出力
SETPLL
clc
MOVLW PLC3
MOVWF PLCNT
CALL PLDTOUT1 ;上位3bit出力
SETPLL2
MOVLW PLC8
MOVWF PLCNT
MOVF PLDAT2,W
MOVWF PLDAT
CALL PLDTOUT1 ;上位8bit出力
MOVLW PLC8
MOVWF PLCNT
MOVF PLDAT3,W
MOVWF PLDAT
CALL PLDTOUT1 ;下位8bit出力
BTFSC PLLNUM,0 ;bit0=0 THEN skip (LE1)
GOTO SP1
BSF PORTB,PLL_LE1 ;LE1 Up
NOP
NOP
BCF PORTB,PLL_LE1 ;LE1 Down
RETURN
SP1
BSF PORTB,PLL_LE2 ;LE2 Up
NOP
NOP
BCF PORTB,PLL_LE2 ;LE2 Down
RETURN
;-----------------------------------------------------------
; PLL へ設定Data出力
PLDTOUT1
RLF PLDAT,F ;左1bit Shift
jc PLDT1 ;キャリーフラグチェック
BCF PORTB,PLL_DT ;Data 'L' 出力
GOTO PLDT2
PLDT1
BSF PORTB,PLL_DT ;Data 'H' 出力
NOP
PLDT2 CALL CLOCKON ;Clock Up
NOP
CALL CLOCKOFF ;Clock Down
DECFSZ PLCNT,F ;Count=Count-1
GOTO PLDTOUT1
RETURN
;-----------------------------------------------------------
CLOCKON
BSF PORTB,PLL_CK ;ON
RETURN
;-----------------------------------------------------------
CLOCKOFF
BCF PORTB,PLL_CK ;OFF
RETURN
;-----------------------------------------------------------
; 親機のBand読み込み
FT655BAND
CLRF MAIN_BAND
BTFSC PORTA,BAND_a
BSF MAIN_BAND,BAND_a
BTFSC PORTA,BAND_b
BSF MAIN_BAND,BAND_b
MOVF MAIN_BAND,W ;W=MAIN_BAND
RETURN
;-----------------------------------------------------------
; トランスバーターBAND 出力
TRV_BAND_OUT
BTFSC TRV_Band1,1 ;144MHz Check
GOTO UP1
BSF PORTB,BAND144
BCF PORTB,BAND430
BCF PORTB,BAND1200
RETURN
UP1
BTFSC TRV_Band1,0 ;430MHz Check
GOTO UP2
BSF PORTB,BAND430
BCF PORTB,BAND144
BCF PORTB,BAND1200
RETURN
UP2
BCF PORTB,BAND144
BCF PORTB,BAND430
BSF PORTB,BAND1200 ;1200MHz
RETURN
;-----------------------------------------------------------
; トランスバーターBAND 出力(TRV OFF)
TRV_BAND_OUT0
BCF PORTB,BAND144
BCF PORTB,BAND430
BCF PORTB,BAND1200
RETURN
;-----------------------------------------------------------
; トランスバーターMode,Bandのセット(RX時)
; TRV_SETは初期のみ 運用時はTRV_SET1にて設定
TRV_SET
MOVLW TRV_Band
MOVWF EEADR ;EEPROMアドレスセット
CALL EEREAD ;読み出し W=TRV_Band
MOVWF TRV_Band1 ;RAMへ
CALL PLLFRSET ;PLL基準分周器の設定
CALL PL100 ;初期値は144MHz Bandに設定
CALL PL1135 ;VCO2の初期値
TRV_SET1
CALL FT655BAND ;親BANDの読み込み
MOVF MAIN_BAND,W
IORLW 0 ;親BANDは2~5の間?
jz TRV_SETEND0
MOVF TRV_Band1,W
IORLW 0 ;TRV Mode = 0 Then Off
jz TRV_SETEND0
BTFSC TRV_Band1,0 ;Bit0 チェック
GOTO TRV_SET2
;430MHz bit0 = 0 bit1 = 1
CALL PL100
BTFSC PORTB,STBY ;送信か?
GOTO TRV_SETEND ;RX
BTFSS MAIN_BAND,1 ;BAND4 or 5 ?
GOTO TRV_SETEND
GOTO OFF_BAND ;Off Band なので
;TXをLowにして送信停止
TRV_SET2
BTFSS TRV_Band1,1 ;bit1 チェック
GOTO TR144
;1200MHz bit0 = 1 bit1 = 1
BTFSS MAIN_BAND,1
GOTO R1200
;1290 - 1300MHz (RX,TX)
BTFSC MAIN_BAND,0
GOTO H1200
L1200
;1290 - 1295MHz (Low)
CALL PL100
CALL PL1150
GOTO TRV_SETEND
H1200
;1295 - 1300MHz (Hight)
CALL PL115
CALL PL1135
GOTO TRV_SETEND
R1200
;1270 - 1273MHz (Rep of TX)
BTFSC PORTB,STBY ;送信か?
GOTO L1200 ;RXなので1200Lowに設定
CALL PL105
CALL PL1128
GOTO TRV_SETEND
TR144
;144MHz
CALL PL100
BTFSC PORTB,STBY ;送信か?
GOTO TRV_SETEND ;RX
BTFSC MAIN_BAND,1 ;BAND2 or 3 ?
GOTO TRV_SETEND
GOTO OFF_BAND ;Off Band なので
;TXをLowにして送信停止
;---------- 送信制御 ------------
TRV_SETEND
CALL TRV_BAND_OUT
BSF PORTA,TX ;Hight-Z(Nomal)
RETURN
OFF_BAND
CALL TRV_BAND_OUT
BCF PORTA,TX ;Low 送信停止
RETURN
; RA4 はオープンドレインなので送信停止時にのみLow レベルにして
; 通常はH(Hight-Z)としておく
; 流れだしは無いので親機の送受信には影響しない
; トランスバーター部の送受信制御はBandとSTBYによって行う。
TRV_SETEND0
CALL TRV_BAND_OUT0
BSF PORTA,TX ;Hight-Z(Nomal)
RETURN
;---------- 0.5s Wait ----------
DELAY
CLRF DLC1
CLRF DLC2
MOVLW 6
MOVWF DLC3 ;1200ns
L1
DECFSZ DLC1,F ;256 Loop
GOTO L1 ;(256x3)x400ns=0.3072ms
DECFSZ DLC2,F ;256 Loop
GOTO L1 ;(0.3076ms)x256+0.3072
; =79.0528ms
DECFSZ DLC3,F ;6 Loop
GOTO L1 ;79.0528msx6=474.3168ms
RETURN ;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
START
CALL INIT
LOOP1
BCF PORTA,TX ;Low 送信停止
BTFSC PORTB,STBY ;送信か?
GOTO RX1 ;受信中
LOOP2
;受信の MAIN BAND を待避
CLRF MAIN_Band2 ;チェック用レジスタのクリア
MOVF MAIN_BAND,W ;
MOVWF MAIN_Band2 ;MAIN_BAND の待避
CALL TRV_SET1 ;PLL再設定
TX1
BTFSS PORTB,STBY ;受信に戻ったか?
GOTO TX1 ;まだ送信中!
MOVF MAIN_Band2,W ;
MOVWF MAIN_BAND ;MAIN_BAND の復帰
CALL TRV_SET1 ;PLL再設定
BSF PORTA,TX ;Hight-Z(Nomal)
RX1
;Key Bord のセンス [F]+[BAND]
BTFSC PORTA,S0 ;Key センス S0 [F]
GOTO LOOP3 ;押されていない
BTFSC PORTA,S2 ;S2 [BAND]
GOTO LOOP3 ;押されていない
BAND_X
;[F]+[BAND]キーが押された!
MOVF MAIN_BAND,W
IORLW 0 ;親BANDは2~5の間?
jz LOOP3 ;親BANDは1,6なのでBAND切替無効
CALL BAND_CHENG ;Band切り替え
CALL TRV_SET1 ;PLL設定
CALL DELAY ;0.5秒Wait
SENS1
BTFSC PORTA,S2 ;Key センス S2
GOTO LOOP3
GOTO SENS1 ;Keyを離すまで待つ。
LOOP3
;MAIN BAND の変更チェック
CLRF MAIN_Band2 ;チェック用レジスタのクリア
BTFSC PORTA,BAND_a
BSF MAIN_Band2,BAND_a
BTFSC PORTA,BAND_b
BSF MAIN_Band2,BAND_b
MOVF MAIN_BAND,W ;W=MAIN_BAND
XORWF MAIN_Band2,W ;変更がないかチェックあればZ=0
jz LOOP1
CALL TRV_SET1 ;変更ありPLL再設定
GOTO LOOP1
;=================================================================
;
; END of list
;
;=================================================================
Copyright©1998-2022 Hiyoko3 & JR6BIJ All rights reserved
