さっそく修正です。説明は、該出もね
PIC16F88のカテゴリーの方へUP
PIC16F84Aによる、キーボードからの10文字分を記憶し、送出する方です。
これで、IC-7851単体(単体か?)でRTTY(PSK)通信が楽に出来ます
無駄なとこもあります。
実際に使用したら、少し改善が必要ってことで
必ず10文字になって(10文字以下の場合は、スペースを送出)、スペースが多くなってみっともない
送出キー Eキー を押す(PA3=0)ことで記憶をストップさせていたので、使い勝ってが悪い
そこで、Fキーを押して(PA2=0)記憶開始した場合に、スペースキーで記憶を中止するように修正
文字列にスペースがあると、そこで、送出も終了としました。
お約束:参考にすれば~! 結果の責任は、僕にないからね~!
以下です
;2018年6月21日使い勝ってを改善のために修正
;10文字以下の記憶で、文字数までとする
;PA2=”0”で読込開始で、読込中(5文字以降)に再度PA2=”0”で読込終了
;現在のPA2=”0”の複数押しで止まってしまうのを改善する
;*6月 のマークが今回の改善のとこ
;PS2バッファ めざせIC-7851接続
;あるPS2ケーブル 茶:5V 赤:DATA 黄:CLK 灰:0V
;PA0="1"電源表示LED 出力
;PA1="0"書出中LED 出力
;PA2="0"読込SW 入力
;PA3="0"書出SW 入力
;PA4="0"外部のPICが書出中 入力 PA4="0"の時、PA1="0"にして何もしない
;PB0 未使用
;PB1 /DATA 出力
;PB2 /CLK 出力
;PB3="0"読込中LED 出力
;PB4 DATA 入力
;PB5 CLK、キーボード側電源確認 入力
list p=16F84
INCLUDE "p16F84A.inc"
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ORG 00h
;******
T1 EQU 0Ch
T2 EQU T1+1
T3 EQU T2+1
T4 EQU T3+1
T5 EQU T4+1
T6 EQU T5+1
MMA EQU T6+1
MMB EQU MMA+1
MMC EQU MMB+1
MM0 EQU MMC+1
MM1 EQU MM0+1
MM2 EQU MM1+1
MM3 EQU MM2+1
MM4 EQU MM3+1
MM5 EQU MM4+1
MM6 EQU MM5+1
MM7 EQU MM6+1
MM8 EQU MM7+1
MM9 EQU MM8+1
;********************************
BSF STATUS, RP0
MOVLW B'00011100'
MOVWF TRISA
MOVLW B'11110000'
MOVWF TRISB
BCF OPTION_REG,NOT_RBPU
BCF STATUS, RP0
;*****************************************
;タイマ調整、サブルーチン確認用
; CALL ALN
; GOTO MMTX
; GOTO INT ;スタートへ
; GOTO CHKTIM100M ;T5=H'EB'で100mS
; GOTO CHKTIM99 ;1.56mS用
; CALL TX_HF0 ;F0送出
; GOTO $-1 ;F0送出
; GOTO CHKTIMSET ;2.6uS/130mS
; GOTO CHKTIM01 ;NOP 3個で1.5uS
; GOTO CHKTIM40 ;T3=H'1D'で39uS
;
;
;CHKTIMSET
; BSF PORTB,1
; CALL TIMSET
; BCF PORTB,1
; CALL TIMSET
; GOTO CHKTIMSET
;CHKTIM01
; BSF PORTB,3
; CALL TIM01
; BCF PORTB,3
; CALL TIM01
; GOTO CHKTIM01
;CHKTIM40
; BSF PORTB,3
; CALL TIM40
; BCF PORTB,3
; CALL TIM40
; GOTO CHKTIM40
;CHKTIM100M
; BSF PORTB,3
; CALL TIM100M
; BCF PORTB,3
; CALL TIM100M
; GOTO CHKTIM100M
;CHKTIM99
; BSF PORTB,3
; CALL TIM99
; BCF PORTB,3
; CALL TIM99
; GOTO CHKTIM99
;*****************************************
;*****************************************
INT
;初期セット
MOVLW B'0011110'
MOVWF PORTA
MOVLW B'00001000'
MOVWF PORTB
CALL ALN
; GOTO MMTX ;確認用
;*****************************
;PS/2電源確認と初期ASK待ち
;PA4=”1”待ちと1秒待ち
BTFSS PORTB,5
GOTO $-1
MOVLW H'0F' ;3秒くらいウエイト
MOVWF T1
INTT1
BCF PORTA,0 ;点滅中は、ウエイト
CALL TIM100M
BSF PORTA,0
CALL TIM100M
DECFSZ T1,1
GOTO INTT1
BSF PORTA,0
; GOTO $-1 ;確認用
;*********************************
START
BTFSS PORTA,4
GOTO EXTPIC
BSF PORTA,1 ;書出LED消灯
START1
BTFSS PORTA,2 ;0で読込
GOTO MMREED
BTFSS PORTA,3 ;0で書出し
GOTO MMTX
GOTO START
EXTPIC ;外部のPICが書出中 入力 PA4="0"の時、PA1="0"にして何もしない
BCF PORTA,1
GOTO START
;******************************************
;読込スタート
MMREED
CALL TIM100M ;*6月
; MOVLW D'01' ;*6月
; MOVWF MMC ;*6月
BCF PORTB,3 ;読込LED点灯
CALL MRR
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM0
MM0SET
CALL MRX
MOVF MMA,W
MOVWF MM0
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM1
MM1SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM1
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM2
MM2SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM2
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM3
MM3SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM3
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM4
MM4SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM4
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM5
MM5SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM5
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM6
MM6SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM6
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM7
MM7SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM7
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM8
MM8SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM8
;スペース"29"判定*6月
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO MMEND2
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM9
MM9SET
; INCF MMC,1 ;*6月
CALL MRX
MOVF MMA,W
MOVWF MM9
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;書出10桁終了
MMEND2 ;*6月
CALL TIM100M0
BSF PORTB,3 ;LED消灯
GOTO START
MMEND
CALL TIM100M0
BSF PORTB,3 ;LED消灯
GOTO MMTX
;**********************************
;PS2読み込み データ ⇒ MMAへ保存 0?6bitへコード、7bitへチェックサム
MRX
;スタート
CLRF MMA
BTFSC PORTB,5 ;CLK='1'確認
GOTO $-1
; CALL TIM01
; BTFSC PORTB,4 ;DATA=スタートビット確認
; GOTO MRX
BTFSS PORTB,5
GOTO $-1
CALL TIM01
;ビット0
BTFSC PORTB,5
GOTO $-1
CALL TIM01
BTFSC PORTB,4
BSF MMA,0
CALL TIM01
BTFSS PORTB,5
GOTO $-1
CALL TIM01
;ビット1
BTFSC PORTB,5
GOTO $-1
; CALL TIM01
BTFSC PORTB,4
BSF MMA,1
; CALL TIM01
BTFSS PORTB,5
GOTO $-1
; CALL TIM01
;ビット2
BTFSC PORTB,5
GOTO $-1
; CALL TIM01
BTFSC PORTB,4
BSF MMA,2
; CALL TIM01
BTFSS PORTB,5
GOTO $-1
; CALL TIM01
;ビット3
BTFSC PORTB,5
GOTO $-1
; CALL TIM01
BTFSC PORTB,4
BSF MMA,3
; CALL TIM01
BTFSS PORTB,5
GOTO $-1
; CALL TIM01
;ビット4
BTFSC PORTB,5
GOTO $-1
; CALL TIM01
BTFSC PORTB,4
BSF MMA,4
; CALL TIM01
BTFSS PORTB,5
GOTO $-1
; CALL TIM01
;ビット5
BTFSC PORTB,5
GOTO $-1
; CALL TIM01
BTFSC PORTB,4
BSF MMA,5
; CALL TIM01
BTFSS PORTB,5
GOTO $-1
; CALL TIM01
;ビット6
BTFSC PORTB,5
GOTO $-1
; CALL TIM01
BTFSC PORTB,4
BSF MMA,6
; CALL TIM01
BTFSS PORTB,5
GOTO $-1
; CALL TIM01
;ビット7 データは捨てる
BTFSC PORTB,5
GOTO $-1
CALL TIM01
; CALL TIM01
; CALL TIM01
; CALL TIM01
BTFSS PORTB,5
GOTO $-1
; CALL TIM01
;ビット8 チェックサム bit7へセットする
BTFSC PORTB,5
GOTO $-1
; CALL TIM01
BTFSC PORTB,4
BSF MMA,7
; CALL TIM01
CALL TIM100M
CALL TIM100M
RETURN
;***********************************
;メモリリセット
MRR
; CLRF MMA ;データ変換用;*6月
MOVLW H'29' ;スペースコード
MOVWF MMA ;*6月
MOVWF MM0 ;0?6bitへコード、7bitへチェックサム
MOVWF MM1
MOVWF MM2
MOVWF MM3
MOVWF MM4
MOVWF MM5
MOVWF MM6
MOVWF MM7
MOVWF MM8
MOVWF MM9
RETURN
;***********************************
;書出 スタートbit データ0?6bit 7bitは”0” チェックサム エンドビット
MMTX
;*********************************
;書出し確認用
; BTFSS PORTA,3
; GOTO $-1
; BTFSC PORTA,3
; GOTO $-1
;*********************************
BTFSS PORTB,4
GOTO $-1
BCF PORTA,1 ;書出LED点灯
CALL TIM100M0
;MM0
MOVF MM0,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
;キーを離す
CALL TX_HF0
MOVF MM0,W
MOVWF MMA
CALL MMTX1
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;*********************************
;MM1
MOVF MM1,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM1,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM2
MOVF MM2,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM2,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM3
MOVF MM3,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM3,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM4
MOVF MM4,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM4,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM5
MOVF MM5,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM5,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM6
MOVF MM6,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM6,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM7
MOVF MM7,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM7,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM8
MOVF MM8,W
MOVWF MMA
MOVWF MMB
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM8,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペース"29"判定*6月
MOVF MMB,W
MOVF MMA
SUBLW H'2A'
MOVWF MMB
DECFSZ MMB,1
GOTO $+2
GOTO START
;MM9
MOVF MM9,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM9,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;スペースキーデータ送出
MOVLW H'29'
MOVWF MMA
CALL MMTX1
;キーを離す
CALL TX_HF0
MOVLW H'29'
MOVWF MMA
CALL MMTX1
BCF PORTB,1
CALL TIM100M0
BSF PORTA,1 ;書出LED消灯
; GOTO MMTX ;デバッグ書き出し確認用
GOTO START
;**********************************
;書出サブルーチン 逆動作だよ 0が1 PB1=/DATA PB2=/CLK
MMTX1
;***************************************
;CLK=0を確認
BTFSS PORTB,5
GOTO $-1
;***************************************
;スタートビット ”0”
BSF PORTB,1
CALL TIM19
BSF PORTB,2
CALL TIM40
;0bit
BCF PORTB,2
BCF PORTB,1
BTFSS MMA,0
BSF PORTB,1
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit1
BCF PORTB,1
BTFSS MMA,1
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit2
BCF PORTB,1
BTFSS MMA,2
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit3
BCF PORTB,1
BTFSS MMA,3
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit4
BCF PORTB,1
BTFSS MMA,4
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit5
BCF PORTB,1
BTFSS MMA,5
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit6
BCF PORTB,1
BTFSS MMA,6
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit7 "0"
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit8 チェツクサム
BCF PORTB,1
BTFSS MMA,7
BSF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit9 ストップビット ”1”
BCF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
BCF PORTB,2
CALL TIM99
CALL TIM99
CALL TIM99
RETURN
;************************************
;キーを離したときのF0の送出
TX_HF0
;***************************************
;CLK=0を確認
BTFSS PORTB,5
GOTO $-1
;***************************************
;スタートビット ”0”
BSF PORTB,1
CALL TIM19
BSF PORTB,2
CALL TIM40
;0bit =”0”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit1 =”0”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit2 =”0”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit3 =”0”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit4 =”1”
BCF PORTB,1
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit5 =”1”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit6 =”1”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit7 =”1”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit8 チェツクサム =”1”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
;bit9 ストップビット ”1”
BCF PORTB,2
CALL TIM40
BSF PORTB,2
CALL TIM40
BCF PORTB,2
CALL TIM99
RETURN
;***********************************
ALN
CLRF MMA ;データ変換用
MOVLW H'1C' ;A
MOVWF MM0
MOVLW H'32' ;B
MOVWF MM1
MOVLW H'A1' ;C
MOVWF MM2;
MOVLW H'23' ;D
MOVWF MM3
MOVLW H'A4' ;E
MOVWF MM4
MOVLW H'AB' ;F
MOVWF MM5
MOVLW H'34' ;G
MOVWF MM6
MOVLW H'B3' ;H
MOVWF MM7
MOVLW H'43' ;I
MOVWF MM8
MOVLW H'3B' ;J
MOVWF MM9
RETURN
;*************************************
;クロック判定時のタイマ とりあえず
TIM01
NOP
NOP
NOP
RETURN
;********************
;書出確認用タイマ
TIMSET
MOVLW H'69'
MOVWF T6
LOOPSET
BTFSS PORTA,3
GOTO T6END
DECFSZ T6,1
GOTO LOOPSET1
GOTO TIMSETEND
LOOPSET1
CALL TIM99
GOTO LOOPSET
T6END
MOVLW H'01'
MOVWF T6
TIMSETEND
RETURN
TIM99 ;1.56mS用
MOVLW H'B'
MOVWF T5
TIM991
CALL TIM100M2
DECFSZ T5,1
GOTO TIM991
RETURN
;*******************************
;タイマ100mS
TIM100M
CALL TIM100M0
CALL TIM100M0
CALL TIM100M0
RETURN
TIM100M0
MOVLW H'EB'
MOVWF T5
TIM100M1
CALL TIM100M2
DECFSZ T5,1
GOTO TIM100M1
RETURN
TIM100M2
MOVLW H'EB' ;1.56mS用
MOVWF T4
TIM100M3
DECFSZ T4,1
GOTO TIM100M3
RETURN
;********************************
;20μSタイマ 1/2周期
TIM40
CALL TIM19
CALL TIM19
RETURN
;19μSタイマ 1/4周期
TIM19
MOVLW H'1E'
MOVWF T3
LOOPTIM19
DECFSZ T3,1
GOTO LOOPTIM19
RETURN
;**********************************
END