該出だと思うのですが IC-7851にキーに文字(文書)を記憶(設定)出来るPOSなどで使うキーボードを使用して、定型文送出でRTTY(PSK)通信をしているのですが、これはこれで、PCを接続せずに出来、便利しています。しかし、相手のコールサインを毎回キー入力しないとダメ! そこがめんどくさい
そこで、キーボードからのキー入力の英数10文字分くらい横取りで記憶させて(相手のコールサインを想定)をワンプッシュで、送出できないかなと
そこで候補にしたのが、PS/2キーボードです。 プロトコルも簡単そうだしってとこで(まあ、難しかったけど USBキーボードより簡単そう)
色々と先輩諸氏のネットを検索しながらの、案中模索状態で挑戦です。
一応の完成を見ましたので アセンブラです。
今後、配線し、ケースインしていきます(いつになるやら)
アセンブラ
;LBA.ASM
;PS2バッファ めざせIC-7851接続
;あるPS2ケーブル 茶:5V 赤:DATA 黄:CLK 灰:0V
;PA0="1"電源表示LED 出力
;PA1="0"書出中LED 出力
;PA2="0"読込SW 入力
;PA3="0"書出SW 入力
;PA4 未使用
;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
MM0 EQU MMB+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'00001100'
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,2
GOTO $-1
BTFSS PORTA,3
GOTO START
START1
BTFSS PORTA,2 ;0で読込
GOTO MMREED
BTFSS PORTA,3 ;0で書出し
GOTO MMTX
GOTO START1
;******************************************
;読込スタート
MMREED
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
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM0SET ;再読込
MOVF MMA,W
MOVWF MM0 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM1
MM1SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM1SET ;再読込
MOVF MMA,W
MOVWF MM1 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM2
MM2SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM2SET ;再読込
MOVF MMA,W
MOVWF MM2 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM3
MM3SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM3SET ;再読込
MOVF MMA,W
MOVWF MM3 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM4
MM4SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM4SET ;再読込
MOVF MMA,W
MOVWF MM4 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM5
MM5SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM5SET ;再読込
MOVF MMA,W
MOVWF MM5 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM6
MM6SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM6SET ;再読込
MOVF MMA,W
MOVWF MM6 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM7
MM7SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM7SET ;再読込
MOVF MMA,W
MOVWF MM7 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM8
MM8SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM8SET ;再読込
MOVF MMA,W
MOVWF MM8 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;MM9
MM9SET
CALL MRX
MOVF MMA,W
;0判定
ANDLW H'0F'
MOVWF MMB
INCF MMB,1
DECFSZ MMB,1
GOTO $+3
CALL TIM100M0
GOTO MM9SET ;再読込
MOVF MMA,W
MOVWF MM9 ;記憶
;書出確認とタイマ
CALL TIM99
BTFSS PORTB,5
GOTO $-1
BTFSS PORTA,3
GOTO MMEND ;書出しへ
BTFSC PORTB,4
GOTO $-3
;書出10桁終了
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 ;データ変換用
MOVLW H'29' ;スペースコード
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
CALL MMTX1
;キーを離す
CALL TX_HF0
MOVF MM0,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
; GOTO START ;デバック用
;*********************************
;MM1
MOVF MM1,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM1,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;MM2
MOVF MM2,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM2,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;MM3
MOVF MM3,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM3,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;MM4
MOVF MM4,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM4,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;MM5
MOVF MM5,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM5,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;MM6
MOVF MM6,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM6,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;MM7
MOVF MM7,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM7,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;MM8
MOVF MM8,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;キーを離す
CALL TX_HF0
MOVF MM8,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
;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
お約束:採用される場合は、自己責任でお願いします。こんなとこシフト命令にしろよってとこもあります。8ビットにキーデータを収めるために7ビット目をチェックサムビットとしています。そのあたりが解析の味噌です。機器に合わせてのデータ構築なので、機器によっては無理ってのもあるかもです
このソフトを使用したための事故事件、宇宙人と交信できちゃった すべて当方に責任はありませんから
※コメント投稿者のブログIDはブログ作成者のみに通知されます