Software převaděče OK0BT v 1.0
 
OVLADAC RADIOAMATERSKEHO PREVADECE OK 0 BT
' V 1.0 OK2IZS 1999 17.02.1998
 
' definice vstupu/vystupu
DTMF VAR INA
DTIN VAR IN4
PLAY CON 8
REC CON 5
SQ2 VAR IN15
VENT CON 12
TOUT CON 9
TX CON 13
SQ VAR IN6
TERM1 CON 11
TERM2 CON 14
N CON 10
K CON 7
 
' nastaveni vstupu/vystupu
HIGH REC
HIGH PLAY
LOW TX
LOW VENT
PTT = 0
LOW N
LOW K
' inicializace promennych
X1 VAR BYTE
X2 VAR BYTE
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
PTT 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
 
 
 
'0 oznameni zapnuti napajeni
 
X1= 0
PAUSE 5000:READ 19,X1
IF X1= 0 THEN KLID
HIGH TX:PAUSE 1000
FREQOUT TOUT,70,1530:FREQOUT TOUT,70,2200:FREQOUT TOUT,70,1400
FREQOUT TOUT,70,2200:FREQOUT TOUT,70,1060
FREQOUT TOUT,70,2000:FREQOUT TOUT,70,1060
PAUSE 500
GOSUB MHLASKA:PAUSE 500
X1 = 2
GOTO ENDSEK
 
'1 Vyckavaci sekce + prodleva 100 ms
KLID:
X1 = 0
LOW TX
PTT = 0
IDENT = 0
LOW N
 
KLID1:
IDENT = IDENT + 1
IF SQ = 0 THEN K1
IF IDENT < 1000 THEN KLID1
GOSUB ZAB
GOTO KLID
 
K1:
IDENT = 0
X1 = X1 + 1
PAUSE 10
IF X1 > 10 THEN START1
IF SQ = 0 THEN K1
GOTO KLID
 
START1:
IF SQ = 0 THEN START1
 
'2 Start prevadece
START:
HIGH TX
PTT = 1
HIGH VENT
PAUSE 500
GOSUB MHLASKA
GOTO CSIGNAL
 
'3 Pritomnost signalu
SIGNAL:
IF SQ = 1 THEN NSIGNAL
IDENT = IDENT + 1
IF IDENT > 1500 THEN SIG111
PAUSE 50
IF DTIN = 0 THEN SIGNAL
GOTO DTMFIN
 
NSIGNAL:
X1 = 0
NSIG1:
IF SQ = 0 THEN SIGNAL
X1 = X1 + 1
PAUSE 10
IF X1 < 30 THEN NSIG1
GOSUB ZAB
FREQOUT TOUT,80,1500
X1 = 0
 
CSIGNAL:
IF SQ = 0 THEN SIGNAL
X1 = X1 + 1
IDENT = IDENT + 1
IF IDENT > 1500 THEN SIG111
PAUSE 50
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
PAUSE 400
FREQOUT TOUT,50,1500
X1 = X1 + 1
IF X1 < 6 THEN ENDSEK
 
' opetovne zapnuti
OZ:
LOW TX:PAUSE 500
GOSUB ZAB
WRITE 3,1
X1 = 0
OZ1:
IF SQ = 0 THEN SIGNAL1
X1 = X1 + 1
PAUSE 100
IF X1 < 100 THEN OZ1
IF X5 = 0 THEN KLID
HIGH TX
PAUSE 500
GOSUB MHHH
PAUSE 100
' GOTO POMA0
 
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 10
IF X1 > 150 THEN SIGNAL
IF SQ = 0 THEN DT33
'DEBUG "DTMF= ",DEC DTMF
IF DTMF <> 11 THEN DT4
PAUSE 1000
FREQOUT TOUT,500,1500
GOTO SYSOP
 
 
DT4:
'DEBUG "PBLOK= ",DEC PBLOK
IF PBLOK = 1 THEN OBSAZ
BRANCH DTMF,[SIGNAL,OPAKOVAC,OPMOD,TEPLOTA11,TEPLOTA12,PROPOJA,PROPOJB]
GOTO OBSAZ
 
'6 KVT
OBSAZ:
IF SQ = 0 THEN OBSAZ
PAUSE 1000
FOR X1 = 0 TO 3
FREQOUT TOUT,300,425
PAUSE 200
NEXT
PAUSE 2
GOTO SIGNAL
 
' mereni teploty
TEPLOTA11:
C1 = 0
C2 = 0
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 1000
HIGH TERM1
PAUSE 1
RCTIME TERM1,1,POT
LOW TERM1
IF POT < 160 THEN MINUSTEPLOTA
POT = POT - 160
C1 = POT / 10
C2 = POT - (C1 * 10)
PAUSE 700
DTMFOUT TOUT,100,50,[0,0,0,10,1,0,C1,C2]
'DEBUG " TEPLOTA 1= ",DEC C1
'DEBUG DEC C2
'DEBUG " "
GOTO SIGNAL
MINUSTEPLOTA:
POT = POT + 100
POT = POT - 160
POT = 100 - POT
C1 = POT / 10
C2 = POT - (C1 * 10)
PAUSE 700
DTMFOUT TOUT,100,50,[0,0,0,10,1,8,C1,C2]
'DEBUG " TEPLOTA 1= -",DEC C1
'DEBUG DEC C2
'DEBUG " "
 
GOTO SIGNAL
 
 
 
 
 
' mereni teploty
TEPLOTA12:
C1 = 0
C2 = 0
ERROR = 0
TPERR2:
IF ERROR = 20 THEN CSIGNAL
IF SQ = 1 THEN TEPLOTA1AA
PAUSE 100
ERROR = ERROR + 1
GOTO TPERR2
TEPLOTA1AA:
PAUSE 1000
FREQOUT TOUT,300,1400
PAUSE 1000
HIGH TERM2
PAUSE 1
RCTIME TERM2,1,POT
LOW TERM2
POT = POT - 130
C1 = POT / 10
C2 = POT - (C1 * 10)
PAUSE 700
DTMFOUT TOUT,100,50,[0,0,0,10,2,0,C1,C2]
'DEBUG " TEPLOTA 2= ",DEC C1
'DEBUG DEC C2
'DEBUG " "
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
IF X1 > 200 THEN OPEND
IF SQ = 1 THEN OPEND
GOTO OPCEK1
OPEND:
WRITE 3,X1
WRITE 33,X1
'DEBUG "ZAPSANO 3 33"
'DEBUG DEC X1
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
GOSUB ZAB
MHHH:
PAUSE 200
FOR X3 = 0 TO 4
LOOKUP X3,[227,163,253,132,129],CHARACTER
GOSUB TMORSE
NEXT
IDENT = 0
RETURN
 
'7 Nacitani kodu SYSOP
SYSERR:
GOTO OBSAZ
 
PROPOJA:
'DEBUG "PROPOJA AKTIVOVANO"
IF SQ = 0 THEN PROPOJA
PAUSE 1000
FREQOUT TOUT,300,1000:FREQOUT TOUT,300,1200
FREQOUT TOUT,300,1500:PAUSE 100
HIGH N
POM71:
IDENT = 0
POM72:
IF SQ = 1 THEN POM72A
IDENT = 0
POM72A:
IDENT = IDENT + 1:PAUSE 10
IF DTIN = 0 THEN POM72B
DTMFINA:
X1 = 0
 
DTA1:
IF DTIN = 0 THEN DTA2
PAUSE 10
X1 = X1 + 1
GOTO DTA1
 
DTA2:
IF X1 > 20 THEN DTA3
GOTO POM72B
 
DTA3:
X1 = 0
 
DTA33:
' X1 = X1 + 1
' PAUSE 10
' IF X1 > 150 THEN SIGNAL
IF SQ = 0 THEN DTA33
'DEBUG "DTMF= ",DEC DTMF
IF DTMF = 12 THEN POM73
IF DTMF = 6 THEN PROPOJB
IF DTMF = 5 THEN POM74
 
POM72B:
'DEBUG "IDENT = "
'DEBUG DEC IDENT
PAUSE 10
IF IDENT > 200 AND SQ2 = 0 THEN POM73
IF IDENT < 7000 THEN POM72
POM73:
'DEBUG "OFF"
IF SQ = 0 THEN POM73
PAUSE 100
FREQOUT TOUT,300,1500:FREQOUT TOUT,300,1200
FREQOUT TOUT,300,1000:PAUSE 100
LOW N:LOW K:PAUSE 200
GOTO OZ
 
POM74:
LOW K:GOTO PROPOJA
 
PROPOJB:
HIGH K
GOTO PROPOJA
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
' operatorske prikazy
CEKEJ:
SYSOP:
gosub cdtmf
if dtmf <> * or x2 = 1 then syserr
'DEBUG "ZADAN KOD * "
gosub CDTMF
if dtmf <> * or x2 = 1 then syserr
'DEBUG "ZADAN KOD*2 "
gosub CDTMF
if dtmf <> * or x2 = 1 then syserr
'DEBUG "ZADAN KOD*8 "
GOSUB CDTMF
IF DTMF <> * OR X2 = 1 THEN SYSERR
'DEBUG "KODE OK "
GOSUB CDTMF
'DEBUG "SYSOP c."
'DEBUG DEC DTMF
if x2 = 1 then syserr
branch dtmf,[syserr,SYSA1,SYSA2,SYSA3,SYSA4,SYSA5,SYSA6,SYSA7,SYSA8,SYSA9,SYSA0]
GOTO OBSAZ
 
' automaticke nacitani DTMF dat
 
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 < 50 then dtm1
x2 = 1
cdend:
return
 
'8 Sysop funkce - program
 
'**** ton test c. 1
SYSA1:
GOTO OBSAZ
' HIGH TX
' PAUSE 1500
' FOR X4 = 300 TO 3000 STEP 100
' FREQOUT TOUT,1000,X4
' NEXT
' PAUSE 1000
' GOTO SIGNAL
 
'**** vypnuti prevadece ( zablokovani vysilani TXu )
SYSA2:
IF SQ = 0 THEN SYSA2
PAUSE 1000
FREQOUT TOUT,500,1500:PAUSE 200
FREQOUT TOUT,500,1500:PAUSE 200
FREQOUT TOUT,500,1500:PAUSE 1000
LOW TX
 
SYSA22:
X1 = 0
POM1:
IF SQ = 1 THEN SYSA22
PAUSE 50
X1 = X1 + 1
IF X1 > 200 THEN POM2
GOTO POM1
 
POM2:
'DEBUG "AKTIVACE OK"
IF SQ = 0 THEN POM2
PAUSE 10000:GOTO START
 
 
'**** vypnuti / zapnuti pridavnych doplnkovych funkci OK0BT
SYSA3:
IF PBLOK = 1 THEN BLOK2
PBLOK = 1
WRITE 4,PBLOK
GOTO BLOKE
BLOK2:
PBLOK = 0
WRITE 4,PBLOK
BLOKE:
IF SQ = 0 THEN BLOKE
PAUSE 1000
FREQOUT TOUT,500,1500
PAUSE 1000
GOTO SIGNAL
 
SYSA4:
' IF SQ = 0 THEN SYSA4
' PAUSE 1000
' DTMFOUT TOUT,100,50,[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
' PAUSE 100
' DTMFOUT TOUT,100,50,[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
' PAUSE 1000
' GOTO SIGNAL
 
SYSA5:
' IF SQ = 0 THEN SYSA5
' PAUSE 1000
' FREQOUT TOUT,5000,1000
' PAUSE 100
' GOTO SIGNAL
 
SYSA6:
' IF SQ = 0 THEN SYSA6
' PAUSE 1000
' FREQOUT TOUT,5000,1750
' PAUSE 100
' GOTO SIGNAL
GOTO OBSAZ
 
'**** poslech posledni zk. modulace VM 888
 
SYSA7:
IF SQ = 0THEN SYSA7
READ 33,X1:X3 = 0
GOTO OPMOD1
 
OPMOD:
IF SQ = 0 THEN OPMOD
READ 3,X1:X3 = 0
OPMOD1:
PAUSE 1000
FREQOUT TOUT,200,800:FREQOUT TOUT,200,1000
PAUSE 500:GOTO OPPLAY
 
 
' zapnuti hlasky po obnoveni dodavky nap. napeti
SYSA8:
IF SQ = 0 THEN SYSA8
WRITE 19,1:PAUSE 500:FREQOUT TOUT,300,2000
PAUSE 500
X1= 2
GOTO ENDSEK
 
' vypnuti hlasky po obnoveni dodavky nap. napeti
SYSA9:
IF SQ = 0 THEN SYSA9
WRITE 19,0:PAUSE 500:FREQOUT TOUT,300,1000
PAUSE 500
X1 = 2
GOTO ENDSEK
 
' IF SQ = 0 THEN SYSA8
' X5 = 0:X6 = 0
' 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
 
' POMA00:
' HIGH TX
' GOSUB ZAB
' IF POT > 85 THEN POMP01
' IDENT = IDENT +1
''DEBUG " IDENT = ", DEC IDENT
' IF IDENT < 500 THEN POMA01
' GOSUB MHHH
' PAUSE 100
' GOSUB POMA0
' IDENT = 0
 
' POMA01:
' PAUSE 100
' IF SQ = 0 THEN START
' X5 = X5 + 1
''DEBUG " X5 = ",DEC X5
''DEBUG " X6 = ",DEC X6
' IF X5 = 250 THEN POMA000
' GOTO POMA00
 
' POMA000:
' X6 = X6 + 1
' IF X6 > 80 THEN POMP01
' GOTO POMA00
 
' POMP01:
' X5 = 0
' X6 = 0
' FREQOUT TOUT,1000,1500
' FREQOUT TOUT,1000,1250
' FREQOUT TOUT,1000,1000
' PAUSE 500
GOTO KLID
 
 
' SYSA9:
' X5 = 100:X6 = 81
' IF SQ = 0 THEN SYSA9
' PAUSE 1000
' FREQOUT TOUT,1000,1500:PAUSE 500
' X1 = 0
' GOTO ENDSEK
 
SYSA0:
' IF SQ = 0 THEN SYSA0
' PAUSE 1000
' FOR X4 = 300 TO 3000 STEP 100
' FREQOUT TOUT,2000,X4
' IF SQ = 0 THEN SYSA00
' NEXT
 
SYSA00:
' IF SQ = 0 THEN SYSA00
' PAUSE 1000
' GOTO SIGNAL
GOTO OBSAZ
 
' Zabezpecovaci funkce
 
ZAB:
'DEBUG "ZAB. FUNKCE"
PAUSE 100
HIGH TERM2
PAUSE 1
RCTIME TERM2,1,POT
LOW TERM2
POT = POT - 130
DEBUG " Teplota PA TXu = ",DEC POT
DEBUG " "
IF POT > 85 THEN ZAB1
IF PTT = 1 THEN ZAB111
IF POT > 45 THEN ZAB111
IF POT < 43 THEN ZABA01
RETURN
ZABA01:
DEBUG "VENT VYP"
DEBUG DEC POT
LOW VENT
RETURN
 
 
 
 
ZAB1:
C1 = POT / 10
C2 = POT - (C1 * 10)
FREQOUT TOUT,5000,500:PAUSE 700
DTMFOUT TOUT,100,50,[11,11,11,11,12,10,10,C1,C2]
PAUSE 500
FREQOUT TOUT,5000,500:PAUSE 500
LOW TX
HIGH VENT
 
ZAB11:
HIGH VENT
PAUSE 3000
HIGH TERM2
PAUSE1
RCTIME TERM2,1,POT
LOW TERM2
POT = POT -130
'DEBUG " Teplota PA TXu = ",DEC POT
'DEBUG " "
IF POT > 50 THEN ZAB11
GOTO KLID
 
ZAB111:
'DEBUG "VENT ZAP"
'DEBUG DEC POT
HIGH VENT
RETURN
 
SIG111:
GOSUB MHLASKA
X1 = 0
GOTO CSIGNAL