MrQu
28.02.2007, 19:03
Ein Hallo an Euch,
habe ein Problem mit Interrupt und stehe (glaube ich) auf der Leitung. *:-)*
Hier das Programm:
' *** CPU Einstellungen ***
$regfile = "m32def.dat"
$crystal = 11059200
' *** CPU Einstellungen ***
' *** Variablen Definieren ***
Dim Go As Byte
Dim Zaehler As Word
Dim Richtungx As Bit
Dim Richtungy As Bit
' *** Variablen Definieren ***
' *** Constanten ***
Const Anfahren = 83 ' Reload für Timer0 = 998 Hz (PWM 499 Hz)
Const Speed1 = 170 ' Reload für Timer0 = 2010 Hz (PWM 1005 Hz)
Const Speed2 = 199 ' Reload für Timer0 = 3030 Hz (PWM 1515 Hz)
' *** Constanten ***
' *** Port Einstellungen und Ports Reseten ***
Config Porta = Input ' Port A => Input
Config Portb = Input ' Port B => Input
Config Portc = Output ' Port C => Output
' *** Port Einstellungen und Ports Reseten ***
' *** TIMER 0 ***
Config Timer0 = Timer , Prescale = 64 ' Timer0 Einstellungen
On Timer0 Pwm ' wenn timer0 aktiv - dann Sprung zum Unterprogramm "PWM"
Enable Timer0 ' Timer0 GO
' *** TIMER 0 ***
' *** Interrupt Endschalter ***
Config Int0 = Rising
Enable Int0
On Int0 Umschalt
' *** Interrupt Endschalter ***
Enable Interrupts ' Interrupts für die ges. CPU freigegeben
' *** START-Parameter festlegen ***
Zaehler = 1
Richtungx = 0
Richtungy = 0
' *** START-Parameter festlegen ***
' ***** HAUPTPROGRAMM *****
Do
If Pina.0 = 1 Then
If Pina.1 = 0 Then
Go = 1
End If
End If
If Pina.1 = 1 Then
If Pina.0 = 0 Then
Go = 0
Zaehler = 1
End If
End If
Loop
End ' *** E N D E ***
' *** E N D E ***
' ***** HAUPTPROGRAMM *****
' *** PWM ***
Pwm: ' Sprungziel für den Timer0 (PWM-Unterprogramm)
Portc.0 = Richtungx
Portc.2 = Richtungy
If Zaehler <= 499 Then
If Go = 1 Then
Timer0 = Anfahren
Zaehler = Zaehler + 1
Toggle Portc.1
Toggle Portc.3
End If
End If
If Zaehler >= 500 Then
If Zaehler <= 1515 Then
If Go = 1 Then
Timer0 = Speed1
Zaehler = Zaehler + 1
Toggle Portc.1
Toggle Portc.3
End If
End If
End If
If Zaehler >= 1516 Then
If Go = 1 Then
Timer0 = Speed2
Toggle Portc.1
Toggle Portc.3
End If
End If
Return
' *** PWM ***
' *** Interrupt X, Y ***
Umschalt:
If Pinb.2 = 1 Then
Toggle Richtungx
End If
If Pinb.1 = 1 Then
Toggle Richtungy
End If
Return
' *** Interrupt X, Y ***
Ich möchte das wenn PinB.2 oder und PinB.1 von 0 auf 1 umschalten (Endschalter) der Interrupt ausgelöst wird und dann die Richtung geändert wird.
Helft mir mal, ich stehe gerade auf der Leitung, wie ordne ich den Int0 den Pin´s zu?
habe ein Problem mit Interrupt und stehe (glaube ich) auf der Leitung. *:-)*
Hier das Programm:
' *** CPU Einstellungen ***
$regfile = "m32def.dat"
$crystal = 11059200
' *** CPU Einstellungen ***
' *** Variablen Definieren ***
Dim Go As Byte
Dim Zaehler As Word
Dim Richtungx As Bit
Dim Richtungy As Bit
' *** Variablen Definieren ***
' *** Constanten ***
Const Anfahren = 83 ' Reload für Timer0 = 998 Hz (PWM 499 Hz)
Const Speed1 = 170 ' Reload für Timer0 = 2010 Hz (PWM 1005 Hz)
Const Speed2 = 199 ' Reload für Timer0 = 3030 Hz (PWM 1515 Hz)
' *** Constanten ***
' *** Port Einstellungen und Ports Reseten ***
Config Porta = Input ' Port A => Input
Config Portb = Input ' Port B => Input
Config Portc = Output ' Port C => Output
' *** Port Einstellungen und Ports Reseten ***
' *** TIMER 0 ***
Config Timer0 = Timer , Prescale = 64 ' Timer0 Einstellungen
On Timer0 Pwm ' wenn timer0 aktiv - dann Sprung zum Unterprogramm "PWM"
Enable Timer0 ' Timer0 GO
' *** TIMER 0 ***
' *** Interrupt Endschalter ***
Config Int0 = Rising
Enable Int0
On Int0 Umschalt
' *** Interrupt Endschalter ***
Enable Interrupts ' Interrupts für die ges. CPU freigegeben
' *** START-Parameter festlegen ***
Zaehler = 1
Richtungx = 0
Richtungy = 0
' *** START-Parameter festlegen ***
' ***** HAUPTPROGRAMM *****
Do
If Pina.0 = 1 Then
If Pina.1 = 0 Then
Go = 1
End If
End If
If Pina.1 = 1 Then
If Pina.0 = 0 Then
Go = 0
Zaehler = 1
End If
End If
Loop
End ' *** E N D E ***
' *** E N D E ***
' ***** HAUPTPROGRAMM *****
' *** PWM ***
Pwm: ' Sprungziel für den Timer0 (PWM-Unterprogramm)
Portc.0 = Richtungx
Portc.2 = Richtungy
If Zaehler <= 499 Then
If Go = 1 Then
Timer0 = Anfahren
Zaehler = Zaehler + 1
Toggle Portc.1
Toggle Portc.3
End If
End If
If Zaehler >= 500 Then
If Zaehler <= 1515 Then
If Go = 1 Then
Timer0 = Speed1
Zaehler = Zaehler + 1
Toggle Portc.1
Toggle Portc.3
End If
End If
End If
If Zaehler >= 1516 Then
If Go = 1 Then
Timer0 = Speed2
Toggle Portc.1
Toggle Portc.3
End If
End If
Return
' *** PWM ***
' *** Interrupt X, Y ***
Umschalt:
If Pinb.2 = 1 Then
Toggle Richtungx
End If
If Pinb.1 = 1 Then
Toggle Richtungy
End If
Return
' *** Interrupt X, Y ***
Ich möchte das wenn PinB.2 oder und PinB.1 von 0 auf 1 umschalten (Endschalter) der Interrupt ausgelöst wird und dann die Richtung geändert wird.
Helft mir mal, ich stehe gerade auf der Leitung, wie ordne ich den Int0 den Pin´s zu?