Code:
/* +---------------------------------+
| |
| Morse-Code-Generator |
| von René Becker |
| |
+---------------------------------+
*/
//---------------------------------------------------------
/* +-----------------+
| | | |
| | Includes | |
| | & | |
| | Defines | |
| V V |
+-----------------+
*/
//---------------------------------------------------------
#include <avr/io.h>
#include <asuro.h>
//---------------------------------------------------------
#define sekunden 0.4
//---------------------------------------------------------
#define MORSE_a blinken(1,1,0); blinken(1,3,2);
#define MORSE_b blinken(1,3,0); blinken(2,1,0); blinken(1,1,2);
#define MORSE_c blinken(1,3,0); blinken(1,1,0); blinken(1,3,0); blinken(1,1,2);
#define MORSE_d blinken(1,3,0); blinken(1,1,0); blinken(1,1,2);
#define MORSE_e blinken(1,1,2);
#define MORSE_f blinken(2,1,0); blinken(1,3,0); blinken(1,1,2);
#define MORSE_g blinken(2,3,0); blinken(1,1,2);
#define MORSE_h blinken(3,1,0); blinken(1,1,2);
#define MORSE_i blinken(1,1,0); blinken(1,1,2);
#define MORSE_j blinken(1,1,0); blinken(2,3,0); blinken(1,3,2);
#define MORSE_k blinken(1,3,0); blinken(1,1,0); blinken(1,3,2);
#define MORSE_l blinken(1,1,0); blinken(1,3,0); blinken(1,1,0); blinken(1,1,2);
#define MORSE_m blinken(1,3,0); blinken(1,3,2);
#define MORSE_n blinken(1,3,0); blinken(1,1,2);
#define MORSE_o blinken(2,3,0); blinken(1,3,2);
#define MORSE_p blinken(1,1,0); blinken(2,3,0); blinken(1,1,2);
#define MORSE_q blinken(2,3,0); blinken(1,1,0); blinken(1,3,2);
#define MORSE_r blinken(1,1,0); blinken(1,3,0); blinken(1,1,2);
#define MORSE_s blinken(2,1,0); blinken(1,1,2);
#define MORSE_t blinken(1,3,2);
#define MORSE_u blinken(2,1,0); blinken(1,3,2);
#define MORSE_v blinken(3,1,0); blinken(1,3,2);
#define MORSE_w blinken(1,1,0); blinken(1,3,0); blinken(1,3,2);
#define MORSE_x blinken(1,3,0); blinken(2,1,0); blinken(1,3,2);
#define MORSE_y blinken(1,3,0); blinken(1,1,0); blinken(1,3,0); blinken(1,3,2);
#define MORSE_z blinken(2,3,0); blinken(1,1,0); blinken(1,1,2);
#define MORSE_wortende ownsleep(5*einheit);
#define MORSE_punkt blinken(1,1,0); blinken(1,3,0); blinken(1,1,0); blinken(1,3,0); blinken(1,1,0); blinken(1,3,2);
//---------------------------------------------------------
/* +----------------------+
| | | |
| | Unterprogramme | |
| V V |
+----------------------+
*/
//---Einheit-----------------------------------------------
long einheit = sekunden/0.00000438;
//---------------------------------------------------------
//---Wort/Satz/Buchstabe-----------------------------------
char einZeichen[] = "#";
char Zeichenkette[] = "";
uint8_t z1, z2 = 0;
//---------------------------------------------------------
//---mysleep-----------------------------------------------
int ownsleep (long sleepdauer)
{
long zaehler;
for (zaehler=0 ; zaehler<=sleepdauer ; zaehler++ )
{
asm volatile ( "nop":: ) ;
}
}
//---------------------------------------------------------
//---Blinken-----------------------------------------------
int blinken(int anzahl,int multipl,int endsleep)
{
int xx;
for (xx=0;xx<anzahl;xx++)
{
PORTD = 0b01000000;
ownsleep (multipl*einheit);
PORTD = 0b00000000;
ownsleep (1*einheit);
}
ownsleep(endsleep*einheit);
}
//---------------------------------------------------------
//----Hyperterminaleingabe---------------------------------
//---------------------------------------------------------
/* +----------------------+
| | | |
| | Hauptprogramm | |
| V V |
+----------------------+
*/
//---Main--------------------------------------------------
int main ()
{
DDRD = 0b01000100;
DDRC = 0b00000011;
DDRB = 0b00000000;
char einZeichen[] = "#";
char Zeichenkette[] = "";
while(1)
{
z1=0;
do
{
SerRead(einZeichen,1,0); // warten bis ein Zeichen über IR kommt
SerWrite(&einZeichen[0],1); // Kontrollausgabe zum Terminal
Zeichenkette[z1] = einZeichen[0];
z1++;
}
while (einZeichen[0] != 0x09); // solange Zeichen einlesen bis VT erkannt wird
for (z2 = 0; z2 < z1; z2++)
{
{
switch (Zeichenkette[z2]) // der erste Index von einZeichen[] ist 0
{
case ('a'): MORSE_a
case ('b'): MORSE_b
case ('c'): MORSE_c
case ('d'): MORSE_d
case ('e'): MORSE_e
case ('f'): MORSE_f
case ('g'): MORSE_g
case ('h'): MORSE_h
case ('i'): MORSE_i
case ('j'): MORSE_j
case ('k'): MORSE_k
case ('l'): MORSE_l
case ('m'): MORSE_m
case ('n'): MORSE_n
case ('o'): MORSE_o
case ('p'): MORSE_p
case ('q'): MORSE_q
case ('r'): MORSE_r
case ('s'): MORSE_s
case ('t'): MORSE_t
case ('u'): MORSE_u
case ('v'): MORSE_v
case ('w'): MORSE_w
case ('x'): MORSE_x
case ('y'): MORSE_y
case ('z'): MORSE_z
case (' '): MORSE_wortende
case ('.'): MORSE_punkt
}
}
}
}
return(0);
}
@damaltor: die morsecodes zu den buchstaben stimmen
Lesezeichen