- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: PIC 16f628 -> Interrupts

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.05.2007
    Beiträge
    5

    PIC 16f628 -> Interrupts

    Anzeige

    Praxistest und DIY Projekte
    Moin Moin,

    Ich möchte bei einem PIC 16f628 einen Interrupt durch Pegeländerung an den Pins RB4 bis RB7 auslösen. Wie erkennt nun der PIC, durch welchen Pin der Interrupt ausgelöst wurde? Wie komme ich von einem Interrupt in ein Unterprogramm? RB4 bis RB7 sollen jeweils einen Interrupt auslösen und in verschiedene Unterprogramme springen. Z.B RB7 Interrupt -> knightrider. Im Anhang befindet sich ein Textdokument mit dem Programm, dass ich bis jetzt programmiert habe, es funktioniert aber leider nicht

    Wäre nett, wenn jemand mir helfen würde

    intvec
    movwf w_copy ; Arbeitsregister sichern
    swapf STATUS, w ; STAtus retten
    bcf STATUS, RP0 ; status_temp in Bank 0
    movwf s_copy
    incf PORTA, f ; invertieren von RA0

    btfsc f,B'10000000' ; Wenn RB7 0 ist überspringe goto

    goto rider ; Springe nach rider
    call wait ; Springe ins Unterprogramm
    btfsc f,B'01000000' ; Wenn RB6 "0" ist goto
    goto lauf ; Springe nach lauf
    call wait ; Springe ins Unterprogramm


    Int_end

    bcf INTCON, RBIE ; Flag Bit löschen
    swapf s_copy, w ; Status zurück holen
    movwf STATUS
    swapf w_copy, f
    swapf w_copy, w
    retfie
    ;************************************************* *************
    ; das Hauptprogramm

    Init
    ;16F628 alle Comparatoreingänge auf Digital umschalten


    ; Port RA0 auf Ausgabe stellen
    clrf PORTA ; LED aus
    bsf STATUS, RP0 ; auf Bank 1 umschalten
    movlw B'11110000' ; PortA RA0 output
    movwf TRISA
    bcf STATUS, RP0 ; auf Bank 0 zurückschalten
    BSF CMCON, CM0 ;Eingänge auf Digital schalten
    BSF CMCON, CM1
    BSF CMCON, CM2

    ; RB0-Interrupt einstellen
    bsf STATUS, RP0 ; auf Bank 1 umschalten
    bsf OPTION_REG, RBIF ; Interrupt wird durch RB4-RB7
    bcf STATUS, RP0 ; auf Bank 0 zurückschalten

    bsf INTCON, RBIE ; RB0-interrupt erlauben
    bsf INTCON, GIE ; Interrupt generell erlauben

    loop goto loop ; eine Endlosschleife

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Hallo,
    schau Dir mal diesen und diesen Link an, vielleicht bringt es Dich ein Stück weiter.
    Nach Auslösen eines Interrupts mußt Du in der ISR (Interrupt-Service-Routine) selber ermitteln, wer der Auslöser war.
    Bei dem PortB-Int mußt Du auch zusätzlich ermitteln, welches Bit sich geändert hat.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

Berechtigungen

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

Solar Speicher und Akkus Tests