これで、IC-7851単体(単体か?)でRTTY(PSK)通信が楽に出来ます
無駄にタイマが入っているとこがあります。動作しているので削除する気がない!
MM0が文字数を管理してます。MM0=0で送出文字数が無しになるようにしてます
メモリ数を少しでも小さくする工夫はしています。
コールサイン等のデータを削除してあるので、このままでは動作しません。良く見て変更してください
もっと賢い方法はあると思います。
電源投入時に3秒くらいウエイト状態にして、その間にPS/2キーボードが勝手に初期プロトコルやれば~的な
あと、自分が送出しているときは、他のPICは、黙らせています。
あとちこちタイマで逃げてます
お約束:参考にすれば~! 結果の責任は、僕にないからね~!
今回は、長いぞーーーーーーーーーーー!
ということで分割 その1です
;長文の方 裏データ もとい 2個目のPIC16F88
;PS2 定型文の送出だぁ めざせIC-7851接続
;あるPS2ケーブル 茶:5V 赤:DATA 黄:CLK 灰:0V
;PA0?PA3 キー入力 4×4のマトリックスキー
;PA4 入力 キーの2面化
;PB0、PB5、PB6、PB7 マトリックスキーのスキャン 飛んでるけど許す!
;PB1 /DATA 出力
;PB2 /CLK 出力
;PB3="0"データ走出中
;PB4 /書出中 入力
list p=PIC16F88
INCLUDE "p16F88.inc"
__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _WDT_OFF & _PWRTE_ON & _EXTCLK
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
; __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
ORG 00h
;******
T1 EQU 20h
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
;********************************
M000 EQU MM0+1
M001 EQU M000+1
M002 EQU M001+1
M003 EQU M002+1
M004 EQU M003+1
M005 EQU M004+1
M006 EQU M005+1
M007 EQU M006+1
M008 EQU M007+1
M009 EQU M008+1
M010 EQU M009+1
M011 EQU M010+1
M012 EQU M011+1
M013 EQU M012+1
M014 EQU M013+1
M015 EQU M014+1
M016 EQU M015+1
M017 EQU M016+1
M018 EQU M017+1
M019 EQU M018+1
M020 EQU M019+1
M021 EQU M020+1
M022 EQU M021+1
M023 EQU M022+1
M024 EQU M023+1
M025 EQU M024+1
M026 EQU M025+1
M027 EQU M026+1
M028 EQU M027+1
M029 EQU M028+1
M030 EQU M029+1
M031 EQU M030+1
M032 EQU M031+1
M033 EQU M032+1
M034 EQU M033+1
M035 EQU M034+1
M036 EQU M035+1
M037 EQU M036+1
M038 EQU M037+1
M039 EQU M038+1
M040 EQU M039+1
M041 EQU M040+1
M042 EQU M041+1
M043 EQU M042+1
M044 EQU M043+1
M045 EQU M044+1
M046 EQU M045+1
M047 EQU M046+1
M048 EQU M047+1
M049 EQU M048+1
M050 EQU M049+1
M051 EQU M050+1
M052 EQU M051+1
M053 EQU M052+1
M054 EQU M053+1
M055 EQU M054+1
M056 EQU M055+1
M057 EQU M056+1
M058 EQU M057+1
M059 EQU M058+1
M060 EQU M059+1
M061 EQU M060+1
M062 EQU M061+1
M063 EQU M062+1
M064 EQU M063+1
M065 EQU M064+1
M066 EQU M065+1
M067 EQU M066+1
M068 EQU M067+1
M069 EQU M068+1
M070 EQU M069+1
M071 EQU M070+1
M072 EQU M071+1
M073 EQU M072+1
M074 EQU M073+1
M075 EQU M074+1
M076 EQU M075+1
M077 EQU M076+1
M078 EQU M077+1
M079 EQU M078+1
M080 EQU M079+1
M081 EQU M080+1
M082 EQU M081+1
M083 EQU M082+1
M084 EQU M083+1
M085 EQU M084+1
M086 EQU M085+1
M087 EQU M086+1
M088 EQU M087+1
M089 EQU M088+1
;********************************
MOVLW B'11101001'
MOVWF PORTB
BSF STATUS, RP0
CLRF ANSEL
MOVLW B'01011111'
MOVWF TRISA
MOVLW B'00010000'
MOVWF TRISB
BCF OPTION_REG,NOT_RBPU
BCF STATUS, RP0
;*****************************************
;*****************************************
;*****************************************
INT
;4×4 16キーマトリックス
;PA0 ROW1
;PA1 ROW2
;PA3 ROW3
;PA4 ROW4
;PB0 COL1
;PB5 COL2
;PB6 COL3
;PB7 COL4
;初期セット
MOVLW B'11101001'
MOVWF PORTB
;*****************************
;PS/2電源確認と初期ASK待ち
;PA4=”1”待ちと1秒待ち
BTFSS PORTB,4
GOTO $-1
MOVLW H'0F' ;3秒くらいウエイト
MOVWF T1
INTT1
BCF PORTB,3 ;点滅中は、ウエイト
CALL TIM100M
BSF PORTB,3
CALL TIM100M
DECFSZ T1,1
GOTO INTT1
BSF PORTB,3
;*********************************
GOTO START
;********************************
;***********************************
;書出 スタートbit データ0?6bit 7bitは”0” チェックサム エンドビット
MMTX
;*********************************
;書出し確認用
; BTFSS PORTA,3
; GOTO $-1
; BTFSC PORTA,3
; GOTO $-1
;*********************************
;******************************
;スペース送出
;スペース先頭なら CALL TX_SP CALL M001_TX CALL M002_TX
;一文字送出なら CALL M001_TX
;文字列だけなら CALL M001_TX CALL M002_TX
;長文なら CALL M001_TX CALL M002_TX CALL M001_TX CALL M002_TX
TX_SP
; BTFSS PORTB,4
; GOTO $-1
; BCF PORTB,3 ;書出LED点灯
; CALL TIM100M0
;****************************************
MOVLW H'29'
MOVWF MMA
CALL MMTX2
RETURN
;******************************
;一文字送出
M001_TX
; BTFSS PORTB,4
; GOTO $-1
BCF PORTB,3 ;書出LED点灯
CALL TIM100M0
;********************************
MOVF M001,W
MOVWF MMA
CALL MMTX2
RETURN
;二文字以降の送出
M002_TX
; BTFSS PORTB,4
; GOTO $-1
BCF PORTB,3 ;書出LED点灯
CALL TIM100M0
;****************************
MOVF M002,W
MOVWF MMA
CALL MMTX2
;M003
MOVF M003,W
MOVWF MMA
CALL MMTX2
;M004
MOVF M004,W
MOVWF MMA
CALL MMTX2
;M005
MOVF M005,W
MOVWF MMA
CALL MMTX2
;M006
MOVF M006,W
MOVWF MMA
CALL MMTX2
;M007
MOVF M007,W
MOVWF MMA
CALL MMTX2
;M008
MOVF M008,W
MOVWF MMA
CALL MMTX2
;M009
MOVF M009,W
MOVWF MMA
CALL MMTX2
;M010
MOVF M010,W
MOVWF MMA
CALL MMTX2
;************************************
;ここからはENDを検出する
;M011
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M011,W
MOVWF MMA
CALL MMTX2
;M012
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M012,W
MOVWF MMA
CALL MMTX2
;M013
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M013,W
MOVWF MMA
CALL MMTX2
;M014
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M014,W
MOVWF MMA
CALL MMTX2
;M015
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M015,W
MOVWF MMA
CALL MMTX2
;M016
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M016,W
MOVWF MMA
CALL MMTX2
;M017
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M017,W
MOVWF MMA
CALL MMTX2
;M018
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M018,W
MOVWF MMA
CALL MMTX2
;M019
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M019,W
MOVWF MMA
CALL MMTX2
;M020
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M020,W
MOVWF MMA
CALL MMTX2
;M021
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M021,W
MOVWF MMA
CALL MMTX2
;M022
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M022,W
MOVWF MMA
CALL MMTX2
;M023
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M023,W
MOVWF MMA
CALL MMTX2
;M024
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M024,W
MOVWF MMA
CALL MMTX2
;M025
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M025,W
MOVWF MMA
CALL MMTX2
;M026
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M026,W
MOVWF MMA
CALL MMTX2
;M027
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M027,W
MOVWF MMA
CALL MMTX2
;M028
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M028,W
MOVWF MMA
CALL MMTX2
;M029
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M029,W
MOVWF MMA
CALL MMTX2
;M030
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M030,W
MOVWF MMA
CALL MMTX2
;M031
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M031,W
MOVWF MMA
CALL MMTX2
;M032
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M032,W
MOVWF MMA
CALL MMTX2
;M033
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M033,W
MOVWF MMA
CALL MMTX2
;M034
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M034,W
MOVWF MMA
CALL MMTX2
CALL TIM99
CALL TIM99
;M035
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M035,W
MOVWF MMA
CALL MMTX2
;M036
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M036,W
MOVWF MMA
CALL MMTX2
;M037
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M037,W
MOVWF MMA
CALL MMTX2
;M038
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M038,W
MOVWF MMA
CALL MMTX2
;M039
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M039,W
MOVWF MMA
CALL MMTX2
CALL TIM99
CALL TIM99
;M040
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M040,W
MOVWF MMA
CALL MMTX2
;M041
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M041,W
MOVWF MMA
CALL MMTX2
;M042
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M042,W
MOVWF MMA
CALL MMTX2
;M043
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M043,W
MOVWF MMA
CALL MMTX2
;M044
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M044,W
MOVWF MMA
CALL MMTX2
;M045
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M045,W
MOVWF MMA
CALL MMTX2
;M046
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M046,W
MOVWF MMA
CALL MMTX2
;M047
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M047,W
MOVWF MMA
CALL MMTX2
;M048
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M048,W
MOVWF MMA
CALL MMTX2
;M049
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M049,W
MOVWF MMA
CALL MMTX2
CALL TIM99
CALL TIM99
;M050
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M050,W
MOVWF MMA
CALL MMTX2
;M051
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M051,W
MOVWF MMA
CALL MMTX2
;M052
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M052,W
MOVWF MMA
CALL MMTX2
;M053
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M053,W
MOVWF MMA
CALL MMTX2
;M054
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M054,W
MOVWF MMA
CALL MMTX2
;M055
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M055,W
MOVWF MMA
CALL MMTX2
;M056
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M056,W
MOVWF MMA
CALL MMTX2
;M057
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M057,W
MOVWF MMA
CALL MMTX2
;M058
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M058,W
MOVWF MMA
CALL MMTX2
;M059
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M059,W
MOVWF MMA
CALL MMTX2
;M060
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M060,W
MOVWF MMA
CALL MMTX2
CALL TIM99
CALL TIM99
;M061
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M061,W
MOVWF MMA
CALL MMTX2
;M062
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M062,W
MOVWF MMA
CALL MMTX2
;M063
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M063,W
MOVWF MMA
CALL MMTX2
CALL TIM99
CALL TIM99
;M064
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M064,W
MOVWF MMA
CALL MMTX2
;M065
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M065,W
MOVWF MMA
CALL MMTX2
;M066
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M066,W
MOVWF MMA
CALL MMTX2
;M067
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M067,W
MOVWF MMA
CALL MMTX2
;M068
GOTO $+2
GOTO ENP
MOVF M068,W
MOVWF MMA
CALL MMTX2
;M069
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M069,W
MOVWF MMA
CALL MMTX2
;M070
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M070,W
MOVWF MMA
CALL MMTX2
;M071
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M071,W
MOVWF MMA
CALL MMTX2
;M072
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M072,W
MOVWF MMA
CALL MMTX2
;M073
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M073,W
MOVWF MMA
CALL MMTX2
;M074
GOTO $+2
GOTO ENP
MOVF M074,W
MOVWF MMA
CALL MMTX2
;M075
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M075,W
MOVWF MMA
CALL MMTX2
;M076
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M076,W
MOVWF MMA
CALL MMTX2
;M077
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M077,W
MOVWF MMA
CALL MMTX2
;M078
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M078,W
MOVWF MMA
CALL MMTX2
;M079
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M079,W
MOVWF MMA
CALL MMTX2
;M080
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M080,W
MOVWF MMA
CALL MMTX2
;M081
DECFSZ MM0,F
GOTO $+2
GOTO ENP
MOVF M081,W
MOVWF MMA
CALL MMTX2
;*****************************************
;送出データ終了
ENP
CALL TX_SP
RETURN
;*****************************************
;**********************************
;書出サブルーチン 逆動作だよ 0が1 PB1=/DATA PB2=/CLK
MMTX2
MOVF MMA,W
MOVWF MMB
CALL MMTX1
;キーを離す
CALL TX_HF0
MOVF MMB,W
MOVWF MMA
CALL MMTX1
; CALL TIM100M
; GOTO START ;デバック用
RETURN
;***************************************
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 エンドビッド
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
CALL TIM99
CALL TIM99
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
※コメント投稿者のブログIDはブログ作成者のみに通知されます