CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Sending Morse Code, number so on.

 
Post new topic   Reply to topic    CCS Forum Index -> Code Library
View previous topic :: View next topic  
Author Message
ag6ju



Joined: 22 Jun 2021
Posts: 7
Location: Orange County Calif. USA

View user's profile Send private message Send e-mail Visit poster's website

Sending Morse Code, number so on.
PostPosted: Wed Jun 23, 2021 1:12 pm     Reply with quote

I often run my PIC at 32kHz, which is too slow clock for RS232 monitor
so I use Morse Code, send out variable and so on, to see what my program is doing.


Code:

//  CCS c compiler ver   v5_104___2021_05_13

#define  UI1   unsigned int1
#define  UI8   unsigned int8
#define  UI16  unsigned int16
#define  UI32  unsigned int32
//#define  UI48  unsigned int48
//#define  UI64  unsigned int64



#define  CW_SHORT_01  60  // pulse width in mS for morse code short pulse  , normal value 60
#define  CW_LONG_01   300  //  pulse width in mS for morse code long pulse  , normal value 300
#define  CW_DELAY_01  60  //  delay in mS between each dots and dits  , normal value 60
#define  CW_SPACE_AFTER_EACH_CHAR   3  // number of  CW_DELAY_01  space after each charactor, normal value 03




//  to send Beep ( DOT or DASH ) on CW, take 8 bits ineger --> number of pulses  and 1 bit integer -->  long -- 1, short -- 0
void beep_01( UI8 ui8_number_of_beeps_01, UI1  ui1_long_or_short_01 )
{
  UI8  ui8_loop_01;
  UI8  ui8_for_lp2;

  for ( ui8_loop_01 = 0; ui8_loop_01 < ui8_number_of_beeps_01; ++ui8_loop_01 )
  {
    if ( ui1_long_or_short_01 == 1 )
    {
      for ( ui8_for_lp2 = 0; ui8_for_lp2 < 200; ++ui8_for_lp2 )
      {
        #ifdef  TEST_BEEP_BUZ
        output_high ( TEST_BEEP );
        delay_us ( ( UI16 ) 700 );
        #endif
       
        #ifdef TEST_BEEP_SPKR
        output_low ( AUD_ON );
        delay_us ( ( UI16 ) 800 );       
        #endif
       

       
       
        #ifdef  TEST_BEEP_BUZ
        output_low ( TEST_BEEP );
        delay_us ( ( UI16 ) 700 );
        #endif
       
        #ifdef TEST_BEEP_SPKR
        output_high ( AUD_ON );
        delay_us ( ( UI16 ) 800 );
        #endif
      }
      delay_ms ( 15 );
    }
    else
    {
      for ( ui8_for_lp2 = 0; ui8_for_lp2 < 60; ++ui8_for_lp2 )
      {
        #ifdef  TEST_BEEP_BUZ
        output_high ( TEST_BEEP );
        delay_us ( ( UI16 ) 700 );
        #endif
       
        #ifdef TEST_BEEP_SPKR
        output_low ( AUD_ON );
        delay_us ( ( UI16 ) 800 );       
        #endif
       

       
       
        #ifdef  TEST_BEEP_BUZ
        output_low ( TEST_BEEP );
        delay_us ( ( UI16 ) 700 );
        #endif
       
        #ifdef TEST_BEEP_SPKR
        output_high ( AUD_ON );
        delay_us ( ( UI16 ) 800 );
        #endif
      } 
      delay_ms ( 30 );
    }

    output_low( TEST_BEEP );
  }  //  for ( ui8_loop_01 = 0; ui8_loop_01 < ui8_number_of_beeps_01; ++ui8_loop_01 )
   
}  //  void short_beep_01( UI8 ui8_number_of_beeps_01 )



//  to send space between charactor
void space_01( UI8 ui8_number_of_spaces_01 )
{
  UI8  ui8_loop_01;
  for ( ui8_loop_01 = 0; ui8_loop_01 < ui8_number_of_spaces_01; ++ui8_loop_01 )
  {
    delay_ms( CW_DELAY_01 );   //
  }  //  for ( ui8_loop_01 = 0; ui8_loop_01 < ui8_number_of_spaces_01; ++ui8_loop_01 )
   
} //  void space_01( UI8 ui8_number_of_spaces_01 )



// to call this function, put ASCII  number in Capital letter , it will send out morse code.
void send_ID( UI8 ui8_ID )
{
  switch( ui8_ID )
  {
    case 'A':
      beep_01 ( 1, 0 );
      beep_01 ( 1, 1 );
      break;

    case 'B':
      beep_01 ( 1, 1 );
      beep_01 ( 3, 0 );
      break;

    case 'C':
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      break;

    case 'D':
      beep_01 ( 1, 1 );
      beep_01 ( 2, 0 );
      break;

    case 'E':
      beep_01 ( 1, 0 );
      break;

    case 'F':
      beep_01 ( 2, 0 );
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      break;

    case 'G':
      beep_01 ( 2, 1 );
      beep_01 ( 1, 0 );
      break;

    case 'H':
      beep_01 ( 4, 0 );
      break;

    case 'I':
      beep_01 ( 2, 0 );
      break;

    case 'J':
      beep_01 ( 1, 0 );
      beep_01 ( 3, 1 );
      break;

    case 'K':
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      beep_01 ( 1, 1 );
      break;

    case 'L':
      beep_01 ( 1, 0 );
      beep_01 ( 1, 1 );
      beep_01 ( 2, 0 );
      break;

    case 'M':
      beep_01 ( 2, 1 );
      break;

    case 'N':
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      break;

    case 'O':
      beep_01 ( 3, 1 );
      break;

    case 'P':
      beep_01 ( 1, 0 );
      beep_01 ( 2, 1 );
      beep_01 ( 1, 0 );
      break;

    case 'Q':
      beep_01 ( 2, 1 );
      beep_01 ( 1, 0 );
      beep_01 ( 1, 1 );
      break;

    case 'R':
      beep_01 ( 1, 0 );
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      break;

    case 'S':
      beep_01 ( 3, 0 );
      break;

    case 'T':
      beep_01 ( 1, 1 );
      break;

    case 'U':
      beep_01 ( 2, 0 );
      beep_01 ( 1, 1 );
      break;

    case 'V':
      beep_01 ( 3, 0 );
      beep_01 ( 1, 1 );
      break;

    case 'W':
      beep_01 ( 1, 0 );
      beep_01 ( 2, 1 );
      break;

    case 'X':
      beep_01 ( 1, 1 );
      beep_01 ( 2, 0 );
      beep_01 ( 1, 1 );
      break;

    case 'Y':
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      beep_01 ( 2, 1 );
      break;

    case 'Z':
      beep_01 ( 2, 1 );
      beep_01 ( 2, 0 );
      break;

    case '1':
      beep_01 ( 1, 0 );
      beep_01 ( 4, 1 );
      break;

    case '2':
      beep_01 ( 2, 0 );
      beep_01 ( 3, 1 );
      break;

    case '3':
      beep_01 ( 3, 0 );
      beep_01 ( 2, 1 );
      break;

    case '4':
      beep_01 ( 4, 0 );
      beep_01 ( 1, 1 );
      break;

    case '5':
      beep_01 ( 5, 0 );
      break;

    case '6':
      beep_01 ( 1, 1 );
      beep_01 ( 4, 0 );
      break;

    case '7':
      beep_01 ( 2, 1 );
      beep_01 ( 3, 0 );
      break;

    case '8':
      beep_01 ( 3, 1 );
      beep_01 ( 2, 0 );
      break;

    case '9':
      beep_01 ( 4, 1 );
      beep_01 ( 1, 0 );
      break;

    case '0':
      beep_01 ( 5, 1 );
      break;

    case '-':
      beep_01 ( 1, 1 );
      beep_01 ( 4, 0 );
      beep_01 ( 1, 1 );
      break;

    case '?':
      beep_01 ( 2, 0 );
      beep_01 ( 2, 1 );
      beep_01 ( 2, 0 );
      break;

    case '/':
      beep_01 ( 1, 1 );
      beep_01 ( 2, 0 );
      beep_01 ( 1, 1 );
      beep_01 ( 1, 0 );
      break;
     
    case '=':
      beep_01 ( 1, 1 );
      beep_01 ( 3, 0 );
      beep_01 ( 1, 1 );
      break;     

    // speace
    case 32:
      space_01 ( CW_SPACE_AFTER_EACH_CHAR );
      space_01 ( CW_SPACE_AFTER_EACH_CHAR );
      break;


  }  //   switch( ui8_ID )

  space_01 ( CW_SPACE_AFTER_EACH_CHAR );
 
  restart_wdt();   //  restart  Watch Dog Timer

}  //  void send_ID( UI8 ui8_ID )




//  convert HEX number to CW code in letter  0-9, A-F
void send_cw_number_conv_hex_4bit( UI8 ui8_input )
{
  UI8  ui8_temp_01, ui8_temp_02;
 
  ui8_temp_01 = ( ui8_input & 0x0F );
 
  if ( ui8_temp_01 <= 9 )
  {
    //  convert number  0 - 9 to ID code
    ui8_temp_02 = ui8_temp_01 + 48;
  }
  else
  {
    //  convert number A - F  to ID code
    ui8_temp_02 = ui8_temp_01 + 55;
  }
 
  send_ID( ui8_temp_02 );
 
  delay_ms ( 200 );
}  //  void send_cw_number_conv_4( UI8 ui8_input )


//  convert HEX number to CW code in letter  0-9, A-F
void send_cw_number_conv_hex_8bit ( UI8 ui8_input )
{
  UI8  ui8_temp_01;
 
  ui8_temp_01 = ( UI8 ) (  ( ( UI8 ) 0xF0 & ui8_input ) / ( UI8 ) 0x10 );
  send_cw_number_conv_hex_4bit ( ui8_temp_01 );
 
  ui8_temp_01 = ( UI8 ) (  ( UI8 ) 0x0F &  ui8_input  );
  send_cw_number_conv_hex_4bit ( ui8_temp_01 );

}  //  void send_cw_number_conv_8( UI8 ui8_input )


//  convert 16bit HEX number to CW code in letter  0-9, A-F
void send_cw_number_conv_hex_16bit ( UI16 ui16_input )
{
  UI8  ui8_temp_01;

  // sending 1st byte
  ui8_temp_01 = ( UI8 ) (  ( ( UI16 ) 0xFF00 & ui16_input ) / ( UI16 ) 0x0100 );
  send_cw_number_conv_hex_8bit ( ui8_temp_01 );
 
  // sending  2nd byte
  ui8_temp_01 = ( UI8 ) (  ( UI16 ) 0x00FF &  ui16_input  );
  send_cw_number_conv_hex_8bit ( ui8_temp_01 );

}  //  void send_cw_number_conv_16( UI16 ui16_input )


//  convert 32 bit HEX number to CW code in letter  0-9, A-F
void send_cw_number_conv_hex_32bit ( UI32 ui32_input )
{
  UI16  ui16_temp_01;
 
  ui16_temp_01 = ( UI16 ) (  ( ( UI32 ) 0xFFFF0000 & ui32_input ) / ( UI32 ) 0x00010000 );
  send_cw_number_conv_hex_16bit ( ui16_temp_01 );

  ui16_temp_01 = ( UI16 ) (  ( ( UI32 ) 0x0000FFFF & ui32_input ) / ( UI32 ) 0x00000001 );
  send_cw_number_conv_hex_16bit ( ui16_temp_01 );

}  //  void send_cw_number_conv_32( UI32 ui32_input )


void  send_cw_number_decimal_16bit ( UI16  ui16_input )
{
  UI1  ui1_detected_non_zero_digit;
  UI8  ui8_digit_number;
  UI8  ui8_digit [ 6 ];
  UI16  ui16_10_power_dec [] = { 1, 10, 100, 1000, 10000 };
 
 
  ui1_detected_non_zero_digit = 0;
  //send_cw_number_conv_hex_4bit( 0x3 );
   
  for ( ui8_digit_number = 5 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
  {
    ui8_digit [ ui8_digit_number ]  = ( UI8 ) (  ui16_input / ui16_10_power_dec [ ui8_digit_number - 1 ]  );
    ui16_input -= ( UI16 ) ui8_digit [ ui8_digit_number ] * ui16_10_power_dec [ ui8_digit_number - 1 ];
    //send_cw_number_conv_hex_4bit(  ui8_digit [ ui8_digit_number ] );
  }  //  for ( ui8_digit_number = 5 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
 
  for ( ui8_digit_number = 5 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
  {
    if (   ( ui8_digit [ ui8_digit_number ] != 0 )  ||  ( ui1_detected_non_zero_digit == 1 )  )
    {
      send_cw_number_conv_hex_4bit( ui8_digit [ ui8_digit_number ] );
      ui1_detected_non_zero_digit = 1;  // if digits left of current digit is not 0
    } //  if (   ( ui8_digit [ ui8_digit_number ] != 0 )  ||  ( ui1_detected_non_zero_digit == 1 )  )
    else
    if (  (  ui8_digit_number == 1 )  &&  (  ui8_digit [ ui8_digit_number ] == 0  )  )
    {
      // if all digit is 0
      send_cw_number_conv_hex_4bit( 0 );
    }  //  else,  if (  (  ui8_digit_number == 1 )  &&  (  ui8_digit [ ui8_digit_number ] == 0  )  )
  }  //  for ( ui8_digit_number = 5 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
}  //  void  send_cw_number_decimal_16bit (  UI16  ui16_input )



void  send_cw_number_decimal_32bit ( UI32  ui32_input )
{
  UI1  ui1_detected_non_zero_digit;
  UI8  ui8_digit_number;
  UI8  ui8_digit [ 11 ];
  UI32  ui32_10_power_dec [] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
 
 
  ui1_detected_non_zero_digit = 0;
  //send_cw_number_conv_hex_4bit( 0x3 );
   
  for ( ui8_digit_number = 10 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
  {
    ui8_digit [ ui8_digit_number ]  = ( UI8 ) (  ui32_input / ui32_10_power_dec [ ui8_digit_number - 1 ]  );
    ui32_input -= ( UI16 ) ui8_digit [ ui8_digit_number ] * ui32_10_power_dec [ ui8_digit_number - 1 ];
    //send_cw_number_conv_hex_4bit(  ui8_digit [ ui8_digit_number ] );
  }  //  for ( ui8_digit_number = 10 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
 
  for ( ui8_digit_number = 10 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
  {
    if (   ( ui8_digit [ ui8_digit_number ] != 0 )  ||  ( ui1_detected_non_zero_digit == 1 )  )
    {
      send_cw_number_conv_hex_4bit( ui8_digit [ ui8_digit_number ] );
      ui1_detected_non_zero_digit = 1;  // if digits left of current digit is not 0
    } //  if (   ( ui8_digit [ ui8_digit_number ] != 0 )  ||  ( ui1_detected_non_zero_digit == 1 )  )
    else
    if (  (  ui8_digit_number == 1 )  &&  (  ui8_digit [ ui8_digit_number ] == 0  )  )
    {
      // if all digit is 0
      send_cw_number_conv_hex_4bit( 0 );
    }  //  else,  if (  (  ui8_digit_number == 1 )  &&  (  ui8_digit [ ui8_digit_number ] == 0  )  )
  }  //  for ( ui8_digit_number = 10 ;  ui8_digit_number >= 1 ;  --ui8_digit_number )
}  //  void  send_cw_number_decimal_32bit (  UI16  ui16_input )



//  find difference of  each number and return difference
UI16  ui16_diff ( UI16  ui16_inp1,  UI16  ui16_inp2 )
{
  UI16  ui16_diff;
 
  if ( ui16_inp1 >= ui16_inp2 )
  {
    ui16_diff = ui16_inp1 - ui16_inp2; 
  }
  else
  {
    ui16_diff = ui16_inp2 - ui16_inp1; 
  }

  return ( ui16_diff );
 
}  //UI16  ui16_diff ( UI16  ui16_inp1,  UI16  ui16_inp2 )


_________________
Orange County Calif. USA
http://ag6ju-ipv6.dynv6.net:5950/
sercankurt



Joined: 28 Aug 2021
Posts: 12

View user's profile Send private message

PostPosted: Sun Aug 29, 2021 2:35 pm     Reply with quote

looks delicious as a ham radio operator perspective, I will try ! 73 de TA1AFS
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> Code Library All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group