A code that I did some time ago, maybe of use to some.
'MORSE CODE TRANSMITION FROM ASCII
'LDELAY AND WDELAY ARE SHORTENED BECAUSE OF EXTRA CDELAY
'CDELAY=DELAY BETWEEN DOTS AND DASHES
'LDELAY=DELAY BETWEEN CHARACTERS
'WDELAY=DELAY BETWEEN WORDS
'INPUT TEXT STRING LIMITED TO 128 CHARACTERS PER INPUT
'IF FREQUENCY IS CHANGED, CHANGE COUNTER NUMBERS IN PROGRAM
'ANY MCU WITH TIMER1 CAN BE USED WITH CHANGE OF DEF.
'DOT=150 MILLISEC., DASH=450 MILLISEC., PAUSE BETWEEN DOTS AND DASHES IS ONE DOT
'PAUSE BETWEEN CHARACTERS IS 3 DOTS
'PAUSE BETWEEN WORDS IS 7 DOTS
$regfile = "m32def.dat"
$crystal = 7372800
$baud = 115200
$hwstack = 128
$swstack = 128
$framesize = 128
'$sim
Config Porta.0 = Output 'MORSE OUTPUT
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Timer1 = Counter , Prescale = 1024 , Edge = Rising , Compare A = Disconnect
Dim Charnum As Byte 'POSITION OF CHARACTER IN INPUTSTRING
Charnum = 1
Dim Instring As String * 128 'MAX. CHARACTERS BEFORE A <CR>
Dim Inchar As String * 1 'CHARACTER FROM SENTENCE BUFFER STRING
Dim Var As String * 6 'WILL HOLD TEMPORARY CHARACTER FROM INPUT
Dim Controlpos As Byte 'HOLDS POSITION OF CONTROL CHARACTER IN CONTROL MORSE STRING
Controlpos = 1
Dim Trans As String * 1
Const Cdel = 1080 '1080 COUNT DELAY BETWEEN DOTS AND DASHES IN A CHARACTER IS ONE DOT LENGTH (150 MSEC)
Const Ldel = 2160 '3240 (2160=LDEL-CDEL) COUNT DELAY BETWEEN CHARACTERS (450 MSEC) THREE DOTS
Const Wdel = 6480 '7560 (6480=WDEL-CDEL)COUNT DELAY BETWEEN WORDS (1050 MSEC) 7 DOTS
Dim Cr As String * 1
Cr = Chr(013)
'SET STRING LENGTH FOR CONTROL CHARACTERS
Dim A As String * 3 'CHARACTER "A"
Dim B As String * 5 'character "B"
Dim C As String * 5 'character "C"
Dim D As String * 4 'character "D"
Dim E As String * 2 'character "E"
Dim F As String * 5 'character "F"
Dim G As String * 4 'character "G"
Dim H As String * 5 'character "H"
Dim I As String * 3 'character "I"
Dim J As String * 5 'character "J"
Dim K As String * 4 'character "K"
Dim L As String * 5 'character "L"
Dim M As String * 3 'character "M"
Dim N As String * 3 'character "N"
Dim O As String * 4 'character "O"
Dim P As String * 5 'character "P"
Dim Q As String * 5 'character "Q"
Dim R As String * 4 'character "R"
Dim S As String * 4 'character "S"
Dim T As String * 2 'character "T"
Dim U As String * 4 'character "U"
Dim V As String * 5 'character "V"
Dim W As String * 4 'character "W"
Dim X As String * 5 'character "X"
Dim Y As String * 5 'character "Y"
Dim Z As String * 5 'character "Z"
Dim C1 As String * 6 'character "1"
Dim C2 As String * 6 'character "2"
Dim C3 As String * 6 'character "3"
Dim C4 As String * 6 'character "4"
Dim C5 As String * 6 'character "5"
Dim C6 As String * 6 'character "6"
Dim C7 As String * 6 'character "7"
Dim C8 As String * 6 'character "8"
Dim C9 As String * 6 'character "9"
Dim C0 As String * 6 'character "0"
Dim Spac As String * 1
Dim Ent As String * 1
'SET CONTROL CHARACTERS FOR CHARACTER MORSE CODE (1=DOT,3=DASH,0=END OF CHARACTER)
A = "130"
B = "31110"
C = "31310"
D = "3110"
E = "10"
F = "11310"
G = "3310"
H = "11110"
I = "110"
J = "13330"
K = "3130"
L = "13110"
M = "330"
N = "310"
O = "3330"
P = "13310"
Q = "33130"
R = "1310"
S = "1110"
T = "30"
U = "1130"
V = "11130"
W = "1330"
X = "31130"
Y = "31330"
Z = "33110"
C1 = "133330"
C2 = "113330"
C3 = "111330"
C4 = "111130"
C5 = "111110"
C6 = "311110"
C7 = "331110"
C8 = "333110"
C9 = "333310"
C0 = "333330"
Spac = "4"
Ent = "5"
Enable Interrupts
Gosub Dotdelay
Gosub Ldelay
Gosub Dashdelay
Getstr:
Gosub Cdelay 'THIS IS CALLED FOR TIME ADJUST IF AUTO INPUT OF TEXT FROM A PORT OR FILE 'MOVE INPUT TO STRING VARIABLE UNTIL <CR> IS ENTERED
Charnum = 1 'SET CHARACTER POSITION NUMBER TO FIRST CHARACTER IN STRING
Input "ENTER TRANSMIT TEXT " , Instring
Instring = Instring + Cr
Getchar: 'GET NEXT CHAR FROM STRING
Inchar = Mid(instring , Charnum , 1) 'GET CHAR FROM INPUTSTRING
Incr Charnum 'ANVANCE POINTER TO NEXT INPUT STRING CHARACTER POSITION
'*********
Char:
Var = "6"
If Inchar = "A" Then Var = A
If Inchar = "B" Then Var = B
If Inchar = "C" Then Var = C
If Inchar = "D" Then Var = D
If Inchar = "E" Then Var = E
If Inchar = "F" Then Var = F
If Inchar = "G" Then Var = G
If Inchar = "H" Then Var = H
If Inchar = "I" Then Var = I
If Inchar = "J" Then Var = J
If Inchar = "K" Then Var = K
If Inchar = "L" Then Var = L
If Inchar = "M" Then Var = M
If Inchar = "N" Then Var = N
If Inchar = "O" Then Var = O
If Inchar = "P" Then Var = P
If Inchar = "Q" Then Var = Q
If Inchar = "R" Then Var = R
If Inchar = "S" Then Var = S
If Inchar = "T" Then Var = T
If Inchar = "U" Then Var = U
If Inchar = "V" Then Var = V
If Inchar = "W" Then Var = W
If Inchar = "X" Then Var = X
If Inchar = "Y" Then Var = Y
If Inchar = "Z" Then Var = Z
If Inchar = "1" Then Var = C1
If Inchar = "2" Then Var = C2
If Inchar = "3" Then Var = C3
If Inchar = "4" Then Var = C4
If Inchar = "5" Then Var = C5
If Inchar = "6" Then Var = C6
If Inchar = "7" Then Var = C7
If Inchar = "8" Then Var = C8
If Inchar = "9" Then Var = C9
If Inchar = "0" Then Var = C0
If Inchar = " " Then Var = Spac
If Inchar = Cr Then Var = Ent
If Var = "4" Then Gosub Wdelay 'SPACE DETECTED CALL WORD DELAY
If Var = "4" Then Goto Getchar
If Var = "5" Then Gosub Wdelay 'END OF SENTENCE <CR> DETECTED
If Var = "5" Then Goto Getstr 'RETURN TO MAIN PROGRAM AND INPUT A NEW SENTENCE
If Var = "6" Then Goto Getchar 'NO SUCH CHARACTER !!!!!!!!OR GOTO TO CHAR INPUT
Gosub Ldelay 'DELAY AND THEN GET NEW CHARACTER
Controloutpu:
Controlpos = 1
Controlout:
Trans = Mid(var , Controlpos , 1) 'GET CONTROL CHARACTER TO TRANSMIT CHARACTER
If Trans = "1" Then Gosub Dotdelay 'TURN ON FOR A DOT
If Trans = "3" Then Gosub Dashdelay
If Trans = "0" Then Goto Getchar
Incr Controlpos
Gosub Cdelay
Goto Controlout
End 'END PROGRAM
'***OFF PAUSES BETWEEN DOTS, DASHES, CHARACTERS AND WORDS*** 'end program
Wdelay: 'DELAY IN BETWEEN WORDS OR SENTENCE
Timer1 = 0 '1050 MSEC.
Start Timer1
Do
Loop Until Timer1 > Wdel
Stop Timer1
Return
'*
Cdelay: 'DELAY BETWEEN DOTS AND DASHES
Timer1 = 0 '150 MSEC.
Start Timer1
Do
Loop Until Timer1 > Cdel
Stop Timer1
Return
'*
Ldelay: 'DELAY BETWEEN CHARACTERS
Timer1 = 0 '450 MSEC.
Start Timer1
Do
Loop Until Timer1 > Ldel
Stop Timer1
Return
'**********************ON TIMES FOR*******DOT*****DASH********
Dotdelay: 'TURN ON FOR A DOT
Timer1 = 0
Start Timer1
Set Porta.pb0
Do
Loop Until Timer1 > Cdel
Reset Porta.pb0
Stop Timer1
Return
'*
Dashdelay: 'TURN ON FOR A DASH
Timer1 = 0
Start Timer1
Set Porta.pb0
Do
Loop Until Timer1 > Ldel
Reset Porta.pb0
Stop Timer1
Return
'****************END OF SUBROUTINES****************************
'Hubert
↧