So, mein erster Entwurf. Musst evtl noch Fehler ausmerzen, habe gerade keine Zeit zum testen.
Du könntest mehr Reserve rausholen, wenn du nen schnelleren Quarz nimmst, die Baudrate erhöhst, den Code optimierst...
Code:$regfile = "m8def.dat" $crystal = 3686400 $baud = 9600 'Baudrate der UART: 9600 Baud 'Config Timer1 = Timer , Prescale = 64 'On Timer1 Timer_irq 'Const Timervorgabe = 7936 ' Const 7936 Config Timer1 = Timer , Prescale = 8 On Timer1 Timer_irq Const Timervorgabe = 54016 Ddrd = &B00000000 Ddrc = &B11111111 Portd = &B11111111 Dim Sek As Byte Dim Sekunden As Byte Dim P3 As Byte Dim P4 As Byte Dim A As Byte Dim T0 As Long Dim T1 As Long Dim E1 As Long Dim Durchl40 As Long Declare Sub Durchlauf10s Declare Sub Ledon Declare Sub Main Declare Sub Abfragen Declare Sub Ende Declare Sub Zler1 Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portd.2 = Input Enable Timer1 Enable Interrupts 'Main: Led1 Alias Portc.1 Summer Alias Portc.2 Laser Alias Portc.3 P3 Alias Pind.3 Eingang Alias Pind.2 'P4 Alias Pind.3 Main: Sek = 0 '---------------------------------------------------------- '######## einschalten Portd.2 #################### '---------------------------------------------------------- 'Do ' Debounce Pind.2 , 0 , Abfragen , Sub 'Entprellt 'Loop '---------------------------------------------------------- '######## Abfrage des Portd.3 ################### '---------------------------------------------------------- Sub Abfragen() Set Laser 'Portc.3 = 1 'A = 0 'Do Zler1: 'Waitms 25 'P3 = Pind.3 If P3 = 0 Then Set Led1 'Led An ' set summer ' Summer an Portc.2 an A = A + 1 Print " A " ; A If A = 8 Then Gosub Ledon End If 'Goto Zler1 Else Reset Led1 'Led Aus ' reset summer ' Summer an Portc.2 aus A = 0 End If End Sub 'loop '---------------------------------------------------------- '############ Led und Summer ############################# '---------------------------------------------------------- Ledon: A = 0 T0 = 0 T1 = 0 Print "S" 'Senden ein S über RS232 Sekunden = 0 ' Sek auf 0 stellen dass die 10 S 'Do 'For I = 1 to 40 If Sekunden < 10 Then Portc.0 = 1 'Led zeigt 10 Sek.an ' Print " " ; Sekunden ' Kontrolle der Skunden Else Portc.0 = 0 'Led wird aus geschaltet ' Sekunden = 0 'Sekunden werden auf 0 gestzt Goto Ende End If 'Print Pind.4 ; " " ' Kontrolle des Portsd.4 If P4 = 1 Then ' Print "0" 'Senden ein 0 über RS232 Portc.1 = 0 ' Led aus Portc.1 Portc.2 = 0 ' Summer an Portc.2 aus T0 = T0 + 1 Print "0" ; " " ; T0 Else ' Print "1" 'Senden ein 1 über RS232 Portc.1 = 1 ' Led ein Portc.1 Portc.2 = 1 ' Summer an Portc.2 ein T1 = T1 + 1 Print "1" ; " " ; T1 End If Return 'Waitms 25 ' Abfrage alle 25 ms 'Loop 'Next I '------------------------------------------------------------ '####### Ende ############### '------------------------------------------------------------ Ende: E1 = T0 + T1 Print "E" 'Senden ein E über RS232 Print " " Print " " Print " Treffer = " ; T1 Print " N.Treffer = " ; T0 Print " " Print " Gesammt = " ; E1 Print " " Print " Sekunde = " ; Sekunden Print " " Print " " T0 = 0 T1 = 0 Sekunden = 0 Reset Led1 ' Led an Portc.1 aus Reset Summer ' Summer aus Portc.2 Reset Summer ' Laser einschalten Goto Main '------------------------------------------------------------- '########## Timer Skundenbasis ############################# '------------------------------------------------------------- Timer_irq: Timer1 = Timervorgabe Sek = Sek + 1 If Sek = 40 Then Incr Sekunden Sek = 0 End If Call Abfragen If Sekunden = 10 Then Sekunden = 0 Goto Ende End If return End







Zitieren

Lesezeichen