(王盾)编者按:此文提供了一种用计算机产生莫尔斯报的业余方法,供爱好者开阔思路。手工莫尔斯报的机械接收,因手法、速率、点划比等随机变化,目前仍是一个难题。作为业余无线电爱好者,还是应当下功夫过好莫尔斯报的手工收发关,这样才能在业余通信中得心应手。
自莫尔斯码电报问世以来,电报通信已广泛地应用于各个领域中。业余无线电爱好者也越来越普遍地使用电报通信与五湖四海的朋友们联络。
初入此域的爱好者都会发现,要想学好发报,首先是要记下一大堆电码,进而便要反复地进行枯燥无味的拍发练习,绝非一日之功。
本文介绍的方法,可以使您从繁重的练习中解脱出来。不过,您得拥有一台微型计算机才行。
该自动莫尔斯码电报由程序和电路两部分组成。
下面分别作一介绍。
一、程序部分
该程序是用PASCAL语言编写的,图1是它的流程图。从图中我们可以看到,这个程序的实质是一个翻译系统:即把从键盘输入的字符变换成为莫尔斯码,然后转变成声音信号,由扬声器发出。为了叙述方便,我们把一个“点”信号的长度定义为一拍,一个“划”信号的长度定义为三拍。

过程LS用于产生一个三拍长度的“划”的声音信号,并在发声完毕后作一拍的延时;过程SS用于产生一个一拍长度的“点”的声音信号,同样也在发声完毕后作一拍的延时;过程ST用于产生两拍的延时;过程SP用于产生四拍的延时。
过程SAY是程序的核心,它将由变量C传递来的字符转变为标准的莫尔斯码,并以声音的形式表达出来。
字符的莫尔斯码,如附表所示。

我们知道,对于莫尔斯码,有以下规定:
1.“划”的长度为三拍,“点”的长度为一拍;
2.“点—划”、“点—点”、“划—划”之间空一拍;
3.字(字符)间空三拍;
4.字组间空五拍。
我们来看看过程SAY是如何满足这些规定的。以发送字符“1”为例:“1”的莫尔斯码为“.----”,对应于过程中的语句为SS;LS;LS;LS;LS;ST;。由前面可知,过程SS和LS在末尾均有一拍延时,即“点”、“划”之间空一拍。由ST产生两拍延时,再加上它前面的一拍,保证了单字间有三拍延时,由于两组单字间,通常以空格键分隔,每个空格对应一个SP过程,产生一个四拍延时,再加上它前面产生的一拍,恰好满足各组单字间有五拍延时的要求。可见该程序产生的是标准的莫尔斯码。
在程序中常量L控制发报速度,常量F用于控制发声频率,本例中频率选用2500Hz,因为这个频率所受环境干扰小。改变F的值可改变频率,不过电路部分中的有关元件也要做相应的变动。
二、电路部分
图中VT1、VT2、VT3、接成三级低频放大器,用以将驻极体话筒接收到的音频信号放大到足够推动后面的电路。VT4、VT5、VT6组成选频放大器,它采用了双T电路。按图中的元件数值,此电路选出音频中2500Hz的信号。VD1、VD2将输出的音频信号整流为直流信号,控制后面的开关电路。VT8是一个反相器,控制高频放大级VT9的工作状态。在输入直流信号控制下VT8不停地导通与截止,从而形成等幅报(CW)由天线辐射出去。
这个电路在使用时,只需要将驻极体话筒对准计算机的扬声器,并将程序编译后运行,这时屏幕上出现“Please input a line:(Enter to end)”的提示,你便可以从键盘上输入待发的内容,与远方的朋友通信了。
程序清单
L
Uses Crt;
Const
f=2500;L=70
Var
S:String;
I:Integer
Procedure LS ;注:发送一个“划”的信号
Begin
Sound(F); Delay(3*L); Nosound;Delay(L);
End;
Procedure SS;注:发送一个“点”的信号
Sound(F);Delay(L);Nosound;Delay(L);
End;
Procedure ST;注:延时两拍
Begin
Delay(2*L)
End;
Procedure SP;注:延时四拍
Begin
Delay(4*L);
End;
Procedure Say(C:Char);
Begin
Case Upcase(C) of
’’:Begin SP;End;
’1’:Begin SS;LS;LS;LS;LS;ST;End;
’2’:Begin SS;SS;LS;LS;LS;ST;End;
’3’:Begin SS;SS;SS;LS;LS;ST;End;
’4’:Begin SS;SS;SS;SS;LS;ST;EDd;
’5’:Begin SS;SS;SS;SS;SS;ST;End;
’6’:Begin LS; SS; SS;SS;SS;ST;End;
’7’:Begin LS;LS;SS; SS;SS;ST;End;
’8’:Begin LS;LS;LS;SS;SS;ST;End;
’9’:Begin LS;LS;LS;LS;SS;ST;End;
’0’:Begin LS;LS;LS;LS;LS;ST;End;
’A’:Begin SS;LS;ST;End;
’B’:Begin LS; SS;SS;SS;ST;End;
’C’:Begin LS; SS; LS;SS;ST;End;
’D’:Begin LS;SS;SS;ST;End;
’E’:Begin SS;ST;End;
’F’:Begin SS;SS;LS;SS;ST;End;
’G’:Begin LS;LS;SS;ST;End;
’H’:Begin SS;SS;SS;SS;ST;End;
’i’:Begin SS;SS;ST;End;
’J’:Begin SS;LS;LS;LS:ST;End;
’K’:Begin LS;SS;LS;ST;End;
’L’:Begin SS;LS;SS;SS;ST; End;
’M’:Begin LS;LS;ST;End;
’N’:Begin LS;SS;ST;End;
’O’:Begin LS;LS;LS;ST;End;
’P’:Begin SS;LS;LS;SS;ST;End;
’Q’:Begin LS;LS;SS;LS;ST;End;
’R’:Begin SS;LS;SS;ST;End;
’S’:Begin SS;SS;SS;ST;End;
’T’:Begin LS;ST;End;
’U’:Begin SS;SS;LS;ST;End;
’V’:Begin SS; SS;SS;LS;ST;End;
’W’:Begin SS;LS;LS; ST;End;
’X’:Begin LS;SS;SS; LS;ST;End;
’Y’:Begin LS; SS; LS; ST;End;
’Z’:Begin LS;LS;SS;SS;ST;End;
End;
End;
Begin(Main)
Clrscr;
Repeat
Writeln(’Please input a line:(Enter to end)’);
Readln(S);
For I:=1 To Length(S)Do
Begin
Ssy(S(i));
End;
Until s=’’;
End.

