FT655 3BandTRV_PICプログラム
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 ; ;=================================================================