'Morse V1.1b by dl8wig 20.06.2010 Änderung: anstelle 3xCQ "test fd dl8wig k" gesetzt, Wiederlolen auf KN ohne 599 reduziert 'PortB.0 ist Ausgang zum Tasten einen Redrelais, die restlich Pins sind Eingänge und mit '10 kohm- Widerständen auf Masse gelegt. Sie werden mit +5V highaktiv geschaltet 'Achtung, da nach dem Brennen der EEPROM leer ist, wird 1. Kontrollnummer als "0" ausgegeben ! 'KN setzen oder zurücksetzen '------------------------------------------------------------------------------------------- $regfile = "attiny2313.dat" 'AT90S2313 auch möglich $crystal = 1000000 $eeprom Config Portd = Input Ddrb = &B11111110 'Pin PB0 Ausgang, rest Eingang Dim Scha As Byte 'Sch = PinD 0-6 , Scha = PinB 1-7 'Dim I As Integer Dim Zahl As Integer Dim Kontrnr As Integer 'Kontrollnummer Dim Zeit As Byte 'für kurz Dim Zeit_lang As Integer 'für lang Dim Zeit_sehr_lang As Integer 'für Pause zwischen Worten Dim _adr As Integer 'für EEPRomadresse Dim Einer As Integer Dim Zehner As Integer _adr = 1 'Adresse für EEPROM auf 1 setzen; hier soll die letzte Kontrollnummer gespeichert werden Zeit = 60 'Ausganszustand für Zeichen- und Pausenlänge wird hier festgelegt Zeit_lang = 180 Zeit_sehr_lang = 360 Kontrnr = 1 '***************** Main *************************************************************************** Do If Pind.0 = 1 Then 'Gosub Ur Gosub Rst 'Taster 1 (unten links) Gosub Dok Gosub Bk Elseif Pind.1 = 1 Then 'Gosub Ur Gosub Rst 'Taster 2 Gosub Nr Gosub Bk Elseif Pind.4 = 1 Then 'Gosub Rst_ohne_ur Gosub Wiederhol_rst_nr 'Gosub Bk 'Taster 3 Elseif Pind.5 = 1 Then Gosub 73 'Taster 4 musste weg wg. Speicher Elseif Pind.3 = 1 Then Gosub _inc 'Taster 6 'Case 4 : Gosub Bk 'Taster 7, dieser wird für Anhängen von /p verwendet Elseif Pind.6 = 1 Then Gosub Knr 'Taster 8 mitte mittlere Reihe End If Scha = Pinb 'für Pinb.1-7 Select Case Scha Case 2 : Gosub Bk 'Taster 9 Elbug (Mittlere Reihe 2.v.l.) Case 4 : Gosub Lok 'Taster 10 Elbug (mitte links) Case 8 : Gosub Test 'Taster 11 (oben links) Gosub F Gosub D Gosub Pau 'Gosub De Gosub Rufz Gosub K Case 16 : 'Gosub Cq 'Taster 12 Gosub Test Gosub Rufz Gosub Pause Gosub K Case 32 : Gosub De 'Taster 13 Case 64 : Gosub Rufz 'Taster 14 Case 128 : Gosub _dec 'Taster 15 End Select Loop End '***************** Subroutinen für Texte ************************************************************* Lok: 'Gosub Pau Gosub I Gosub N Gosub Pause Gosub J Gosub N Zahl = 5 Gosub _zahl Zahl = 8 Gosub _zahl Gosub T Gosub T Return 'Cq: ' Gosub Pau ' Gosub C ' Gosub Q 'Gosub Pau 'Return Test: Gosub Pau Gosub T Gosub E Gosub S Gosub T Gosub Pau Return De: Gosub Pau Gosub D 'Doppelbelegung der Set PORTA.0 KN-Taste mit QRZ Gosub E Gosub Pau Return Rufz: Gosub Pau Gosub D Gosub L Zahl = 8 Gosub _zahl Gosub W Gosub I Gosub G If Pind.2 = 1 Then '/p ans Call anhängen Gosub Pau Gosub _l Gosub _k Gosub _k Gosub _l Gosub _k Gosub Pause Gosub P End If Gosub Pau Return Pse: Gosub Pau Gosub P Gosub S Gosub E Gosub Pau Gosub Pau Return Rst: Gosub Pau Gosub U Gosub R Rst_ohne_ur: Gosub Pause Zahl = 5 Gosub _zahl Gosub N Gosub N 'Zahl = 9 'Gosub _zahl 'Gosub _zahl Gosub Pau Return Nr: Gosub Pau Gosub Kontr_nr Gosub Pau Return Bk: Gosub Pau Gosub _l Gosub _k Gosub _k Gosub _k Gosub Pause Gosub K Return Wiederhol_rst_nr: Gosub Pau Gosub Wiederhol_k_nr Gosub Pau Return Dok: Gosub Pau Gosub S Zahl = 3 Gosub _zahl Zahl = 6 Gosub _zahl Gosub Pau Return 73: Zahl = 7 Gosub _zahl Zahl = 3 Gosub _zahl 'Gosub Pau Gosub T Gosub U Return '************************ Buchstaben und Zahlen ********************************************** 'A: da hier nicht benötigt, wurde es zum Sparen des Speichers weg gelassen ' Gosub _k ' Gosub _l ' gosub pau 'Return 'B: ' Gosub _l ' Gosub _k ' Gosub _k ' Gosub _k ' Gosub Pau 'Return 'C: ' Gosub _l ' Gosub _k ' Gosub _l ' Gosub _k ' Gosub Pau 'Return D: Gosub _l Gosub _k Gosub _k Gosub Pau Return E: Gosub _k Gosub Pau Return F: Gosub _k 'wegen zu wenig Speicherplatz weg rationalisiert Gosub _k Gosub _l Gosub _k Gosub Pau Return G: Gosub _l Gosub _l Gosub _k Gosub Pau Return 'H: ' Gosub _k ' Gosub _k ' Gosub _k ' Gosub _k ' gosub pau 'Return I: Gosub _k Gosub _k Gosub Pau Return J: Gosub _k Gosub _l Gosub _l Gosub _l Gosub Pau Return K: Gosub _l Gosub _k Gosub _l Gosub Pau Return L: Gosub _k Gosub _l Gosub _k Gosub _k Gosub Pau Return 'M: ' Gosub _l ' Gosub _l ' gosub pau 'Return N: Gosub _l Gosub _k Gosub Pau Return 'O: ' Gosub _l ' Gosub _l ' Gosub _l ' gosub pau 'Return P: Gosub _k Gosub _l Gosub _l Gosub _k Gosub Pau Return 'Q: ' Gosub _l ' Gosub _l ' Gosub _k ' Gosub _l ' Gosub Pau 'Return R: Gosub _k Gosub _l Gosub _k Gosub Pau Return S: Gosub _k Gosub _k Gosub _k Gosub Pau Return T: Gosub _l Gosub Pau Return U: Gosub _k Gosub _k Gosub _l Gosub Pau Return V: Gosub _k Gosub _k Gosub _k Gosub _l Gosub Pau Return W: Gosub _k Gosub _l Gosub _l Gosub Pau Return 'X: ' Gosub _l ' Gosub _k ' Gosub _k ' Gosub _l ' Gosub Pau 'Return 'Y: ' Gosub _l ' Gosub _k ' Gosub _l ' Gosub _l ' gosub pau 'Return Z: Gosub _l Gosub _l Gosub _k Gosub _k Gosub Pau Return _zahl: Select Case Zahl Case 0 Gosub _l Gosub _l Gosub _l Gosub _l Gosub _l Gosub Pau Case 1 Gosub _k Gosub _l Gosub _l Gosub _l Gosub _l Gosub Pau Case 2 Gosub _k Gosub _k Gosub _l Gosub _l Gosub _l Gosub Pau Case 3 Gosub _k Gosub _k Gosub _k Gosub _l Gosub _l Gosub Pau Case 4 Gosub _k Gosub _k Gosub _k Gosub _k Gosub _l Gosub Pau Case 5 Gosub _k Gosub _k Gosub _k Gosub _k Gosub _k Gosub Pau Case 6 Gosub _l Gosub _k Gosub _k Gosub _k Gosub _k Gosub Pau Case 7 Gosub _l Gosub _l Gosub _k Gosub _k Gosub _k Gosub Pau Case 8 Gosub _l Gosub _l Gosub _l Gosub _k Gosub _k Gosub Pau Case 9 Gosub _l Gosub _l Gosub _l Gosub _l Gosub _k Gosub Pau End Select Return '************ Subroutine zum setzen der Kontrollnummern ***************************************** Knr: Wait 1 If Pind.6 = 1 Then ' wenn Taster Mitte mittlere Reihe Nr.8 länger als 300ms gedrückt wird Gosub R Wait 2 Do ' Auswahl der Tasten am Port B If Pinb.2 = 1 Then 'links mittlere Reihe Kontrnr = 1 'Kontrollnummer zurück setzen Gosub Wieder 'damit EEPROM nicht etliche male beschrieben wird Elseif Pinb.1 = 1 Then 'rechts daneben Kontrnr = Kontrnr + 1 Gosub Wieder 'Waitms 200 Elseif Pinb.3 = 1 Then 'oben links Kontrnr = Kontrnr + 10 Gosub Wieder 'Waitms 200 Elseif Pinb.4 = 1 Then 'neben dem oben links Kontrnr = Kontrnr + 100 Gosub Wieder 'Waitms 200 'Bestätigung für erfolgreiches Speichern End If Loop Until Pind.6 = 1 'solange die Tasten abfragen bis Ta 8 wieder gedrückt wurde -> Eingabe Kontr.Nr-Menü beendet Gosub R Gosub Pause Gosub Wieder Writeeeprom Kontrnr , _adr 'K-Nr. abspeichern 'Quitton End If Return ' Subroutine zum Erhöhen und Speichern der Kontrollnummer ********************************************************** Kontr_nr: 'Kontrollnummer, die im EEPROM hinterlegt wird (Stromausfall) Readeeprom Kontrnr , _adr 'letzte Kontrollnummer auslesen Kontrnr = Kontrnr + 1 Writeeeprom Kontrnr , _adr 'neue kontrollnummer speichern Wiederhol_k_nr: Readeeprom Kontrnr , _adr 'letzte Kontrollnummer auslesen Wieder: If Kontrnr < 10 Then Gosub T Gosub T Zahl = Kontrnr Gosub _zahl 'einstzellige zahl senden Else If Kontrnr < 100 Then 'wenn Kontrollnummer > 10 und < 100 Gosub T Zahl = Kontrnr / 10 ' Ganzzahldivision 68 : 10 = 6 Gosub _zahl Zahl = Kontrnr Mod 10 Gosub _zahl 'Rest also einstelliger Teil des Ergebnisses Else 'Komntrollnummer >=100 Zahl = Kontrnr / 100 Gosub _zahl '100-er senden Zehner = Kontrnr Mod 100 '323 : 100 = 3 Rest 23 Zahl = Zehner / 10 '23 : 10 = 2 Gosub _zahl Zahl = Zehner Mod 10 '23 : 10 = Rest 3 -> Rest senden '10-ner senden Gosub _zahl 'einer senden End If End If Return '******************* Subroutine zum Erhöhen und Verringern des Gebetempos ******************************************* _inc: 'Gebetempo erhöhen Waitms 200 'Tasten entprellen Zeit = Zeit + 3 Zeit_lang = Zeit * 3 Zeit_sehr_lang = Zeit * 6 Waitms 200 Return _dec: 'Gebetempo verringern Waitms 200 Zeit = Zeit - 3 Zeit_lang = Zeit * 3 Zeit_sehr_lang = Zeit * 6 Return '****************** Zeichen und Pausenverhältnis *************************************************************** _k: 'Punkt Portb = $01 Waitms Zeit Portb = $00 Waitms Zeit Return _l: 'Strich Portb = $01 Waitms Zeit_lang Portb = $00 Waitms Zeit Return Pau: 'kurze Pause zwischen den Zeichen Waitms Zeit_lang Return Pause: 'lange Pause zwischen Wörtern Waitms Zeit_sehr_lang Return