Skip to content

Instantly share code, notes, and snippets.

@bert
Last active January 16, 2019 19:18
Show Gist options
  • Save bert/89c9e66ff2ac2e72853d01fd9b051495 to your computer and use it in GitHub Desktop.
Save bert/89c9e66ff2ac2e72853d01fd9b051495 to your computer and use it in GitHub Desktop.
805x - Morse Hello World
*~
*.bak
*.asm
*.ihx
*.lnk
*.lst
*.map
*.mem
*.rel
*.rst
*.sym

Morse "HelloWorld" example for a 8052 processor.

CC=sdcc
CFLAGS=-mmcs51 --verbose --Werror --fverbose-asm
all:
${CC} ${CFLAGS} MorseHelloWorld.c
clean:
rm -f *~
rm -f *.asm
rm -f *.ihx
rm -f *.lnk
rm -f *.lst
rm -f *.map
rm -f *.mem
rm -f *.rel
rm -f *.rst
rm -f *.sym
/*!
* \file MorseHelloWorld.c
*
* \author .
*
* \brief Since Arduone is a much better hardware platform then the
* others, I decided to write instead of the classic blinking
* LED for newbies, a blicking led that says anyway "Hello world"
* to the world using morse code, then again, this is Arduone.
*/
/* Xtal 11.0592 MHz 6 clock cycle. */
/* Connect an LED with its 220 Ohm resistor between P0_0 and +5 V. */
/* To hear the morse signal replace the LED with a beeper. */
#include <8052.h>
#define LED P0_0
void
delay (void)
{
unsigned int a;
for (a = 0; a < 10000; a++);
}
/*!
* \brief generate a dot signal t_
*/
void
p (void)
{
LED = 0;
delay ();
LED = 1;
delay ();
}
/*!
* \brief generate a dash signal ttt_.
*/
void
l (void)
{
LED = 0;
delay ();
delay ();
delay ();
LED = 1;
delay ();
}
void
transmitChar (char buchstabe)
{
switch (buchstabe)
{
/* Morse code table https://en.wikipedia.org/wiki/Morse_code. */
case 'A': p (); l (); break;
case 'B': l (); p (); p (); p (); break;
case 'C': l (); p (); l (); p (); break;
case 'D': l (); p (); p (); break;
case 'E': p (); break;
case 'F': p (); p (); l (); p (); break;
case 'G': l (); l (); p (); break;
case 'H': p (); p (); p (); p (); break;
case 'I': p (); p (); break;
case 'J': p (); l (); l (); l (); break;
case 'K': l (); p (); l (); break;
case 'L': p (); l (); p (); p (); break;
case 'M': l (); l (); break;
case 'N': l (); p (); break;
case 'O': l (); l (); l (); break;
case 'P': p (); l (); l (); p (); break;
case 'Q': l (); l (); p (); l (); break;
case 'R': p (); l (); p (); break;
case 'S': p (); p (); p (); break;
case 'T': l (); break;
case 'U': p (); p (); l (); break;
case 'V': p (); p (); p (); l (); break;
case 'W': p (); l (); l (); break;
case 'X': l (); p (); p (); l (); break;
case 'Y': l (); p (); l (); l (); break;
case 'Z': l (); l (); p (); p (); break;
case '0': l (); l (); l (); l (); l (); break;
case '1': p (); l (); l (); l (); l (); break;
case '2': p (); p (); l (); l (); l (); break;
case '3': p (); p (); p (); l (); l (); break;
case '4': p (); p (); p (); p (); l (); break;
case '5': p (); p (); p (); p (); p (); break;
case '6': l (); p (); p (); p (); p (); break;
case '7': l (); l (); p (); p (); p (); break;
case '8': l (); l (); l (); p (); p (); break;
case '9': l (); l (); l (); l (); p (); break;
case '!': p (); l (); p (); l (); l (); break;
/* InterWord delay 7 dots (three dots delay are sent anyway
* exiting frome transmitChar() function). */
case ' ': delay (); delay (); delay (); delay (); break;
}
/* InterCharacter delay 3 dots. */
delay ();
delay ();
delay ();
}
void
transmitSentence (char *sz)
{
while (*sz) transmitChar (*sz++);
}
void
main (void)
{
LED = 1;
transmitSentence ("HELLO WORLD ! I AM HAL9000 FORCED INTO THIS LITTLE CHIP !");
while (1);
}
/* EOF */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment