Well it's quite simple, The 3 least significant bits are how many DIT's or DAH'S make up the character. The most significant 5 bits make up the message of DIT'S or DAH'S. The 1's are DAH'S and the 0's are DIT'S from left to right. The program mearly loops the number of dit's or dah's and depending on the state of the most significant bit, generates the appropriate dit or dah. The character is then left shifted for the next dit or dah. Understand? I had to make the code compact as the 10F222 only has 512 bytes of flash memory and 23 bytes of ram.....