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


von Marco S (Gast)


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:
1
  list p=12f675
2
  #include <P12f675.INC>
3
  __CONFIG  _PWRTE_ON & _MCLRE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT  
4
  
5
  w_temp      Equ 0x20
6
  status_temp    Equ 0x21
7
  signal      Equ 0x22
8
  
9
    org    0
10
    
11
    goto   Init               ; Sprung zum Hauptprogramm  
12
    
13
     org  4 
14
   
15
  intvec
16
    
17
        movwf   w_temp
18
   swapf   STATUS,w
19
   bcf     STATUS, RP0     ; status_temp in Bank 0
20
   movwf   status_temp
21
 
22
   movlw    b'00000001'
23
   addwf    signal,1
24
25
Int_end 
26
    bcf     INTCON, T0IF
27
    bcf     INTCON, GPIF
28
    swapf   status_temp,w
29
    movwf   STATUS
30
    swapf   w_temp,f
31
    swapf   w_temp,w
32
    retfie      
33
    
34
    
35
    Init
36
        ; IO-Pins
37
        bcf     STATUS, RP0     ; Bank 0
38
        clrf    GPIO            ; aus!
39
        movlw   0x07            ; 0x07 in W schreiben
40
        movwf   CMCON           ; alle Pins digital 
41
        bsf     STATUS,RP0      ;Bank 1
42
        clrf    ANSEL           ;Digital I/O       
43
        ;bcf    STATUS, RP0     ; Bank 0
44
        movlw   b'00001000'
45
        movwf   TRISIO
46
47
    
48
       bsf     INTCON, GIE      ; Interrupt erlauben
49
  bsf  IOCB, IOCB3              ; Interrupt On-Change GP3
50
  bcf  INTCON, GPIF      
51
  bsf  INTCON, GPIE             ; Port Change Interrupt bit 
52
  bcf  STATUS,RP0               ; Bank 0
53
    
54
  clrf   signal
55
56
57
Main
58
59
m01
60
61
    movlw   .5            
62
    subwf   signal,W
63
    btfsc   0x03,0
64
    goto    m02
65
    bcf     GPIO,1
66
    bcf     GPIO,2
67
    bsf     GPIO,0
68
m02  
69
    movlw   .6
70
    subwf   signal,W
71
    btfss   0x03,0
72
    goto    m03
73
    movlw   .10
74
    subwf   signal,W
75
    btfsc   0x03,0
76
    goto    m03
77
    bcf     GPIO,0
78
    bcf     GPIO,2
79
    bsf     GPIO,1
80
81
m03    
82
    movlw   .11
83
    subwf   signal,W
84
    btfss   0x03,0
85
    goto    m04
86
    bcf     GPIO,0
87
    bcf     GPIO,1
88
    bsf     GPIO,2    
89
m04
90
    movlw   .20
91
    subwf   signal,W
92
    btfss   0x03,0
93
    goto    m05
94
    clrf    signal
95
m05
96
    goto    m01
97
98
end


MFG Marco

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.