PIC 16F684 LED blinkt immer

OP #2086588
Lesenswert?

Hallo,

ich habe mein erstes Programm geschrieben. Jetzt habe ich ein Problem. 
Ich habe an einem Pic 16F684 unter anderem eine LED angeschlossen, die 
mir einen Zustand anzeigen soll. Diese blinkt aber immer oder ist aus.
Kann mir jemand helfen?

Mein Programm total abgespeckt:
1
;                                               *
2
;     Pinbelegung                               *
3
;----------------------------------             *
4
;    PORTA:   0   Ausg Rel_a                    *
5
;             1   Ausg Rel_b                    *
6
;             2   Ausg C                        *
7
;             3   Eing                          *
8
;             4   Ausg A/X                      *
9
;             5   Ausg B/Y                      *
10
;    PORTC:  0  Ausg LED                        *
11
;        1  Eing C                              *
12
;        2  Eing B                              *
13
;        3  Eing A                              *
14
;        4  Eing Y                              *
15
;        5  Eing X                              *
16
;                                               *   
17
;                                               *
18
;******************************************************************************
19

20
     LIST      p=16F684             ; Prozessor definieren
21
     #INCLUDE <P16F684.INC>         ; Variablen für Prozessor
22

23
  #define Rel_a PORTA,0      ; Labels definieren
24
  #define Rel_b PORTA,1
25
  #define A_C PORTA,2
26
  #define A_AX PORTA,4
27
  #define A_BY PORTA,5
28
  #define LED PORTC,0
29
  #define E_C PORTC,1
30
  #define E_B PORTC,2
31
  #define E_A PORTC,3
32
  #define E_Y PORTC,4
33
  #define E_X PORTC,5
34
  #define M_AX Merker,0
35
  #define M_BY Merker,1
36
  #define M_C Merker,2
37
  #define M_LED Merker,3
38
  #define M_Rel_a Merker,4
39
  #define M_Rel_b Merker,5
40

41
;------------------------------------------------------------------------------
42
;
43
; CONFIGURATION
44
;
45
;------------------------------------------------------------------------------
46
;
47
   __CONFIG    _CP_OFF & _CPD_OFF & _BOD_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _FCMEN_OFF & _IESO_OFF
48
;
49
  
50
; 
51
;
52
;------------------------------------------------------------------------------
53

54
; Variablen definieren
55
    CBLOCK 0x20 ; 
56
        
57
        Merker    
58
        loops 
59
        loops2 
60
    
61
    ENDC
62

63
;------------------------------------------------------------------------------
64
; RESET VECTOR
65
;------------------------------------------------------------------------------
66

67
RESET
68
         ORG     0x0000           ; processor reset vector
69
      
70
      CALL  Init
71
      BANKSEL PORTA
72
      BCF    Rel_a      ;Rel_a löschen
73
      BCF    Rel_b      ;Rel_b löschen
74
      BANKSEL PORTC
75
      BCF    LED        ;LED löschen
76
      CLRF  Merker      ;Merker löschen      
77
      GOTO    START           ; Beginn Programm
78

79

80

81
;------------------------------------------------------------------------------
82
; INIT
83
;------------------------------------------------------------------------------
84

85

86

87
Init
88
    
89
    BCF STATUS,RP0   ;Bank 0
90
    CLRF PORTA    ;Init PORTA
91
    MOVLW 07h     ;Set RA<2:0> to
92
    MOVWF CMCON0   ;digital I/O
93
    BSF STATUS,RP0   ;Bank 1
94
    CLRF ANSEL     ;digital I/O
95
    MOVLW B'00001000' ;Set RA<0-5> as outputs / 3 as input
96
    MOVWF TRISA 
97
    BCF STATUS,RP0   ;Bank 0
98

99
    BANKSEL PORTC   ;
100
    CLRF PORTC     ;Init PORTC
101
    MOVLW 07h     ;Set RC<4,1:0> to
102
    MOVWF CMCON0   ;digital I/O
103
    BANKSEL ANSEL  ;
104
    CLRF ANSEL     ;digital I/O
105
    MOVLW B'00111110' ;Set RC<1-5> as inputs / 0 as output
106
    MOVWF TRISC 
107
    BCF STATUS,RP0   ;Bank 0
108

109
    
110
  RETURN
111

112
;------------------------------------------------------------------------------
113
; MAIN PROGRAM
114
;------------------------------------------------------------------------------
115

116
START
117

118
  
119
    BTFSC E_A  ;wenn 0 überspringe nächsten Befehl
120
    BSF LED    ;LED an      
121
    BTFSS E_A   ;wenn 1 überspringe nächsten Befehl
122
    BCF LED    ;LED aus
123
   
124
     
125
    
126

127

128
    GOTO START
129

130
  END

Vielen Dank
Gast #2086797
Lesenswert?

Hi,

erstmal : LVP = OFF in die Config
Ich gehe mal davon aus, dass PORTC, 3 einen Pullup hat. Dann wird bei 
Tasterdruck die LED aus sein, sonst immer an. Ist das so gedacht?

In der Init werden manche Register (zB ANSEL) doppelt beschrieben.

Gruss,
Stampede
#2087144
Lesenswert?

Servus,

es hilft Anfängern eher nicht wenn man Programme zusammenkopiert.
Fang vernünftig auf www.sprut.de an. Da lernst du wie man das macht. 
Zusammenkopieren kann man dann, wenn man versteht, was das Listing 
konkret macht - was du (sei mir nicht böse) noch nicht verstanden 
hast...
OP #2087552
Lesenswert?

Lehrmann Michael schrieb:
> es hilft Anfängern eher nicht wenn man Programme zusammenkopiert.

Ich habe nur einige Programmstücke aus dem Datenblatt vom 16F684 
kopiert. Außerdem ist das Programm etwas länger und ich habe nur zur 
Fehlersuche den Rest gelöscht.
In der Simulation läuft das Programm auch komplett, nur in der Realität 
blinkt die LED.
Aber solche Kommentare helfen mir nicht wirklich weiter.

Gruß michas

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren