' MorseMeter Program by KA8DDZ and WD8DAS 
' May 2004

include "modedefs.bas"
define OSC 4
InByte var byte[15] 
mybyte var byte
x var byte
 
trisb.1=1
trisb.2=0
 
start: 
 
loop:
if portb.1=1 then loop                        ' wait for press of start button
pause 100
define ser2_bits 7                            ' set serial commo to 7-bit
serout2 portb.4,18030,[13]                    ' Transmit a carriage return at 600 baud
serin2 portb.5,18030,3000,BAD,[STR InByte\14] ' Receive 14 characters at 600 baud
 
pause 100
BAD:
for x=0 to 13
mybyte = Inbyte[x]
if mybyte="1" then gosub one
if mybyte="2" then gosub two
if mybyte="3" then gosub three
if mybyte="4" then gosub four
if mybyte="5" then gosub five
if mybyte="6" then gosub six
if mybyte="7" then gosub seven
if mybyte="8" then gosub eight
if mybyte="9" then gosub nine
if mybyte="0" then gosub zero
if mybyte="." then gosub decimal
if mybyte="-" then gosub dash
if mybyte="V" then gosub vee
if mybyte="v" then gosub vee
if mybyte="D" then gosub dee
if mybyte="C" then gosub cee
if mybyte="A" then gosub aye
if mybyte="M" then gosub emm
if mybyte="m" then gosub emm
if mybyte="O" then gosub ohh
if mybyte="K" then gosub kay
if mybyte="k" then gosub kay
if mybyte="H" then gosub ach
if mybyte="L" then gosub ell
 
pause 300
next x
FREQOUT PORTb.2,100,2000
for x=0 to 13
inbyte[x]=" "
next x
goto start 
 
one:
gosub dit:gosub dah:gosub dah:gosub dah:gosub dah
return
two:
gosub dit:gosub dit:gosub dah:gosub dah:gosub dah
return
three:
gosub dit:gosub dit:gosub dit:gosub dah:gosub dah
return
four:
gosub dit:gosub dit:gosub dit:gosub dit:gosub dah
return
five:
gosub dit:gosub dit:gosub dit:gosub dit:gosub dit
return
six:
gosub dah:gosub dit:gosub dit:gosub dit:gosub dit
return
seven:
gosub dah:gosub dah:gosub dit:gosub dit:gosub dit
return
eight:
gosub dah:gosub dah:gosub dah:gosub dit:gosub dit
return
nine:
gosub dah:gosub dah:gosub dah:gosub dah:gosub dit
return
zero:
gosub dah:gosub dah:gosub dah:gosub dah:gosub dah
return
decimal:
gosub dit:gosub dah:gosub dit:gosub dah:gosub dit:gosub dah
return
dash:
gosub dah:gosub dit:gosub dit:gosub dit:gosub dah
return
vee:
gosub dit:gosub dit:gosub dit:gosub dah
return
dee:
gosub dah:gosub dit:gosub dit
return
cee:
gosub dah:gosub dit:gosub dah:gosub dit
return
aye:
gosub dit:gosub dah
return
ach:
gosub dit:gosub dit:gosub dit:gosub dit
return
ohh:
gosub dah:gosub dah:gosub dah
return 
kay:
gosub dah:gosub dit:gosub dah
return 
emm:
gosub dah:gosub dah
return
ell:
gosub dit:gosub dah:gosub dit:gosub dit
return

dit:
FREQOUT PORTb.2,100,1000
pause 100
return
dah:
FREQOUT PORTb.2,300,1000
pause 100
return
end 
 
Goto start                     ' Do it all over again
 
End