www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC12F675 Interrupt On Change, Größen Abfrage - Probleme


Autor: Marco S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen!

Ich habe ein Problem mit einem PIC-Programm in welchen einfach nur ein 
simpler Interrupt On Change an GP3 ein Interrupt auslöst und in der ISR 
wird eine Variable bei jedem Durchlauf um 1 erhöht.

Im Main Programm wird diese Variable dann abgefragt und je nach dem 
welchen Inhalt sie hat sollen 3 LED´s angesteuert werden.


In der Praxis allerdings funktioniert das ganze nicht so wirklich.Es 
Leuchtet nur die erste LED. Bei bestimmten Eingangsfrequenzen leuchten 
alle 3 oder mal nur 2. Es ist auf jedenfall keine Regelmäßigkeit zu 
erkennen.

Als eingangssignal habe ich eine Kleines Rechteck-TTL Signal im Bereich 
von 0,5Hz bis 10Hz.

Ich kann mir einfach nicht erklären warum das ganze nicht 
funktioniert... Vielleicht habt ihr ja eine Idee!

So hier noch der Code:
  list p=12f675
  #include <P12f675.INC>
  __CONFIG  _PWRTE_ON & _MCLRE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT  
  
  w_temp      Equ 0x20
  status_temp    Equ 0x21
  signal      Equ 0x22
  
    org    0
    
    goto   Init               ; Sprung zum Hauptprogramm  
    
     org  4 
   
  intvec
    
        movwf   w_temp
   swapf   STATUS,w
   bcf     STATUS, RP0     ; status_temp in Bank 0
   movwf   status_temp
 
   movlw    b'00000001'
   addwf    signal,1

Int_end 
    bcf     INTCON, T0IF
    bcf     INTCON, GPIF
    swapf   status_temp,w
    movwf   STATUS
    swapf   w_temp,f
    swapf   w_temp,w
    retfie      
    
    
    Init
        ; IO-Pins
        bcf     STATUS, RP0     ; Bank 0
        clrf    GPIO            ; aus!
        movlw   0x07            ; 0x07 in W schreiben
        movwf   CMCON           ; alle Pins digital 
        bsf     STATUS,RP0      ;Bank 1
        clrf    ANSEL           ;Digital I/O       
        ;bcf    STATUS, RP0     ; Bank 0
        movlw   b'00001000'
        movwf   TRISIO

    
       bsf     INTCON, GIE      ; Interrupt erlauben
  bsf  IOCB, IOCB3              ; Interrupt On-Change GP3
  bcf  INTCON, GPIF      
  bsf  INTCON, GPIE             ; Port Change Interrupt bit 
  bcf  STATUS,RP0               ; Bank 0
    
  clrf   signal


Main

m01

    movlw   .5            
    subwf   signal,W
    btfsc   0x03,0
    goto    m02
    bcf     GPIO,1
    bcf     GPIO,2
    bsf     GPIO,0
m02  
    movlw   .6
    subwf   signal,W
    btfss   0x03,0
    goto    m03
    movlw   .10
    subwf   signal,W
    btfsc   0x03,0
    goto    m03
    bcf     GPIO,0
    bcf     GPIO,2
    bsf     GPIO,1

m03    
    movlw   .11
    subwf   signal,W
    btfss   0x03,0
    goto    m04
    bcf     GPIO,0
    bcf     GPIO,1
    bsf     GPIO,2    
m04
    movlw   .20
    subwf   signal,W
    btfss   0x03,0
    goto    m05
    clrf    signal
m05
    goto    m01

end


MFG Marco

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.