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
前の月  2024年 4月  次の月
Su Mo Tu We Th Fr Sa
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
今の第67758コロニー
コロニーな生活☆PLUS
~携帯を持って外に出かけよう~

位置情報を利用したコミュニケーション系シミュレーションゲーム
無料で遊べる!↓↓仲間がいっぱい!楽しいよ!
QRコード↓を携帯で読み取ってアクセスしよう!
※DoCoMo/AU/WILLCOM対応
Main Contents
RF On-Web Program
DATA BASE
My Favorites
Mailto
メールあどれす

リンクボタン
Get Flash Player




Powered by
Movable Type 3.121-ja
PHP
MySQL
Vine Linux