Mit INT0 und Timer0 habe ich mal für einen Mega8 so ein Testprogramm gemacht:
Es sollte die High- und Low-Zeiten zum PC schicken.Code:$crystal = 8000000 $regfile = "m16def.dat" $hwstack = 64 ' default use 32 for the hardware stack $swstack = 64 'default use 10 for the SW stack $framesize = 128 'default use 40 for the frame space $baud = 38400 Dim Impuls_laenge As Word , Flanken_index As Byte , Flanken_anzahl As Byte , Bit_count As Byte Dim Timer0_startwert As Byte Config Timer0 = Timer , Prescale = 8 'hier den Timer eintragen (8-bit) On Ovf0 Tim0_isr Enable Timer0 Timer0_startwert = 156 'bei mir 8000000/8/(256-156) entspricht 10Khz Timer0 = Timer0_startwert 'Auflösung reicht und gefundene Werte entsprechen immer 100µs Config Int0 = Change 'externer interrupt, bei mir Int0 auf portd.2 On Int0 Get_rc_isr Enable Int0 Ddrd.2 = 0 'ausgang des RC-empfängers Portd.2 = 1 Config Serialout = Buffered , Size = 100 Print "" Enable Interrupts Do Loop End Tim0_isr: Timer0 = Timer0_startwert Incr Impuls_laenge 'bei jedem Überlauf um 1 erhöhen If Impuls_laenge > 1000 Then 'nach 0.1 ohne Signal Stop Timer0 Stop Timer0 Timer0 = Timer0_startwert Impuls_laenge = 0 Print "" End If Return Get_rc_isr: 'RC Impuls erkannt If Impuls_laenge > 0 Then Print Impuls_laenge ; " "; Impuls_laenge = 0 Else Start Timer0 End If Return
Probier es mal aus. Musst du aber auf deinen 8051 umändern.







Zitieren

Lesezeichen