Quantcast
Channel: MCS Electronics Forum
Viewing all articles
Browse latest Browse all 20563

Share your working BASCOM-AVR code here : Morse code transmit : NEWTOPIC

$
0
0
A code that I did some time ago, maybe of use to some. 'MORSE CODE TRANSMITION FROM ASCII 'LDELAY AND WDELAY ARE SHORTENED BECAUSE OF EXTRA CDELAY 'CDELAY=DELAY BETWEEN DOTS AND DASHES 'LDELAY=DELAY BETWEEN CHARACTERS 'WDELAY=DELAY BETWEEN WORDS 'INPUT TEXT STRING LIMITED TO 128 CHARACTERS PER INPUT 'IF FREQUENCY IS CHANGED, CHANGE COUNTER NUMBERS IN PROGRAM 'ANY MCU WITH TIMER1 CAN BE USED WITH CHANGE OF DEF. 'DOT=150 MILLISEC., DASH=450 MILLISEC., PAUSE BETWEEN DOTS AND DASHES IS ONE DOT 'PAUSE BETWEEN CHARACTERS IS 3 DOTS 'PAUSE BETWEEN WORDS IS 7 DOTS $regfile = "m32def.dat" $crystal = 7372800 $baud = 115200 $hwstack = 128 $swstack = 128 $framesize = 128 '$sim Config Porta.0 = Output 'MORSE OUTPUT Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Timer1 = Counter , Prescale = 1024 , Edge = Rising , Compare A = Disconnect Dim Charnum As Byte 'POSITION OF CHARACTER IN INPUTSTRING Charnum = 1 Dim Instring As String * 128 'MAX. CHARACTERS BEFORE A <CR> Dim Inchar As String * 1 'CHARACTER FROM SENTENCE BUFFER STRING Dim Var As String * 6 'WILL HOLD TEMPORARY CHARACTER FROM INPUT Dim Controlpos As Byte 'HOLDS POSITION OF CONTROL CHARACTER IN CONTROL MORSE STRING Controlpos = 1 Dim Trans As String * 1 Const Cdel = 1080 '1080 COUNT DELAY BETWEEN DOTS AND DASHES IN A CHARACTER IS ONE DOT LENGTH (150 MSEC) Const Ldel = 2160 '3240 (2160=LDEL-CDEL) COUNT DELAY BETWEEN CHARACTERS (450 MSEC) THREE DOTS Const Wdel = 6480 '7560 (6480=WDEL-CDEL)COUNT DELAY BETWEEN WORDS (1050 MSEC) 7 DOTS Dim Cr As String * 1 Cr = Chr(013) 'SET STRING LENGTH FOR CONTROL CHARACTERS Dim A As String * 3 'CHARACTER "A" Dim B As String * 5 'character "B" Dim C As String * 5 'character "C" Dim D As String * 4 'character "D" Dim E As String * 2 'character "E" Dim F As String * 5 'character "F" Dim G As String * 4 'character "G" Dim H As String * 5 'character "H" Dim I As String * 3 'character "I" Dim J As String * 5 'character "J" Dim K As String * 4 'character "K" Dim L As String * 5 'character "L" Dim M As String * 3 'character "M" Dim N As String * 3 'character "N" Dim O As String * 4 'character "O" Dim P As String * 5 'character "P" Dim Q As String * 5 'character "Q" Dim R As String * 4 'character "R" Dim S As String * 4 'character "S" Dim T As String * 2 'character "T" Dim U As String * 4 'character "U" Dim V As String * 5 'character "V" Dim W As String * 4 'character "W" Dim X As String * 5 'character "X" Dim Y As String * 5 'character "Y" Dim Z As String * 5 'character "Z" Dim C1 As String * 6 'character "1" Dim C2 As String * 6 'character "2" Dim C3 As String * 6 'character "3" Dim C4 As String * 6 'character "4" Dim C5 As String * 6 'character "5" Dim C6 As String * 6 'character "6" Dim C7 As String * 6 'character "7" Dim C8 As String * 6 'character "8" Dim C9 As String * 6 'character "9" Dim C0 As String * 6 'character "0" Dim Spac As String * 1 Dim Ent As String * 1 'SET CONTROL CHARACTERS FOR CHARACTER MORSE CODE (1=DOT,3=DASH,0=END OF CHARACTER) A = "130" B = "31110" C = "31310" D = "3110" E = "10" F = "11310" G = "3310" H = "11110" I = "110" J = "13330" K = "3130" L = "13110" M = "330" N = "310" O = "3330" P = "13310" Q = "33130" R = "1310" S = "1110" T = "30" U = "1130" V = "11130" W = "1330" X = "31130" Y = "31330" Z = "33110" C1 = "133330" C2 = "113330" C3 = "111330" C4 = "111130" C5 = "111110" C6 = "311110" C7 = "331110" C8 = "333110" C9 = "333310" C0 = "333330" Spac = "4" Ent = "5" Enable Interrupts Gosub Dotdelay Gosub Ldelay Gosub Dashdelay Getstr: Gosub Cdelay 'THIS IS CALLED FOR TIME ADJUST IF AUTO INPUT OF TEXT FROM A PORT OR FILE 'MOVE INPUT TO STRING VARIABLE UNTIL <CR> IS ENTERED Charnum = 1 'SET CHARACTER POSITION NUMBER TO FIRST CHARACTER IN STRING Input "ENTER TRANSMIT TEXT " , Instring Instring = Instring + Cr Getchar: 'GET NEXT CHAR FROM STRING Inchar = Mid(instring , Charnum , 1) 'GET CHAR FROM INPUTSTRING Incr Charnum 'ANVANCE POINTER TO NEXT INPUT STRING CHARACTER POSITION '********* Char: Var = "6" If Inchar = "A" Then Var = A If Inchar = "B" Then Var = B If Inchar = "C" Then Var = C If Inchar = "D" Then Var = D If Inchar = "E" Then Var = E If Inchar = "F" Then Var = F If Inchar = "G" Then Var = G If Inchar = "H" Then Var = H If Inchar = "I" Then Var = I If Inchar = "J" Then Var = J If Inchar = "K" Then Var = K If Inchar = "L" Then Var = L If Inchar = "M" Then Var = M If Inchar = "N" Then Var = N If Inchar = "O" Then Var = O If Inchar = "P" Then Var = P If Inchar = "Q" Then Var = Q If Inchar = "R" Then Var = R If Inchar = "S" Then Var = S If Inchar = "T" Then Var = T If Inchar = "U" Then Var = U If Inchar = "V" Then Var = V If Inchar = "W" Then Var = W If Inchar = "X" Then Var = X If Inchar = "Y" Then Var = Y If Inchar = "Z" Then Var = Z If Inchar = "1" Then Var = C1 If Inchar = "2" Then Var = C2 If Inchar = "3" Then Var = C3 If Inchar = "4" Then Var = C4 If Inchar = "5" Then Var = C5 If Inchar = "6" Then Var = C6 If Inchar = "7" Then Var = C7 If Inchar = "8" Then Var = C8 If Inchar = "9" Then Var = C9 If Inchar = "0" Then Var = C0 If Inchar = " " Then Var = Spac If Inchar = Cr Then Var = Ent If Var = "4" Then Gosub Wdelay 'SPACE DETECTED CALL WORD DELAY If Var = "4" Then Goto Getchar If Var = "5" Then Gosub Wdelay 'END OF SENTENCE <CR> DETECTED If Var = "5" Then Goto Getstr 'RETURN TO MAIN PROGRAM AND INPUT A NEW SENTENCE If Var = "6" Then Goto Getchar 'NO SUCH CHARACTER !!!!!!!!OR GOTO TO CHAR INPUT Gosub Ldelay 'DELAY AND THEN GET NEW CHARACTER Controloutpu: Controlpos = 1 Controlout: Trans = Mid(var , Controlpos , 1) 'GET CONTROL CHARACTER TO TRANSMIT CHARACTER If Trans = "1" Then Gosub Dotdelay 'TURN ON FOR A DOT If Trans = "3" Then Gosub Dashdelay If Trans = "0" Then Goto Getchar Incr Controlpos Gosub Cdelay Goto Controlout End 'END PROGRAM '***OFF PAUSES BETWEEN DOTS, DASHES, CHARACTERS AND WORDS*** 'end program Wdelay: 'DELAY IN BETWEEN WORDS OR SENTENCE Timer1 = 0 '1050 MSEC. Start Timer1 Do Loop Until Timer1 > Wdel Stop Timer1 Return '* Cdelay: 'DELAY BETWEEN DOTS AND DASHES Timer1 = 0 '150 MSEC. Start Timer1 Do Loop Until Timer1 > Cdel Stop Timer1 Return '* Ldelay: 'DELAY BETWEEN CHARACTERS Timer1 = 0 '450 MSEC. Start Timer1 Do Loop Until Timer1 > Ldel Stop Timer1 Return '**********************ON TIMES FOR*******DOT*****DASH******** Dotdelay: 'TURN ON FOR A DOT Timer1 = 0 Start Timer1 Set Porta.pb0 Do Loop Until Timer1 > Cdel Reset Porta.pb0 Stop Timer1 Return '* Dashdelay: 'TURN ON FOR A DASH Timer1 = 0 Start Timer1 Set Porta.pb0 Do Loop Until Timer1 > Ldel Reset Porta.pb0 Stop Timer1 Return '****************END OF SUBROUTINES**************************** 'Hubert

Viewing all articles
Browse latest Browse all 20563

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>