hallo, ich möchte in Bascom in einer interupt-routine
innerhalb einer zeit von gesamt 0,000064 sec die pins schalten.
0-0,000020sec pind1 und von 0,000021-0,000040sec pind2 und
von 0,000041-0,000064sec pind1.
mfg pebisoft
hallo, ich möchte in Bascom in einer interupt-routine
innerhalb einer zeit von gesamt 0,000064 sec die pins schalten.
0-0,000020sec pind1 und von 0,000021-0,000040sec pind2 und
von 0,000041-0,000064sec pind1.
mfg pebisoft
64 µs, das kommt mir doch sehr bekannt vor.
Ich hatte es auch schon probiert mit 1 µs Interrupt und dann in der Int - Routine mit "case of" auswählen. Aber das Timing in Bascom wird kaum funktionieren. Versuch es lieber mit ASM.
Versuch das mal:
Code:$crystal = 8000000 Config Timer0 = Timer , Prescale = 1 , Clear Timer = 1 Timer0 = 8 On Int0 Int0_ovf Enable Interrupts Enable Int0 Dim Wert As Byte Do Loop Int0_ovf: Timer0 = 8 $asm lds r16,{Wert} '1µs Wert in R16 laden cpi r16,65 'Wert=65 ? brne _label0 'nein weiter Label0 clr r16 'sonst Wert=0 _label0: cpi r16,21 brlo _label1 'wenn kleiner 21 -> label1 brge _label2 'wenn größer oder gleich 21 -> label2 jmp _label3 'sonst label3 _label1: ldi r17,1 Out Portd , R17 'Portd.1=1 jmp _end _label2: ldi r17,2 Out Portd , R17 'Portd.2=1 jmp _end _label3: ldi r17,1 Out Portd , R17 'Portd.1=1 _end: inc r16 'Wert erhöhen sts {wert},r16 'Wert speichern $end Asm Return
Sorry, das mit Timer0=8 ist natürlich Quatsch.
Config Timer0 = Timer , Prescale = 8 , Clear Timer = 1
So sollte es heißen, für 1µs Timer0 Interrupt.
Lesezeichen