Software převaděče OK0BT v 0.9
 
OVLADAC RADIOAMATERSKEHO PREVADECE OK 0 BT
' V 0.9 OK2IZS 1998 05.01.1998
 
' definice vstupu/vystupu
DTMF VAR INA
DTIN VAR IN4
PLAY CON 8
REC CON 5
REC1 CON 7
PLAY1 CON 13
TOUT CON 9
TX CON 13
SQ VAR IN6
TERM CON 12
 
' nastaveni vstupu/vystupu
HIGH REC
HIGH PLAY
LOW TX
HIGH PLAY1
HIGH REC1
HIGHPLAY2
HIGH REC1
HIGH PLAY1
 
 
' inicializace promennych
X1 VAR BYTE
X2 VAR NIB
X3 VAR BYTE
X4 VAR WORD
X5 VAR BYTE
X6 VAR BYTE
C1 VAR BYTE
C2 VAR BYTE
AKTIVACE VAR BIT
FON VAR NIB
FON1 VAR BIT
DOBA VAR BYTE
BUT VAR BYTE
PBLOK VAR BIT
UVO VAR BYTE
POT VAR WORD
IDENT VAR WORD
ERROR VAR BYTE
READ 4,PBLOK
READ 1,AKTIVACE
 
' promenne pro podprogram MORSE
TONE CON 1500
QUIET CON 0
DIT_LENGHT CON 33
DAH_LENGHT CON 100
WRD_LENGHT CON 240
CHARACTER VAR BYTE
INDEX1 VAR BYTE
INDEX2 VAR BYTE
ELEMENTS VAR BYTE
 
 
'1 Vyckavaci sekce + prodleva 100 ms
KLID:
X1 = 0
IDENT = 0
LOW TX
GOSUB ZAB
IF SQ = 1 THEN KLID
 
K1:
X1 = X1 + 1
PAUSE 10
IF X1 > 10 THEN START1
IF X1 > 500 THEN START
IF SQ = 0 THEN K1
GOTO KLID
 
START1:
IF SQ = 0 THEN START1
X1 = 0
 
'2 Start prevadece
START:
HIGH TX
PAUSE 500
GOSUB MHLASKA
GOTO CSIGNAL
 
'3 Pritomnost signalu
SIGNAL:
IF SQ = 1 THEN NSIGNAL
IDENT = IDENT + 1
IF IDENT > 1500 THEN MHLASKA
GOSUB ZAB
PAUSE 50
IF DTIN = 0 THEN SIGNAL
'DEBUG DEC DTMF
GOTO DTMFIN
 
NSIGNAL:
X1 = 0
 
NSIG1:
IF SQ = 0 THEN SIGNAL
X1 = X1 + 1
PAUSE 10
IF X1 < 30 THEN NSIG1
FREQOUT TOUT,80,1500
X1 = 0
 
CSIGNAL:
IF SQ = 0 THEN SIGNAL
X1 = X1 + 1
IDENT = IDENT + 1
IF IDENT > 1500 THEN MHLASKA
PAUSE 50
GOSUB ZAB
IF X1 < 200 THEN CSIGNAL
X1 = 0
 
'4 Vypadnuti prevadece + pipani
IF SQ = 0 THEN SIGNAL
PAUSE 400
X1 = 0
 
ENDSEK:
IF SQ = 0 THEN SIGNAL
GOSUB ZAB
PAUSE 400
FREQOUT TOUT,50,1500
X1 = X1 + 1
IF X1 < 6 THEN ENDSEK
LOW TX
' opetovne zapnuti
X1 = 0
OZ1:
IF SQ = 0 THEN SIGNAL1
X1 = X1 + 1
PAUSE 100
IF X1 < 100 THEN OZ1
GOTO KLID
 
SIGNAL1:
HIGH TX
GOTO SIGNAL
 
'5 Prvni uroven nacteni DTMF
DTMFIN:
X1 = 0
 
DT1:
IF DTIN = 0 THEN DT2
PAUSE 10
X1 = X1 + 1
GOTO DT1
 
DT2:
IF X1 > 20 THEN DT3
GOTO SIGNAL
 
DT3:
X1 = 0
 
DT33:
X1 = X1 + 1
PAUSE 1
IF X1 > 1500 THEN SIGNAL
IF SQ = 0 THEN DT33
IF DTMF <> 12 THEN DT4
GOTO SYSA9
 
DT4:
IF PBLOK = 1 THEN OBSAZ
BRANCH DTMF,[SIGNAL,OPAKOVAC,SIGNAL,TEPLOTA,TEPLOTA]
' GOSUB HALALI
GOTO OBSAZ
GOTO SIGNAL
 
'6 KVT
OBSAZ:
X1 = 0
IF SQ = 0 THEN OBSAZ
PAUSE 1000
FOR X1 = 0 TO 4
FREQOUT TOUT,300,425
PAUSE 200
NEXT
PAUSE 500
GOTO SIGNAL
 
HALALI:
X1 = 0
IF SQ = 0 THEN HALALI
PAUSE 1000
' FOR X1 = 0 TO 2
FREQOUT TOUT,300,1200
FREQOUT TOUT,300,1500
FREQOUT TOUT,500,1800
PAUSE 500
' NEXT
PAUSE 100
RETURN
 
' mereni teploty
TEPLOTA:
ERROR = 0
TPERR:
IF ERROR = 20 THEN CSIGNAL
IF SQ = 1 THEN TEPLOTA1A
PAUSE 100
ERROR = ERROR + 1
GOTO TPERR
TEPLOTA1A:
PAUSE 1000
FREQOUT TOUT,300,1400
PAUSE 2000
HIGH TERM
PAUSE 1
RCTIME TERM,1,POT
LOW TERM
IF POT < 62 THEN MINUSTEPLOTA
POT = POT - 62
C1 = POT / 10
C2 = POT - (C1 * 10)
PAUSE 700
DTMFOUT TOUT,100,50,[0,0,0,10,0,C1,C2]
GOTO SIGNAL
MINUSTEPLOTA:
POT = POT + 100
POT = POT - 63
POT = 100 - POT
C1 = POT / 10
C2 = POT - (C1 * 10)
PAUSE 700
DTMFOUT TOUT,100,50,[0,0,0,10,8,C1,C2]
GOTO SIGNAL
 
' zkouska modulace - opakovac
OPAKOVAC:
ERROR = 0
OPAKERROR:
IF ERROR = 20 THEN CSIGNAL
IF SQ = 1 THEN OPAKOVAC1A
PAUSE 100
ERROR = ERROR + 1
GOTO OPAKERROR
OPAKOVAC1A:
X1 = 0
X3 = 0
IF SQ = 0 THEN OPAKOVAC1A
PAUSE 1000
FREQOUT TOUT,300,1400
PAUSE 100
FREQOUT TOUT,300,1400
OPCEK:
X3 = X3 + 1
IF X3 = 40 THEN OPEND1
PAUSE 100
IF SQ = 1 THEN OPCEK
LOW REC
OPCEK1:
PAUSE 100
X1 = X1 + 1
WRITE 3,X1
IF X1 > 200 THEN OPEND
IF SQ = 1 THEN OPEND
GOTO OPCEK1
OPEND:
HIGH REC
IF SQ = 0 THEN OPEND
PAUSE 1000
X1 = X1 - 1
X3 = 0
LOW PLAY
OPPLAY:
LOW PLAY
X3 = X3 + 1
PAUSE 100
IF X3 < X1 THEN OPPLAY
HIGH PLAY
PAUSE 300
FREQOUT TOUT,200,1000
FREQOUT TOUT,200,800
GOTO SIGNAL
OPEND1:
FREQOUT TOUT,500,800
GOTO SIGNAL
 
' vyslani morse znaku
TMORSE:
ELEMENTS = CHARACTER & %00000111
IF ELEMENTS = 7 THEN ADJUST1
IF ELEMENTS = 6 THEN ADJUST2
BANG_KEY:
FOR INDEX2 = 1 TO ELEMENTS
IF CHARACTER >= 128 THEN DAH
GOTO DIT
REENTER:
CHARACTER = CHARACTER * 2
NEXT
GOSUB CHAR_SP
RETURN
ADJUST1:
ELEMENTS = 6
GOTO BANG_KEY
 
ADJUST2
CHARACTER = CHARACTER & %11111011
GOTO BANG_KEY
 
DIT:
FREQOUT TOUT,DIT_LENGHT,TONE
FREQOUT TOUT,DIT_LENGHT,QUIET
GOTO REENTER
 
DAH:
FREQOUT TOUT,DAH_LENGHT,TONE
FREQOUT TOUT,DIT_LENGHT,QUIET
GOTO REENTER
 
CHAR_SP:
FREQOUT TOUT,DAH_LENGHT,QUIET
RETURN
 
WORD_SP
FREQOUT TOUT,WRD_LENGHT,QUIET
RETURN
 
' hlaska morse OK0BT
MHLASKA:
IF SQ = 0 THEN MHLASKA
IF AKTIVACE < > 1 THEN MHHH
GOSUB UPOZORNENIVO
 
MHHH:
PAUSE 200
FOR X3 = 0 TO 4
LOOKUP X3,[227,163,253,132,129],CHARACTER
GOSUB TMORSE
NEXT
IDENT = 0
RETURN
 
'7 Sysop funkce
SYSOP:
IF SQ = 0 THEN SYSOP
X1 = 0
PAUSE 1000
' FREQOUT TOUT,500,1500
GOSUB MORSEPSE
GOTO MORSECODE
 
SYSOP1:
X1 = X1 + 1
PAUSE 10
IF X1 > 200 THEN NSIGNAL
IF SQ = 1 THEN SYSOP1
X1 = 0
 
SYSOP2:
X1 = X1 + 1
PAUSE 1
IF X1 > 2000 THEN CSIGNAL
IF DTIN = 0 THEN SYSOP2
'DEBUG "111"
GOSUB CEKEJ
IF DTMF <> * THEN SIGNAL
'DEBUG "ZADAN KOD *"
GOSUB CEKEJ
DEBUG DEC DTMF
IF DTMF <> * THEN SIGNAL
DEBUG "ZADAN KOD *"
GOSUB CEKEJ
DEBUG "ZADAN KOD *"
IF DTMF <> * THEN SIGNAL
GOSUB CEKEJ
IF DTMF <> * THEN SIGNAL
DEBUG "CODE OK"
SYSOP3:
IF SQ = 0 THEN SYSOP3
PAUSE 1000
GOSUB MORSESYS
GOSUB CEKEJ
BRANCH DTMF,[SYSERR,SYSA1,SYSA2,SYSA3,SYSA4,SYSA5,SYSA6,SYSA7]
 
SYSERR:
GOSUB HALALI
GOTO OBSAZ
 
CEKEJ:
CDTMF:
X2 = 0
X1 = 0
IF DTIN = 1 THEN CDTMF
DTM1:
IF DTIN = 0 THEN DTM2
GOTO CDEND
DTM2:
X1 = X1 + 1
PAUSE 50
IF X1 < 250 THEN DTM1
X2 = 1
CDEND:
RETURN
 
 
 
 
 
' CEKEJ:
' X1 = 0
 
' CEKEJ1:
' PAUSE 10
' X1 = X1 + 1
' IF X1 > 800 THEN SIGNAL
'DEBUG "CEKEJ"
'DEBUG DEC DTMF
 
' IF DTIN = 1 THEN CEKEJ1
' RETURN
 
 
'Zabezpecovaci funkce
ZAB:
RETURN
 
'8 Sysop funkce - program
 
'**** ton test c. 1
SYSA1:
HIGH TX
PAUSE 1500
FOR X4 = 300 TO 3000 STEP 100
FREQOUT TOUT,1000,X4
NEXT
PAUSE 1000
GOTO SIGNAL
 
'**** ton test c. 2
SYSA2:
' HIGH TX
' PAUSE 1500
' FOR X4 = 20 TO 4000 STEP 10
' FREQOUT TOUT,500,X4
' NEXT
' GOTO SIGNAL
 
'**** ton test c. 3
SYSA3:
' HIGH TX
' PAUSE 1500
' FOR X4 = 300 TO 2500 STEP 1
' FREQOUT TOUT,100,X4
' NEXT
' FOR X4 = 2500 TO 300 STEP -1
' FREQOUT TOUT,100,X4
' NEXT
' FOR X4 = 300 TO 2500 STEP 1
' FREQOUT TOUT,100,X4
' NEXT
' FOR X4 = 2500 TO 300 STEP -1
' FREQOUT TOUT,100,X4
' NEXT
' FOR X4 = 300 TO 2500 STEP 1
' FREQOUT TOUT,100,X4
' NEXT
' FOR X4 = 2500 TO 300 STEP -1
' FREQOUT TOUT,100,X4
' NEXT
' PAUSE 1000
' GOTO SIGNAL
 
'**** vypnuti prevadece ( zablokovani vysilani TXu )
SYSA4:
IF SQ = 0 THEN SYSA4
PAUSE 1000
FREQOUT TOUT,500,1500
PAUSE 200
FREQOUT TOUT,500,1500
PAUSE 200
FREQOUT TOUT,500,1500
PAUSE 1000
LOW TX
 
SYSA44:
X1 = 0
POM1:
IF SQ = 1 THEN SYSA44
PAUSE 10
X1 = X1 + 1
IF X1 > 500 THEN POM2
GOTO POM1
POM2:
X1 = 0
 
POM22:
PAUSE 10
X1 = X1 + 1
IF X1 > 500 THEN SYSA44
IF SQ = 1 THEN POM22
IF DTMF <> 1 THEN SYSA44
PAUSE 5000
GOTO START
 
'**** vypnuti / zapnuti pridavnych doplnkovych funkci OK0BT
SYSA5:
IF PBLOK = 1 THEN BLOK2
PBLOK = 1
WRITE 4,PBLOK
GOTO BLOKE
BLOK2:
PBLOK = 0
WRITE 4,PBLOK
BLOKE:
HIGH TX
GOTO SIGNAL
 
'**** nahravani upozorneni VO
SYSA6:
IF SQ = 0 THEN SYSA6
PAUSE 1000
FREQOUT TOUT,500,1000
RCEK:
X3 = X3 + 1
IF X3 = 254 THEN RECEND1
PAUSE 100
IF SQ = 1 THEN RCEK
PAUSE 10
LOW REC1
RCEK1:
PAUSE 100
X1 = X1 + 1
IF X1 > 199 THEN RECEND
IF SQ = 1 THEN RECEND
GOTO RCEK1
RECEND:
HIGH REC1
PAUSE 1500
WRITE 2,X1
GOTO SYSA8
RECEND1:
GOTO SIGNAL
 
'**** aktivace / deaktivace UVO
SYSA7:
IF SQ = 0 THEN SYSA7
PAUSE 1000
FREQOUT TOUT,500,1500
READ 1,AKTIVACE
IF AKTIVACE = 1 THEN AKT1
AKTIVACE = 1
WRITE 1,AKTIVACE
PAUSE 1000
FREQOUT TOUT,1000,1500
GOTO SIGNAL
AKT1:
AKTIVACE = 0
WRITE 1,AKTIVACE
PAUSE 1000
FREQOUT TOUT,200,1500
PAUSE 200
FREQOUT TOUT,200,1500
PAUSE 1000
GOTO SIGNAL
 
'**** poslech UVO
SYSA8:
IF SQ = 0 THEN SYSA8
PAUSE 1000
FREQOUT TOUT,1000,1500
PAUSE 500
READ 2,X1
X1 = X1 - 2
X2 = 0
PLAYB:
PAUSE 100
LOW PLAY1
X2 = X2 + 1
IF X1 < X2 THEN PLAYB
HIGH PLAY1
PAUSE 500
GOTO SIGNAL
 
 
'**** poslech posledni zk. modulace VM 888
SYSA9:
IF SQ = 0THEN SYSA9
PAUSE 1000
FREQOUT TOUT,1000,1500
FREQOUT TOUT,1000,1000
READ 3,X1
X3 = 0
PAUSE 500
GOTO OPPLAY
 
 
'**** zaklicovani TXu
SYSA0:
IF SQ = 0 THEN SYSA0
HIGH TX
PAUSE 1000
FREQOUT TOUT,1000,1500
PAUSE 500
IDENT = 1501
GOSUB MHHH
PAUSE 100
 
POMA0:
FOR X3 = 0 TO 3
LOOKUP X3,[129,1,3,129],CHARACTER
GOSUB TMORSE
NEXT
X5 = 0
X6 = 0
 
POMA00:
IDENT = IDENT +1
IF IDENT < 1500 THEN POMA01
GOSUB MHHH
PAUSE 100
GOSUB POMA0
IDENT = 0
 
POMA01:
PAUSE 100
IF SQ = 0 THEN START
X5 = X5 + 1
IF X5 = 1000 THEN POMA000
GOTO POMA00
 
POMA000:
X6 = X6 + 1
IF X6 > 6 THEN KLID
GOTO POMA00
'**************************************************************************
MORSESYS:
FOR X3 = 0 TO 3
LOOKUP X3 ,[3,180,3,00],CHARACTER
GOSUB TMORSE
NEXT
RETURN
 
MORSEPSE:
PAUSE 1000
FOR X3 = 0 TO 2
LOOKUP X3,[100,3,1],CHARACTER
GOSUB TMORSE
NEXT
 
MORSECODE:
PAUSE 500
FOR X3 = 0 TO 3
LOOKUP X3,[164,227,131,1],CHARACTER
GOSUB TMORSE
NEXT
GOTO SYSOP1
 
MORSESRI:
PAUSE 1000
FOR X3 = 0 TO 2
LOOKUP X3,[3,67,180],CHARACTER
GOSUB TMORSE
NEXT
PAUSE 500
GOTO SIGNAL
 
SYSERRR:
GOTO SIGNAL
 
UPOZORNENIVO:
UVO = UVO + 1
IF UVO > 4 THEN POMAAA
RETURN
POMAAA:
UVO = 0
PAUSE 500
FREQOUT TOUT,500,1200
FREQOUT TOUT,500,1750
PAUSE 500
READ 2,DOBA
DOBA = DOBA - 1
LOW PLAY1
FOR X3 = 1 TO DOBA
PAUSE 100
NEXT
HIGH PLAY1
RETURN