Hier der Code...
Code:
'******************************************************
'Prozessor: ATMega8L
'R/C_Kanal einlesen
'
'Hardware:
'R/C-Kanal an D.2 (INT0)
'LED an C.0
'LED an C.1
'LED an C.2
'******************************************************
$regfile "m8def.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portd.6 , Rs = Portd.5
Config Lcd = 16 * 2
'Konfiguration der I/O-Ports´s
Config Pind.2 = Input 'R/C Pulseingang
Config Pinb.3 = Output 'PWM Ausgang
Config Pind.7 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pind.6 = Output
Config Pind.5 = Output
Portd.2 = 1
'Konfiguration des Timer1
Config Timer1 = Timer , Prescale = 1
'Konfiguration des INT0
'Interrupt bei jedem Flankenwechsel (0->1 und 1->0)
Config Int0 = Change
'======================================================
'Deklarationen
'======================================================
Dim Reading As Bit
Dim Rc_value As Word
Dim Error As Bit
'======================================================
'Initialisierungen
'======================================================
'Zuweisung der Interrupt-Service-Routinen
On Int0 Rc_read
On Timer1 Rc_error
'Timer-Freigabe
Enable Timer1
Stop Timer1
'PWM-Timer
Enable Timer2
Timer2 = 0
Start Timer2
'Freigabe der Interrupt-Routinen
Enable Int0
Enable Interrupts
Cls
Lcd "Timerwert:"
'Den Cursor ausschalten
Cursor Off
'======================================================
'Hauptprogramm-Schleife
'======================================================
Do
'LED an bei Fehler (Timer-Überlauf)
Portc.2 = Not Error
'Den Timerwert ausgeben
Locate 1 , 12
Lcd Rc_value ; " "
'Erzeugung des PWM-Signals
Ocr2 = Rc_value
Loop
End
'======================================================
'ISR für INT0 - R/C-Kanal lesen
'======================================================
Rc_read:
'Den Timer starten mit steigender Flanke
If Reading = 0 Then
Start Timer1
Reading = 1
Set Portc.0
'Den Timer stoppen mit fallender Flanke
Else
Stop Timer1
Rc_value = Timer1
Timer1 = 0
Reading = 0
End If
'Error-Bit rücksetzen
Error = 0
Return
'======================================================
'ISR für Timer1 - Fehlerhandling
'======================================================
Rc_error:
'Error-Bit setzen
Error = 1
Reading = 0
Stop Timer1
Rc_value = 0
Return
Lesezeichen