- Labornetzteil AliExpress         
Ergebnis 1 bis 4 von 4

Thema: interrupt in bascom

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    interrupt in bascom

    Anzeige

    Powerstation Test
    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

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    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.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    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

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad