Ich habe hier dieses Programm. Das ganze ist in einer Hardware eingebunden. Nur nach einiger Zeit die der Chip läuft, beginnt das Programm von vorn. (es wird print start ausgelöst)
Man kann sich das so vorstellen:
-> Chip bekommt strom und läuft los
-> Print "start"
-> Warte einige Zeit
-> Print "start"
...
Warum ist das so?
Mfg
Tobi
[Bitte helft mir, es ist sehr von Bedeutung]
Code:'--- [ Init ] ------------------------------------------------------------------ Dim Emin As Eram Word At 0 '0 Wert Dim Emax As Eram Word At 2 'Max. Wert Dim Estrecke As Word 'Einheiten Strecke Dim Sstab As Eram Word At 4 'Abstand zwischen 0 und Max in mm Dim Offset As Eram Word At 6 'Offset Const Datensaetze = 42 Dim Volhigh As Eram Word At 8 Dim Volmiddle As Eram Word At 10 Dim Vollow As Eram Word At 12 '--- [ Write into eram - only run the first time! ] ---------------------------- Emin = 0 Emax = 1000 Estrecke = Emax - Emin Sstab = 2000 Offset = 50 Volhigh = 500 Volmiddle = 800 Vollow = 1500 '--- [ Inizialize compiler ] --------------------------------------------------- $regfile = "m168def.dat" 'Set chip AVR mega168 $crystal = 16000000 'Set crystal 16 MHz $baud = 9600 'Set Baudrate 9600 $framesize = 32 'Framesize = 32 $swstack = 32 'SW = 32 $hwstack = 32 'HW = 32 Print "start" '--- [ Config devices and timers ] --------------------------------------------- Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Config ADC Sens Alias Pinc.0 'Setze PINC.0 als Sensor Eingang Config Pind.6 = Output 'OC0A / Motor PWM Pwm_out Alias Pind.6 Config Portc.1 = Output 'Direction A Dira Alias Portc.1 Config Portc.2 = Output 'Direction B Dirb Alias Portc.2 Audio Alias Portb.5 'Audio Ausgang Config Pinc.3 = Input 'Start Interrupt / Druckschalter Inp_start Alias Pinc.3 Config Pind.7 = Input 'Libellen Interrupt Inp_libelle Alias Pind.7 Config Portb.0 = Output 'ROT Led_red Alias Portb.0 Config Portb.1 = Output 'GELB Led_yellow Alias Portb.1 Config Portb.2 = Output 'GRUEN Led_green Alias Portd.3 Inp_stop Alias Pind.2 'Stop Interrupt! 'Timer0 as PWM for engine Tccr0a = &B11000001 Tccr0b = &B00000001 Tcnt0 = &B00000000 Timsk0 = &B00000000 Tifr0 = &B00000000 Ocr0a = 255 'Timer1 as clock for time Config Timer1 = Timer , Prescale = 256 Const Clock = 3036 '--- [ Declare SUBs ] ---------------------------------------------------------- Declare Sub Snd(byval Freq As Word) '--- [ Declare variables ] ----------------------------------------------------- Dim Daten(datensaetze) As String * 19 'Messdaten Dim Is_ok As Word 'Wert ab dem die Messung OK ist Dim Soll As Word 'Sollwert Dim Ist As Integer 'Ist Position Dim Hits As Word 'Anschläge Dim Libelle As Bit 'Libelle Dim Buffer As String * 8 'RS232 Buffer Dim Year As Integer 'Jahr Dim Month As Byte 'Monat Dim Day As Byte 'Tag Dim Hour As Byte 'Stunde Dim Minute As Byte 'Minute Dim Second As Byte 'Sekunde Dim Tresult As String * 5 'Zeitstring Dim Dresult As String * 8 'Datumstring Dim B1 As Byte 'HV Dim W1 As Word 'HV Dim W2 As Word 'HV Dim I1 As Integer 'HV Dim I2 As Integer 'HV Dim S1 As String * 1 'HV Dim S2 As String * 1 'HV Dim Start_setted As Bit 'S_HV Dim After_back As Bit 'S_HV '--- [ Inizialize variables and constants ] ------------------------------------ Start_setted = 0 After_back = 0 Is_ok = 0 'Soll = 0 'Print Soll ; " on init" Ist = 0 Hits = 0 Libelle = 0 Buffer = "" Year = 2000 Month = 1 Day = 1 Hour = 0 Minute = 0 Second = 0 Tresult = "" Dresult = "" '--- [ Inizialize Interrupts ] ------------------------------------------------- Sreg.7 = 0 On Int0 Isr_stop 'On Rising Edge On Pcint1 Isr_start On Pcint2 Isr_libelle On Timer1 Isr_clock 'On Timer1 On Urxc Isr_data 'On Urxc Eicra = &B00000011 Eimsk = &B00000001 Eifr = &B00000001 Pcicr = &B00000110 Pcifr = &B00000110 Pcmsk2 = &B10000000 Pcmsk1 = &B00001000 Pcmsk0 = &B00000000 Enable Timer1 Enable Urxc Sreg.7 = 1 '--- [ Start secuence ] -------------------------------------------------------- Echo Off Gosub Clrdata Dira = 0 Dirb = 0 Ocr0a = 255 Portc.0 = 0 Start Adc '--- [ Main loop ] ------------------------------------------------------------- Do Ist = Getadc(0) If Soll <= Emax Then W1 = Soll - Offset If W1 > Ist Then Dira = 1 Dirb = 0 Ocr0a = 0 End If W1 = Soll + Offset If W1 < Ist Then Dira = 0 Dirb = 1 Ocr0a = 0 End If W1 = Soll - Offset W2 = Soll + Offset If W1 <= Ist Then If W2 >= Ist Then Ocr0a = 255 Dira = 0 Dirb = 0 'If Ist >= W1 Then Soll = Emin If After_back = 1 Then After_back = 0 Soll = Emax Print Soll ; " on afterback" End If End If End If Else Ocr0a = 255 Dira = 0 Dirb = 0 Sreg.7 = 0 End If Loop End '--- [ Interrupt service routine ] --------------------------------------------- Isr_stop: Incr Hits If Inp_stop = 1 Then Print "STOP 1" if inp_stop = 0 then print "STOP 0" If Ist >= Is_ok Then Gosub Savedata Soll = Emin Print Soll ; " on stop_ok" Else If Hits = 3 Then Gosub Savedata Soll = Emin Print Soll ; " on stop_3hits" End If If Hits < 3 Then I1 = Ist - 500 If I1 < 0 Then I1 = 0 Soll = I1 Print Soll ; " on stop_hit" After_back = 1 End If End If Return Isr_start: If Inp_start = 1 Then Print "START 1" If Inp_start = 0 Then Print "START 0" If Inp_start = 0 Then Start_setted = 1 End If If Inp_start = 1 Then If Start_setted = 1 Then Start_setted = 0 Soll = Emax Print Soll ; " on start" End If End If Return Isr_libelle: If Inp_libelle = 1 Then Print "LIBELLE 1" If Inp_libelle = 0 Then Print "LIBELLE 0" If Inp_libelle = 0 Then Libelle = 1 End If Return Isr_data: B1 = Udr If Chr(b1) = "!" Then Soll = 3333 Print Soll ; " on !" End If If Chr(b1) = "]" Then Print Buffer Gosub RS232 End If Buffer = Buffer + Chr(b1) If Chr(b1) = "[" Then Buffer = "" End If Return Isr_clock: Timer1 = Clock Second = Second + 1 If Second = 60 Then Gosub Addminute If Minute = 60 Then Gosub Addhour If Hour = 24 Then Gosub Addday If Day = 31 Then Select Case Month Case 1 : Gosub Addmonth Case 3 : Gosub Addmonth Case 5 : Gosub Addmonth Case 7 : Gosub Addmonth Case 8 : Gosub Addmonth Case 10 : Gosub Addmonth Case 12 : Gosub Addmonth End Select End If If Day = 30 Then Select Case Month Case 2 : Gosub Addmonth Case 4 : Gosub Addmonth Case 6 : Gosub Addmonth Case 9 : Gosub Addmonth Case 11 : Gosub Addmonth End Select End If If Month = 12 Then Gosub Addyear Tresult = Format(hour , "00") + ":" + Format(minute , "00") Dresult = Format(year , "00") + "." + Format(month , "00") + "." + Format(day , "00") Print Soll ; " :: " ; Ist Return '--- [ SUBs and functions ] ---------------------------------------------------- Sub Snd(byval Freq As Word) Sound Audio , 200 , Freq End Sub '--- [ GOSUBs ] ---------------------------------------------------------------- Savedata: For I2 = 0 To Datensaetze If Daten(i2) = "" Then Exit For End If Next I2 If Hits >= 3 Then S1 = "0" Else S1 = "1" If Libelle = 1 Then S2 = "0" Else S2 = "1" Daten(i2) = S1 + "§" + S2 + "§" + Str(soll) + "§" + Str(ist) + "§" + Dresult + "§" + Tresult Print "DATEN" ; I2 Print Daten(i2) Hits = 0 Libelle = 0 After_back = 0 Start_setted = 0 Return Clrdata: For I2 = 0 To Datensaetze Daten(i2) = "" Next I Return Addminute: Minute = Minute + 1 Second = 0 Return Addhour: Hour = Hour + 1 Minute = 0 Return Addday: Day = Day + 1 Hour = 0 Return Addmonth: Month = Month + 1 Day = 0 Return Addyear: Year = Year + 1 Month = 0 Return Rs232: If Buffer = "CLR" Then Gosub Clrdata Print "<EXIT>" End If If Instr(buffer , "YR") > 0 Then Buffer = Right(buffer , 4) Year = Val(buffer) End If If Instr(buffer , "MN") > 0 Then Buffer = Right(buffer , 2) Month = Val(buffer) End If If Instr(buffer , "DA") > 0 Then Buffer = Right(buffer , 2) Day = Val(buffer) End If If Instr(buffer , "HR") > 0 Then Buffer = Right(buffer , 2) Hour = Val(buffer) End If If Instr(buffer , "MI") > 0 Then Buffer = Right(buffer , 2) Minute = Val(buffer) End If If Instr(buffer , "SC") > 0 Then Buffer = Right(buffer , 2) Second = Val(buffer) Print "<EXIT>" End If If Instr(buffer , "SL") > 0 Then Buffer = Right(buffer , 3) Is_ok = Val(buffer) Is_ok = Is_ok * 1 Print "<EXIT>" End If If Instr(buffer , "EI") > 0 Then Buffer = Right(buffer , 4) End If If Instr(buffer , "EA") > 0 Then End If If Instr(buffer , "OF") > 0 Then End If If Instr(buffer , "FA") > 0 Then End If If Instr(buffer , "FB") > 0 Then End If If Instr(buffer , "FC") > 0 Then End If If Buffer = "GDA" Then End If If Buffer = "SND" Then If Daten(1) = "" Then Else For I1 = 0 To Datensaetze If Daten(i1) = "" Then Exit For End If Print "<" ; I1 ; "§" ; Daten(i1) ; ">" Waitms 10 Next I1 End If Print "<EXIT>" End If If Buffer = "FWD" Then Soll = Emax Print Soll ; " on FWD" End If If Buffer = "BWD" Then Soll = Emin Print Soll ; " on BWD" End If If Buffer = "STP" Then Soll = 3333 Print Soll ; " on STP" End If If Buffer = "GIN" Then Print "<4%Position: " ; Ist ; ">" End If If Buffer = "GTI" Then Print "<3%" ; Tresult ; ">" Print "<3%" ; Dresult ; ">" End If If Buffer = "ABP" Then Call Snd(volhigh) Waitms 10 Call Snd(volmiddle) Waitms 10 Call Snd(vollow) End If Return







Zitieren

Lesezeichen