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







					
					
					
						
Zitieren

Lesezeichen